Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pull Request Aplicação Victor Barcelos #72

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,28 @@ O desafio consiste em implementar um CRUD de filmes, utilizando [python](https:/

Rotas da API:

- `/filmes` - [GET] deve retornar todos os filmes cadastrados.
- `/filmes` - [POST] deve cadastrar um novo filme.
- `/filmes/{id}` - [GET] deve retornar o filme com ID especificado.
- `/filmes` - [GET] deve retornar todos os filmes cadastrados.
- `/filmes` - [POST] deve cadastrar um novo filme.
- `/filmes/{id}` - [GET] deve retornar o filme com ID especificado.

O Objetivo é te desafiar e reconhecer seu esforço para aprender e se adaptar. Qualquer código enviado, ficaremos muito felizes e avaliaremos com toda atenção!

#### Sugestão de Ferramentas
#### Sugestão de Ferramentas

Não é obrigatório utilizar todas as as tecnologias sugeridas, mas será um diferencial =]

- Orientação a objetos (utilizar objetos, classes para manipular os filmes)
- [FastAPI](https://fastapi.tiangolo.com/) (API com documentação auto gerada)
- [Docker](https://www.docker.com/) / [Docker-compose](https://docs.docker.com/compose/install/) (Aplicação deverá ficar em um container docker, e o start deverá seer com o comando ``` docker-compose up ```
- [Docker](https://www.docker.com/) / [Docker-compose](https://docs.docker.com/compose/install/) (Aplicação deverá ficar em um container docker, e o start deverá seer com o comando `docker-compose up`
- Integração com banco de dados (persistir as informações em json (iniciante) /[SqLite](https://www.sqlite.org/index.html) / [SQLAlchemy](https://fastapi.tiangolo.com/tutorial/sql-databases/#sql-relational-databases) / outros DB)


#### Como começar?

- Fork do repositório
- Criar branch com seu nome ``` git checkout -b feature/ana ```
- Faça os commits de suas alterações ``` git commit -m "[ADD] Funcionalidade" ```
- Envie a branch para seu repositório ``` git push origin feature/ana ```
- Navegue até o [Github](https://github.com/), crie seu Pull Request apontando para a branch **```main```**
- Criar branch com seu nome `git checkout -b feature/ana`
- Faça os commits de suas alterações `git commit -m "[ADD] Funcionalidade"`
- Envie a branch para seu repositório `git push origin feature/ana`
- Navegue até o [Github](https://github.com/), crie seu Pull Request apontando para a branch **`main`**
- Atualize o README.md descrevendo como subir sua aplicação

#### Dúvidas?
Expand Down
92 changes: 92 additions & 0 deletions README2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# README

## Descrição do Projeto

Este projeto é uma API simples para gerenciar um catálogo de filmes, utilizando FastAPI e SQLAlchemy. A API permite realizar operações básicas como criar, listar, atualizar e excluir filmes. Os dados são armazenados em um banco de dados SQLite.

## Estrutura do Projeto

O projeto é organizado da seguinte forma:

- **app/**: Contém todos os arquivos da aplicação.
- **main.py**: O ponto de entrada da aplicação, onde as rotas da API são definidas.
- **crud.py**: Contém as funções que interagem com o banco de dados.
- **schemas.py**: Define os modelos de dados utilizados pela API.
- **models.py**: Define a estrutura do banco de dados.
- **db.py**: Configurações do banco de dados.
- \***\*init**.py\*\*: Inicializa o pacote.

## Funcionalidades

### 1. Listar Filmes

- **GET /filmes**: Retorna uma lista de todos os filmes ativos.
- **GET /filmes/inativos**: Retorna uma lista de todos os filmes inativos.

### 2. Criar Filme

- **POST /filmes**: Cria um novo filme. O corpo da requisição deve conter os dados do filme (título, diretor, ano e ativo). Se um filme com o mesmo título e ano já existir, um erro será retornado.

### 3. Obter Filme por ID

- **GET /filmes/{id}**: Retorna os detalhes de um filme específico, identificado pelo seu ID. Se o filme não for encontrado, um erro 404 será retornado.

### 4. Atualizar Filme

- **PUT /filmes/{id}**: Atualiza os dados de um filme existente. O corpo da requisição deve conter os novos dados do filme. Se o filme não for encontrado, um erro 404 será retornado.

### 5. Excluir Filme

- **DELETE /filmes/{id}**: Inativa um filme existente. Em vez de remover o filme do banco de dados, ele é marcado como inativo. Isso é feito para manter um histórico de filmes, permitindo que você recupere informações sobre filmes que não estão mais ativos, se necessário. Essa abordagem é útil para evitar a perda de dados e para manter a integridade referencial em sistemas que podem ter relacionamentos com outros dados.

## Como Funciona a Exclusão

A exclusão de um filme é realizada através da rota **DELETE /filmes/{id}**. Quando essa rota é chamada, a API verifica se o filme existe. Se existir, o filme é marcado como inativo, alterando o campo `ativo` para `False`. Isso significa que o filme não será mais exibido nas listas de filmes ativos, mas ainda estará presente no banco de dados.

Essa abordagem de "inativação" em vez de exclusão física é vantajosa por várias razões:

- **Histórico**: Permite manter um registro de todos os filmes, mesmo aqueles que não estão mais ativos.
- **Integridade dos Dados**: Evita problemas de integridade referencial que podem ocorrer se outros dados dependem do filme que está sendo excluído.
- **Recuperação**: Facilita a recuperação de informações sobre filmes que foram inativados, caso seja necessário.

## Como Executar o Projeto

### Usando Python Local

1. **Instalação das Dependências**: Certifique-se de ter o Python e o pip instalados. Em seguida, instale as dependências necessárias:

```bash
pip install fastapi[all] sqlalchemy
```

2. **Executar a Aplicação**: Navegue até o diretório app e execute o seguinte comando:

```bash
uvicorn main:app --reload
```

3. **Acessar a API**: A API estará disponível em `http://127.0.0.1:8000`. Você pode usar ferramentas como Postman ou Insomnia para testar as rotas, ou acessar a documentação automática gerada pelo FastAPI em `http://127.0.0.1:8000/docs`.

### Usando Docker Compose

1. **Pré-requisitos**: Certifique-se de ter o Docker e o Docker Compose instalados em sua máquina.

2. **Executar o Container**: No diretório App do projeto, execute:

```bash
docker-compose up --build
```

Este comando irá:

- Construir a imagem do container
- Iniciar o serviço da API
- Mapear a porta 8000 do container para a porta 8000 do seu host

3. **Acessar a API**: A API estará disponível em `http://localhost:8000`. A documentação pode ser acessada em `http://localhost:8000/docs`.

4. **Parar o Container**: Para parar a execução, use:

```bash
docker-compose down
```
14 changes: 14 additions & 0 deletions app/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Use a imagem base do Python
FROM python:3.10-slim

# Defina o diretório de trabalho
WORKDIR /app

# Copie o conteúdo do diretório atual para o diretório de trabalho no container
COPY . /app

# Instale as dependências
RUN pip install -r requirements.txt

# Comando para iniciar o servidor ASGI, ajustando o caminho para 'app.main:app'
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Empty file added app/__init__.py
Empty file.
Binary file added app/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file added app/__pycache__/crud.cpython-310.pyc
Binary file not shown.
Binary file added app/__pycache__/db.cpython-310.pyc
Binary file not shown.
Binary file added app/__pycache__/main.cpython-310.pyc
Binary file not shown.
Binary file added app/__pycache__/models.cpython-310.pyc
Binary file not shown.
Binary file added app/__pycache__/schemas.cpython-310.pyc
Binary file not shown.
Loading