Compras é uma API REST desenvolvida com Spring Boot 3.4.4 e Java 17, voltada para o gerenciamento de produtos, compradores e compras em um sistema de compras simplificado.
- Docker – O recomendado é utilizar a imagem Docker e o arquivo compose.yml disponibilizados na pasta raíz do projeto para executar a aplicação e para que as dependências externas carreguem de forma automática
- Elasticsearch – Mecanismo de busca e centralização distribuída de logs
- Kibana – Gera os dashboards e relatórios
- Filebeat – Essencial para enviar os logs estruturados para processamento do Elasticsearch + Kibana
- Java - Versão 17+
- Spring Boot – Utilizando a versão 3.4.4
- MapStruct – Utilizado para mapeamento automático entre DTOs e entidades
- JPA – Para criação dos repositórios e manipulação do Banco de Dados H2. Será utilizado junto com o JDBC
- Flyway – Para carregar as tabelas e executar migrações no banco de dados automáticamente
- Spring HATEOAS – Para que a API possa ser consumida em JSON e JSON+HAL
- Log4j2 – Para logging estruturado
- H2 Database – Banco de dados em memória. Apesar de essencial para funcionamento do projeto, o objetivo não é focar na configuração do banco
- PostgreSQL – Banco relacional principal da aplicação
- Lombok – Redução de boilerplate
- Spring Boot Starter Test – Testes com Mockito + JUnit
- Spotless Maven Plugin – Formatação automática do código Java com:
palantirJavaFormat
removeUnusedImports
- Monitoramento e visualização facilitada de logs: Acessando http://localhost:5601, é possível acompanhar os logs da aplicação e utilizar filtros para buscar por registros específicos. Por exemplo: Filtrar logs em que o nível (level) seja igual à "ERROR" ou "WARN".
- Já implementado com configurações simples
- Migrações do banco com Flyway: Inicializa o banco e cria as tabelas por db migrations. Implementado
- PostgreSQL como banco principal: Deixa o H2 para os testes do repositório e PostgreSQL na aplicação principal. Implementado
- Produto: CRUD completo implementado
- Comprador: CRUD completo implementado
- Compra: Ainda não implementado
Permitir que um Comprador registre a Compra de um ou mais Produtos, com atualização automática de:
- Total de compras realizadas
- Saldo de débito
- Saldo do vale-alimentação
- Saldo total (soma dos dois saldos anteriores)
Base URL: /api/v1/produto
Método | Endpoint | Descrição |
---|---|---|
GET | /existe/{nome} |
Verifica se existe um produto com o nome informado |
GET | /soma_preco_produtos |
Recebe uma lista de IDs e retorna a soma dos preços |
GET | /lista_preco_abaixo/{preco} |
Lista produtos com preço abaixo do valor informado |
GET | /lista_preco_acima/{preco} |
Lista produtos com preço acima do valor informado |
GET | /lista_padrao |
Lista todos os produtos ordenados por ID |
GET | /lista_ordenada |
Lista todos os produtos por ordem de criação (mais recentes primeiro) |
GET | /{id} |
Busca um produto pelo ID |
GET | /nome/{nome} |
Busca um produto pelo nome |
POST | /cadastro |
Cadastra um novo produto |
PUT | /alteracao/{id} |
Altera nome e preço de um produto pelo ID |
DELETE | /delecao/{id} |
Deleta um produto pelo ID |
Base URL: /api/v1/comprador
Método | Endpoint | Descrição |
---|---|---|
POST | /cadastra |
Cadastra um novo comprador |
GET | /lista |
Lista todos os compradores |
GET | /lista_ativos |
Lista todos os compradores ativos |
GET | /lista_negativados |
Lista todos os compradores negativados |
GET | /{id} |
Busca um comprador pelo ID |
PUT | /altera_nome/{id} |
Altera o nome cadastrado do comprador |
PATCH | /altera_saldo_debito/{id} |
Altera o saldo de débito do comprador |
PATCH | /altera_saldo_va/{id} |
Altera o saldo de vale-alimentação do comprador |
PATCH | /atualiza_total_compras/{id} |
Altera o total de compras do comprador |
DELETE | /apaga/{id} |
Deleta um comprador pelo ID |
- Testcontainers no repositório: Complementar os testes do repositório subindo um Testcontainer (Usar H2 talvez?). Ainda não implementado
- Testes do Produto [Repository, Service, Controller]: Feito!
- Testes do Comprador [Repository, Service, Controller]: Feito!
- Testes da Compra [Repository, Service, Controller]: Ainda não iniciado
- Java;
- Docker;
- PostgreSQL;
- Para o correto funcionamento do sistema de monitorização, será necessário também inicializar: Kibana, Elasticsearch e Filebeat com as configurações default (Isso é feito de forma automática, caso realize o procedimento abaixo)
- Terminal Linux, Git Bash ou alguma forma de executar comandos Linux.
-
Clone o repositório:
git clone https://github.com/FelipeFranke5/compras.git
-
Abra a pasta do repositório:
cd compras
-
Dê permissão de execução ao script:
chmod +x exec_projeto.sh
-
Defina o usuário e senha do banco PostgreSQL (Exemplo: usuariopsql e senhapsql):
export API_COMPRAS_PSQL_USUARIO=usuariopsql && export API_COMPRAS_PSQL_SENHA=senhapsql
-
Execute o script:
./exec_projeto.sh
A aplicação estará disponível em: http://localhost:8081
Um frontend simples está em desenvolvimento utilizando HTML, CSS e JavaScript, para facilitar a interação com a API REST. É possível acessá-lo na pasta frontend.
Este projeto está em constante evolução e busca praticar domínio de:
- Estruturação de código em camadas
- Evolução e uso de melhores práticas com Spring Boot
- Mapeamento de DTOs com MapStruct
- Logging estruturado (Para o terminal e em arquivo)
- Utilização de ferramentas de formatação e limpeza de código
- Build de pipeline para CI/CD (criação de workflows)