Adopet API é uma REST API de uma plataforma para conectar pessoas que desejam adotar animais de estimação e abrigos.
A aplicação possui endpoints para gerenciar e manipular os recursos Guardião (Guardian), Abrigo (Shelter), Animal de estimação (Pet) e Adoção (Adoption), que são protegidos e requerem autenticaçao por JWT (Json Web Token) para serem manipulados.
Projeto proposto pela Alura no Challenge Backend 6ª Edição.
Login de usuário
: O login deve ser realizado através de um POST /api/auth com as credenciais do usuário (email e password) em um JSON no corpo da requisição.
-
Cadastrar
: Salvar Guardian através de um POST /api/guardians com as informações de name, email, password e confirmPassword em um JSON no corpo da requisição. -
Atualizar
: Atualizar Guardian através de um PUT /api/guardians/{ID}, onde ID é o identificador do Guardian, os novos dados do guardian devem ser enviados no corpo da requisição.- Apenas o próprio usuário Guardian pode atualizar seus dados.
- É necessário estar autenticado.
-
Buscar por id
: Busca Guardian por ID através de um GET /api/guardians/{ID}, onde {ID} é o identificador do Guardian.- É necessário estar autenticado.
- É necessário estar autenticado.
-
Buscar todos
: Busca paginada de guardians através de um GET /api/guardians.- É necessário estar autenticado.
- É necessário estar autenticado.
-
Deletar
: Deletar Guardian através de um DELETE /api/guardians/{ID}, onde {ID} é o identificador do Guardian.- Apenas o próprio usuário Guardian pode se deletar.
- É necessário estar autenticado.
-
Cadastrar
: Salvar Shelter através de um POST /api/shelters com as informações de name em um JSON no corpo da requisição. -
Buscar todos
: Busca paginada de shelters através de um GET /api/shelters.- É necessário estar autenticado.
- É necessário estar autenticado.
-
Buscar por id
: Busca Shelter por ID através de um GET /api/shelters/{ID}, onde {ID} é o identificador do Shelter.- É necessário estar autenticado.
- É necessário estar autenticado.
-
Atualizar
: Atualizar Shelter através de um PUT /api/shelters/{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 um DELETE /api/shelters/{ID}, onde {ID} é o identificador do Shelter.- Apenas o próprio usuário Shelter pode se deletar.
- É necessário estar autenticado.
-
Cadastrar
: Salvar Pet através de um POST /api/pets com as informações name, description, age, image e shelterId em um JSON no corpo da requisição.- Apenas Shelters podem cadastrar Pets.
-
Buscar todos
: Busca paginada de pets através de um GET /api/pets.- É necessário estar autenticado.
- É necessário estar autenticado.
-
Buscar por id
: Busca Pet por ID através de um GET /api/pets/{ID}, onde {ID} é o identificador do Pet.- É necessário estar autenticado.
- É necessário estar autenticado.
-
Atualizar
: Atualizar Pet através de um PUT /api/pets/{ID}, onde ID é o identificador do Pet, os novos dados do pet devem ser enviados no corpo da requisição.- Apenas o Shelter que cadastrou o Pet pode atualiza-lo.
- Apenas o Shelter que cadastrou o Pet pode atualiza-lo.
-
Deletar
: Deletar Pet através de um DELETE /api/pets/{ID}, onde {ID} é o identificador do Pet.- Apenas o Shelter que cadastrou o Pet pode deleta-lo.
- Pet relacionado a uma Adoption não pode ser deletado.
-
Adotar
: Solicitar uma adoção de um Pet através de um POST /api/adoptions com as informações petId em um JSON no corpo da requisição. É necessário estar autenticado. Apenas Guardians podem solicitar uma adoção.- Apenas usuários do tipo guardian podem solicitar uma adoção.
- Apenas Pets não adotados podem receber uma solicitação de adoção.
-
Buscar todos
: Busca paginada de adoções através de um GET /api/adoptions, retorna todas as adoções relacionadas com o usuário logado.- É necessário estar autenticado.
- Busca somente adoções relacionadas ao usuário autenticado (Shelter ou Guardian).
-
Atualizar status
: Atualização de status através de um PUT /api/adoptions/{ID}/status com a informação status em um JSON no corpor da requisição. Os status possíveis são ANALYSING, CONCLUDED e CANCELED. Apenas usuários do tipo Shelter atualizar status.- Uma adoção só pode ter o status atualizado pelo Shelter relacionado na adoção.
- Uma adoção só pode ter o status atualizado pelo Shelter relacionado na adoção.
-
Deletar
: Deletar uma adoção através de um DELETE /api/adoptions/{ID}, onde {ID} é o identificador da Adoção.- Uma adoção só pode ser deletada pelo Shelter relacionado na adoção.
- Uma adoção só pode ser deletada pelo Shelter relacionado na adoção.
Clone o projeto:
git clone https://github.com/Edson-Mendes/adopet-api.git
Execute o comando:
docker compose -f adopet-api.yml up -d
O comando acima executará o arquivo adopet-api.yml,
que irá subir um container PostgreSQL e um container da aplicação.
Após subir os containers, acesse http://localhost:8888/swagger-ui.html.
É necessário ter o Docker Compose instalado em sua máquina.
Realizei o deploy da aplicação no Heroku, você pode testar/brincar/usar aqui
Caso encontre alguma falha/bug me avise, se possível 😁.
OBS: O plano que eu uso do Heroku adormece a aplicação depois de certo tempo inativo, então pode ser que a primeira requisição demore um pouco (até uns 60 segundos), apenas seja paciente 😉.
- Fornecer mais informações sobre Pet no DTO AdoptionResponse.
- Criar um endpoint para o usuário atualizar sua senha.
- Escrever a documentação dos erros que o usuário pode enfrentar.
- Limitar a quantidade de dados que podem ser buscados na busca paginada.
- Criar usuário admin.