Desafio backend 6 da alura.
🪧 Vitrine.Dev | |
---|---|
✨ Nome | Apopet Api |
🏷️ Tecnologias | Django Rest Framework , Python , Postgres , Pytest , Docker , swagger |
🚀 URL | |
🔥 Desafio | https://www.alura.com.br/challenges/back-end |
A documentação da API (swagger) esta disponível na rota /docs/
.
-
Cadastrar
: Salvar tutor através de umPOST /tutor/
. -
Buscar por id
: Busca Tutor por ID através de umGET /tutor/{ID}/
, onde {ID} é o identificador do Tutor.- É necessário estar autenticado.
-
Buscar todos
: Busca paginada de tutores através de umGET /tutor/
.- É necessário estar autenticado.
-
Atualizar
: Atualizar Tutor através de umPATCH /tutor/{ID}/
, onde ID é o identificador do Tutor.- Apenas o próprio usuário Tutor pode atualizar seus dados.
- É necessário estar autenticado.
-
Deletar
: Deletar Tutor através de umDELETE /tutor/{ID}
, onde {ID} é o identificador do Tutor.- Apenas o próprio usuário Tutor pode se deletar.
- É necessário estar autenticado.
- O objeto não é deletado de verdade do banco de dados (
soft delete
)
-
Cadastrar
: Salvar Shelter através de umPOST /shelter/
. -
Buscar todos
: Busca paginada de shelters através de umGET /shelter/
.- É necessário estar autenticado.
-
Buscar por id
: Busca Shelter por ID através de umGET /shelter/{ID}/
, onde {ID} é o identificador do Shelter.- É necessário estar autenticado.
-
Atualizar
: Atualizar Shelter através de umPATCH /shelter/{ID}/
, onde ID é o identificador do Shelter, os novos dados do abrigo devem ser enviados no corpo da requisição.- Apenas o próprio usuário Shelter pode atualizar seus dados.
- É necessário estar autenticado.
-
Deletar
: Deletar Shelter através de umDELETE /shelter/{ID}
, onde {ID} é o identificador do Shelter.- Apenas o próprio usuário Shelter pode se deletar.
- É necessário estar autenticado.
- O objeto não é deletado de verdade do banco de dados (
soft delete
) - Todos os
pets
associando as este abrigo também são deletados.
-
Cadastrar
: Salvar Pet através de umPOST /pet/
com as informações.- Apenas Shelters podem cadastrar Pets.
-
Buscar todos
: Busca paginada de pets através de umGET /pets/
.- É necessário estar autenticado.
-
Buscar por id
: Busca Pet por ID através de umGET /pet/{ID}/
, onde {ID} é o identificador do Pet.- É necessário estar autenticado.
-
Atualizar
: Atualizar Pet através de umPATH /pet/{ID}/
, onde ID é o identificador do Pet.- Apenas o Abrigo que cadastrou o Pet pode atualiza-lo.
-
Deletar
: Deletar Pet através de umDELETE /pet/{ID}
, onde {ID} é o identificador do Pet.- Apenas o Abrigo que cadastrou o Pet pode deleta-lo.
- objeto não deletado de verdade do banco de dados (
soft delete
)
-
Adotar
: Solicitar uma adoção de um Pet através de umPOST /adoption/
.- Apenas usuários do tipo tutor podem solicitar uma adoção.
- É necessário estar autenticado
- Apenas Pets não é adotados podem receber uma solicitação de adoção.
-
Buscar todos
: Busca paginada de adoções através de umGET /adoption/
.- É necessário estar autenticado.
- Busca somente adoções relacionadas ao usuário autenticado (Shelter ou tutor).
-
Deletar
: Deletar uma adoção através de umDELETE /adoption/{ID}
, onde {ID} é o identificador da Adoção.- O objeto é deletado de verdade do banco de dados.(
hard delete
) - Uma adoção só pode ser deletada pelo Shelter relacionado na adoção.
- O objeto é deletado de verdade do banco de dados.(
Foi usando o python-decouple
portanto primeiro as variaveis são procuradas nas variaveis de ambiente. Se não forem achadas são lá elas são procuradas no arquivo .env
.
Do ambiente de desenvolvimento basta definir o arquivo .env
:
DEBUG=True
SECRET_KEY=Sua_chave_secreta_aqui!
ALLOWED_HOSTS=127.0.0.1,localhost
DATABASE_URL=postgres://adopet_user:123456@localhost:5432/adopet_user
DOC_API=True
Você precisa primeiro copiar o docker compose de desenvolvimento para a raiz do projeto
cp docker/docker-compose.dev.yml docker-compose.yml
Agora você pode subir a aplicação com
make docker_build_and_up
A aplicação ficará disponivel em http://localhost:8000/
Todas as variaveis de ambiente usadas no conteiner são as definida no arquivo .env
exceto o DATABASE_URL
que é sobrescrito dentro do docker compose. Além disso foi utilizazndo PYTHONBREAKPOINT=ipdb.set_trace
portanto é necessario usar o pytest
com -s
caso você queria usar breakpoints
.
- rodando os testes :
make docker_pytest
- aplicando as migrações:
make docker_migrate
- gerando as migrações:
make docker_makemigrations
- criando o superusuario:
docker_create_admin
- subindo os containers:
make docker_up
- parando os containers:
make docker_down
- gerando a imagem da aplicação:
make build
- subindo o container do banco de dados:
make up_db