Esse é um projeto desenvolvido inicialmente durante o curso de Arquitetura Hexagonal da Digital Inovation One, com o objetivo de colocar em prática os conhecimentos sobre o assunto.
A aplicação possui 3 camadas:
- Application: onde ficam as configurações do projeto, controllers, dtos, errors handlers, etc. É a camada que vai ter acesso à tecnologia.
- Domain: onde ficam as entidades de domínio, regras de negócio, portas e services.
- Resource: implementa interfaces, se tornando um adaptador (proxy). É onde fica a JPA Repository e entidades mapeadas com anotações de acordo com tecnologia de banco de dados escolhida.
A partir da API, é possível criar, editar e remover Avengers.
- Java 21
- Spring Framework
- JPA
- Hibernate
- Lombok
- Validation
- FlyWay (Migrations)
- PostgreSQL (DB)
- Docker (Container)
- Swagger (Documentação)
- Clone o repositório na sua máquina local:
https://github.com/FabioSigF/avengers-api
- É necessário ter o Docker instalado para criação de containers do pgAdmin e postgres.
https://www.docker.com/products/docker-desktop/
- Faça alterações no arquivo docker/.env para colocar as configurações de preferência do banco de dados:
DB_USER=postgres
DB_PASSWORD=admin
DB_NAME=avengers
PGADMIN_DEFAULT_EMAIL=avengers@email.com
PGADMIN_DEFAULT_PASSWORD=123456
- Inicialize o .yaml na pasta do docker com os seguinte comando:
cd docker
docker-compose -f .\avenger-api-resources.yaml up -d
- Configure as variáveis de ambiente no IntelliJ.
Em Run, na barra superior da ferramenta, clique em Edit Configurations e Environment Variables.
Você deve adicionar os mesmos valores de configuração do docker/.env:
DB_USER=postgres
DB_PASSWORD=admin
DB_NAME=avengers
- Agora, basta rodar a aplicação.
GET /avengers/api
GET /avengers/api/${id}/detail
Parâmetro | Tipo | Descrição |
---|---|---|
id |
Long |
Obrigatório. O ID do Avenger que você quer |
POST /avengers/api
Cada instância de Avenger deve possui um nome único. Nomes (nick) repetidos não são aceitos na API. Deve ser enviado um body com os dados do Avenger.
Exemplo de Body:
{
"nick": "Homem de Ferro",
"person": "Tony Stark",
"description": "É o homem de ferro",
"history": "Herdou o império de tecnologia do seu pai. Desde cedo, era extremamente inteligente e, a pós ser sequestrado, construiu a primeira versão do que seria mais tarde conhecida como a armadura do Homem de Ferro."
}
Obrigatório: "nick" e "person".
PUT /avengers/api/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
Long |
Obrigatório. O ID do Avenger que você quer atualizar |
Precisa de um Body com pelo menos um campo que será atualizado.
Exemplo:
{
"nick": "Homem de Ferro",
}
Se o "nick" já existir em outro personagem, a requisição será negada.