API de controle de emprestrimo criada utilizando DRF. As libs utilizadas:
libs | descrição |
---|---|
django | Framework web |
restframework | Extenão para contrução de APIs para o django |
psycopg | Driver para postgres |
drf-spectacular | Documenação em OpenAPI |
gunicorn | Servidor de aplicação |
python-decouple | Variáveis de ambiente |
dj-database-url | URL de banco de dados Django |
django-extensions | Funcionalidades extra para manege.py |
pytest | Framework de teste |
coverage | Cobertura de teste |
ruff | Formatador / Linter |
black | Formatador |
taskipy | Gerenciador de tarefas e comandos |
faker | Geradores de dados Fake para testes |
model-bakery | Gerador de dados do Modelos do Djanfo para testes |
sentry | Monitoramento de errors em produção |
Deploy da aplicação no fly.io:
Usuarios disponiveis
- [email protected] - 123456!!
- [email protected] - 123456!!
- [email protected] - admin
Os arquivos Dockerfile
e fly.toml
foram são do deploy do fly.io
.
Uma amostra das variáveis de ambiente disponiveis estão no arquivo .env_samples
. Elas são:
SECRET_KEY
- Chave secreta do DjangoALLOWED_HOSTS
- Hosts do DjangoDATABASE_URL
- Url do banco de dadosDEBUG
- Debug do djangoDOC_API
- Habilita ou não a documenta OpenAPISENTRY_DNS
- Configuração do sentry
Para simular o ambiente de produção simplificada foi usado o nginx
como proxy reverso
escutando na porta 80
. Os serviços do app
e do banco de dados estão isolados dentro da rede do docker
. A imagem da app
é definida no Dockerfile.prod
e a orquestração dos containers
no docker-compose-prod.yml
. Os arquivos
estáticos do admin
foram servidos pelo nginx
. A coleta dos arquivos estáticos é feita no docker-compose-prod.yml
.
Para subir os containers basta:
docker compose -f docker-compose-prod.yml up -d
A documentação estará disponivel em http://localhost/docs/.
Para o banco de dados foi usado a imagem postgres:16.1-alpine
.
Subindo o banco de dados com taskipy
:
task up_db
Ou pode-se subir direto com o docker compose
:
docker compose -f docker-compose-dev.yml up database -d
Todo o desenvolimento pode ser feito na maquina local sem docker caso você prefirir. Com a exceção do banco de dados.
Para instalar as dependencias:
poetry install --no-root
Subindo o servidor:
python manage.py runserver
A documentação estará disponivel http://localhost:8000/docs/.
Rodando os testes:
pytest
Foi usado o pacote pytest-randomly
então a ordem dos teste é aleatoria. Para rodar os teste sempre na mesma ordem:
pytest -p no:randomly
Formatar o código com black
e ruff
:
task fmt
Para usar o ruff
como linter:
task linter
Para subir o servidor local com gunicorn
task server_prod
Caso você queria é possivel desenvolver interiamente em conteiners
. A imagem da app
é definida em Dockerfile.dev
e a orquestração dos containers
em docker-compose-dev.yml
.
Para subir os conteiners
da aplicação e banco de dados:
docker compose -f docker-compose-dev.yml up -d
A documentação estará disponivel http://localhost:8000/docs/.
Para rodar os testes.
docker compose -f docker-compose-dev.yml run api pytest
Para ver os logs
docker compose -f docker-compose-dev.yml logs
Caso você queria acompanhar o log de um serviço específico:
docker compose -f docker-compose-dev.yml logs api -f
Formatar o código com black
e ruff
:
docker compose -f docker-compose-dev.yml run api task fmt
Para usar o ruff
como linter:
docker compose -f docker-compose-dev.yml run api task lint