O objetivo dessa api é gerenciar do domínio de pedidos, pagamentos e consumir notícias.
Consome tabelas do banco; usa queries customizadas; aciona functions PL/PgSQL definidas pela equipe de dados.
Foram utilizados:
- Java 17
- Spring Boot 3.5.2
- PostgreSQL
- Docker
Os testes da API foram feitos usando primariamente o Bruno.
Acesse a coleção aqui: bruno-api-pg
Utilizou-se classes Contract para colocar as anotações do Swagger.
Abaixo segue o link do swagger de produção (AWS)
- Link do swagger: https://https://sdg2lzmz63.execute-api.us-east-1.amazonaws.com/swagger-ui/index.html#
Abaixo está um levantamento dos principais padrões de projeto (creacionais, comportamentais e estruturais) utilizados neste projeto, com referência exata aos arquivos onde aparecem:
- model/noticia/NoticiaModel.java
- model/noticia/NoticiaFuncModel.java
- model/pedido/PedidoResiduoModel.java
- model/pedido/PedidoModel.java
- model/pedido/relatorio/RelatorioModel.java
- Todos utilizam a anotação
@Builderdo Lombok, implementando o padrão Builder para criação de objetos.
- Todos utilizam a anotação
- model/pedido/meta/PedidoStatus.java
- O método
toState()do recordAdapteratua como uma fábrica, instanciando a subclasse correta dePedidoStateconforme o status.
- O método
- model/pedido/meta/state/PedidoState.java
- model/pedido/meta/state/AbertoState.java
- model/pedido/meta/state/AprovadoState.java
- model/pedido/meta/state/CanceladoState.java
- model/pedido/meta/state/ConcluidoState.java
- model/pedido/PedidoModel.java
- Implementação do padrão State, permitindo que o
PedidoModelaltere seu comportamento conforme o estado atual.
- Implementação do padrão State, permitindo que o
- model/pedido/pagamento/state/PagamentoState.java
- model/pedido/pagamento/state/PendenteState.java
- model/pedido/pagamento/state/ConcluidoState.java
- model/pedido/pagamento/state/CanceladoState.java
- model/pedido/pagamento/PagamentoStatus.java
- Implementação do padrão State para o ciclo de vida do pagamento, permitindo que o pagamento altere seu comportamento conforme o estado atual.
- util/validation/UniqueVendedorCompradorValidator.java
- util/validation/UniqueVendedorComprador.java
- O validador é injetado via anotação e pode ser trocado, caracterizando o padrão Strategy.
- exception/GlobalExceptionHandler.java
- Manipula exceções de forma encadeada, associando tipos de exceção a handlers específicos.
- model/pedido/meta/PedidoStatus.java
- O record
Adapteradapta umPedidoStatuspara umPedidoState.
- O record
- model/pedido/pagamento/PagamentoStatus.java
- O record
Adapteradapta umPagamentoStatuspara umPagamentoState, permitindo a conversão entre o status do pagamento e seu estado comportamental.
- O record
- config/jackson/JacksonConfig.java
- config/jackson/BlankToNullStringDeserializer.java
- O desserializador customizado é registrado como decorator no processo de desserialização do Jackson.
- Todas as classes anotadas com
@Service,@Repository,@Configuration,@RestControllerAdvice- O Spring utiliza o padrão de Injeção de Dependência para gerenciar os componentes do projeto.
Feito com 💜 por:
- Felipe Fernandes dos Santos Oliveira - Back-end, testes, documentação
- Emílio Stuart Palumbo - Deploy