https://github.com/vitorvogomes/fastapi-stand-livros
CRUD para Gerneciamento de Livros utilizando FAST API
https://github.com/vitorvogomes/fastapi-stand-livros
crud docker-compose fastapi openapi postgresql pytest python3 sqlalchemy swagger
Last synced: about 2 months ago
JSON representation
CRUD para Gerneciamento de Livros utilizando FAST API
- Host: GitHub
- URL: https://github.com/vitorvogomes/fastapi-stand-livros
- Owner: vitorvogomes
- Created: 2024-11-06T19:52:37.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-11-17T23:21:02.000Z (over 1 year ago)
- Last Synced: 2025-03-11T23:37:39.648Z (over 1 year ago)
- Topics: crud, docker-compose, fastapi, openapi, postgresql, pytest, python3, sqlalchemy, swagger
- Language: Python
- Homepage:
- Size: 97.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# StandLivros | Python | FastAPI :book:
## Descrição Geral
Neste projeto, será desenvolvido uma **API RESTful** utilizando **FastAPI** em **Python**, realizando operações básicas de CRUD (Create, Read, Update, Delete).
Implementação de testes unitários, boas práticas de desenvolvimento, recursos de segurança e documentação da API.
### API RESTful FastAPI
- Desenvolver uma API utilizando **FastAPI** para gerenciar uma entidade de "Livros".
- Implementar as operações básicas de **CRUD (Create, Read, Update, Delete)** para essa entidade.
- Utilizar um banco de dados relacional **PostgreSQL**, com uma biblioteca ORM como **SQLAlchemy** para persistência dos dados.
### Cobertura de Testes Unitários
- Implementar **testes unitários** para validar as funcionalidades principais da API.
- Utilizar frameworks de testes como **pytest** para garantir uma cobertura de código de pelo menos 50%, idealmente buscando 100%.
### Documentação da API com OpenAPI/Swagger
- Utilizar a documentação automática gerada pelo FastAPI com **OpenAPI/Swagger** para documentar os endpoints da API.
- A documentação deve incluir descrições detalhadas dos endpoints, parâmetros, e modelos de resposta.
### Autenticação & Autorização
Esses itens não são obrigatórios, mas serão considerados como bônus e podem demonstrar seu nível de experiência e conhecimento avançado:
- Implementar **Autenticação** de usuários utilizando **JWT (JSON Web Tokens)**.
- Implementar a **Autorização** com uso de Dependências (dependencies) ou Middleware para restringir o acesso a determinados endpoints.
### TECNOLOGIAS :bulb:
1. [Python]
2. [FastAPI]
3. [PostgreSQL]
4. [SQLAlchemy]
5. [Pytest]
6. [Docker]
#### Inicialização do ambiente virtual e download das dependências do projeto
- Para clonar um repositório do GitHub, use o comando git clone seguido da URL do repositório
```sh
git clone https://https://github.com/vitorvogomes/fastapi-stand-livros.git
```
#### Configurar o ambiente virtual do python
- Criar ambiente virtual
```sh
python3 -m venv .venv
```
- Inicializar o ambiente virtual
```sh
source .venv/bin/activate
```
- Atualizar ferramentas pip
```sh
pip install --upgrade pip
```
- Download das dependencias do projeto
```sh
pip install -r requirements.txt
```
#### Para Rodar localmente e Realizar testes com Pytest
###### Renomear as variáveis de ambiente para acessar o banco de dados PostgreSQL
- Renomear a variavel DATABASE_URL manualmente no arquivo .env DATABASE_URL como base de exemplo arquivo .env.pytest
```sh
DATABASE_URL=sqlite:///./test.db
```
- Carregar variáveis de ambiente
```sh
source .env
```
- Confirmação da variável DATABASE_URL
```sh
grep DATABASE_URL .env
ou
echo ${DATABASE_URL}
```
###### Rodar os teste com pytest
- Testes com arquivos específicos
```sh
python3 -m pytest tests/test_services.py
```
- Testes com cobertura de código para uma rota específica
```sh
python3 -m pytest --cov=services --cov-report=term-missing
```
- Testes e gerar cobertura para todo o projeto
```sh
python3 -m pytest --cov=. --cov-report=term-missing
```
- Alternativa usando 'coverage' diretamente
```sh
coverage run -m pytest tests/
```
- Gerar relatório da cobertura no terminal
```sh
coverage report -m
```
#### Docker Compose para incializar os Containers
###### Configurar as variáveis de ambiente para acessar o banco de dados PostgreSQL
- Modificar DATABASE_URL para 'db' durante no container no arquivo .env para rodar na produção
```sh
POSTGRES_USER=postgres
POSTGRES_PASSWORD=mysecret
POSTGRES_DB=mydatabase
DATABASE_URL=postgresql+psycopg2://postgres:mysecret@db:5432/mydatabase
```
- Setar variáveis de ambiente
```sh
source .env
```
- Build e Up: Para criar os containers
```sh
docker-compose up --build
```
- Logs
```sh
docker-compose logs
```
- Rebuild e Restart nos containers
```sh
docker-compose down
```
- Up: Para inicializar os containers
```sh
docker-compose up
```
#### Configurar as variáveis de ambiente para acessar
###### PRODUÇÃO - CONTAINER DOCKER - ARQUIVO (.env)
- Renomear o arquivo para rodar
```sh
POSTGRES_USER=postgres
POSTGRES_PASSWORD=mysecret
POSTGRES_DB=mydatabase
DATABASE_URL=postgresql+psycopg2://postgres:mysecret@db:5432/mydatabase
```
###### TESTES COM PYTEST - LOCAL - ARQUIVO (.env)
- Renomear o arquivo para rodar
```sh
DATABASE_URL=sqlite:///./test.db
```
### Endpoints da API
###### GET "/books" -- GET BOOK LIST
- Forneçe uma lista das livros na StandLivros.
- Possui parâmetros de consulta para filtrar através do título, autor, categoria.
###### POST "/books" -- CREATE BOOK
- Permite que novos livros sejam adicionados na StandLivros.
###### PUT "/books/{booking_id}" -- UPDATE BOOK
- Permite que alguma informação sobre o título, autor, categoria e preço do livro podem ser alteradas.
###### DELETE "/books/{booking_id}" -- DELETE BOOK
- Permite excluir um livro da StandLivros.
#### OpenAPI/Swagger
- Após rodar a aplicação no VS Code a documentação e testes podem ser feitos no link:
##### Link Documentação API StandLivros
### Versões utilizadas no projeto
- Ubuntu 24.04.1 LTS
- Python 3.12.3
- Docker 27.3.1
- Docker Compose version v2.30.3
- PostgreSQL 16.4 (Ubuntu 16.4-0ubuntu0.24.04.2)