Skip to content

ProjectPurpura/api-pg

Repository files navigation

API de acesso ao PostgreSQL do PurPura 💜

Java Spring Boot PostgreSQL Docker Maven Bruno – API Client Swagger GitHub Actions AWS

Overview 🌠

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.

Tecnologias 🪼

Foram utilizados:

  • Java 17
  • Spring Boot 3.5.2
  • PostgreSQL
  • Docker

Testes do Bruno ✅

Os testes da API foram feitos usando primariamente o Bruno.

Acesse a coleção aqui: bruno-api-pg

Swagger e documentação 🧪

Utilizou-se classes Contract para colocar as anotações do Swagger.

Abaixo segue o link do swagger de produção (AWS)


Padrões de Projeto Utilizados

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:

Padrões Criacionais

Builder

  • 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 @Builder do Lombok, implementando o padrão Builder para criação de objetos.

Factory/Factory Method

  • model/pedido/meta/PedidoStatus.java
    • O método toState() do record Adapter atua como uma fábrica, instanciando a subclasse correta de PedidoState conforme o status.

2. Padrões Comportamentais

State

Pedido
  • 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 PedidoModel altere seu comportamento conforme o estado atual.
Pagamento
  • 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.

Strategy (Validação)

  • util/validation/UniqueVendedorCompradorValidator.java
  • util/validation/UniqueVendedorComprador.java
    • O validador é injetado via anotação e pode ser trocado, caracterizando o padrão Strategy.

Chain of Responsibility (Tratamento de Exceções)

  • exception/GlobalExceptionHandler.java
    • Manipula exceções de forma encadeada, associando tipos de exceção a handlers específicos.

3. Padrões Estruturais

Adapter

Pedido
  • model/pedido/meta/PedidoStatus.java
    • O record Adapter adapta um PedidoStatus para um PedidoState.
Pagamento
  • model/pedido/pagamento/PagamentoStatus.java
    • O record Adapter adapta um PagamentoStatus para um PagamentoState, permitindo a conversão entre o status do pagamento e seu estado comportamental.

Decorator (Spring/Jackson)

  • config/jackson/JacksonConfig.java
  • config/jackson/BlankToNullStringDeserializer.java
    • O desserializador customizado é registrado como decorator no processo de desserialização do Jackson.

4. Injeção de Dependência (Padrão Estrutural do Framework)

  • 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.

Autores

Feito com 💜 por:

Releases

No releases published

Packages

 
 
 

Contributors 3

  •  
  •  
  •