Backend desenvolvido para a empresa Grãos & Prosa, com foco em escalabilidade, desacoplamento e boas práticas de arquitetura.
O Grãos & Prosa - Backend é uma API REST desenvolvida para dar suporte a uma plataforma de e-commerce voltada ao segmento de cafés e produtos relacionados. A aplicação foi projetada com foco em escalabilidade, desacoplamento e manutenibilidade, seguindo boas práticas amplamente utilizadas no mercado.
A arquitetura é baseada em camadas bem definidas, separando responsabilidades entre controladores, serviços e repositórios, além do uso de DTOs para garantir segurança e organização na comunicação dos dados.
O sistema contempla funcionalidades essenciais de um e-commerce, como:
- Gestão de usuários e autenticação com JWT
- Cadastro e gerenciamento de produtos
- Criação e acompanhamento de pedidos
- Controle de itens e pagamentos
- Gerenciamento de cupons e endereços
Além disso, o projeto integra tecnologias modernas para tornar a aplicação mais robusta:
- RabbitMQ para comunicação assíncrona entre serviços
- WebClient para consumo de APIs externas (ViaCEP)
- Login social com Google
- Swagger / OpenAPI para documentação interativa da API
- Estrutura preparada para futuras integrações com PagBank (pagamentos) e Elasticsearch (busca avançada)
Outro ponto relevante é a preocupação com qualidade de código e boas práticas, incluindo:
- Tratamento de exceções com classes específicas
- Separação clara de responsabilidades (SRP)
- Código desacoplado e preparado para testes
- Uso de Data Seed para facilitar o ambiente de desenvolvimento
- Java + Spring Boot
- Spring Data JPA
- PostgreSQL
- RabbitMQ (mensageria)
- JWT (autenticação e autorização)
- WebClient (integração com ViaCEP)
- Google API (login social)
- Swagger / OpenAPI (documentação)
- Docker
- Data Seed
- Elasticsearch
- Integração com PagBank
O projeto segue uma arquitetura em camadas:
- Controller → Endpoints REST
- Service → Regras de negócio
- Repository → Acesso ao banco de dados
- DTOs → Entrada e saída de dados
- Exceptions → Tratamento de erros customizado
- Usuário
- Credencial
- Endereço
- Produto
- Pedido
- Item
- Pagamento
- Cupom
- JWT (Token Bearer)
- Login com email e senha
- Login com Google
- ViaCEP → Consulta de endereço por CEP
- RabbitMQ → Comunicação assíncrona
- (Futuro) PagBank → Pagamentos
- (Futuro) Elasticsearch → Busca avançada
Abaixo estão os principais endpoints disponíveis na aplicação.
| Verbo HTTP | Endpoint | Descrição |
|---|---|---|
| Auth | ||
| POST | /auth/registro | Registro de novo usuário |
| POST | /auth/login | Login com email e senha |
| POST | /auth/google | Login com Google |
| Credencial | ||
| GET | /credenciais | Lista todas as credenciais |
| GET | /credenciais/{id} | Busca credencial por ID |
| PATCH | /credenciais/{id} | Atualiza credencial |
| DELETE | /credenciais/{id} | Remove credencial |
| Cupom | ||
| GET | /cupons | Lista cupons |
| GET | /cupons/{id} | Busca cupom por ID |
| POST | /cupons | Cria cupom |
| PATCH | /cupons/{id} | Atualiza cupom |
| DELETE | /cupons/{id} | Remove cupom |
| Endereço | ||
| GET | /enderecos | Lista endereços |
| GET | /enderecos/{id} | Busca endereço por ID |
| POST | /enderecos | Cria endereço |
| PATCH | /enderecos/{id} | Atualiza endereço |
| DELETE | /enderecos/{id} | Remove endereço |
| Item | ||
| GET | /itens | Lista itens |
| GET | /itens/{id} | Busca item por ID |
| POST | /itens | Cria item |
| PATCH | /itens/{id} | Atualiza item |
| DELETE | /itens/{id} | Remove item |
| Pagamento | ||
| GET | /pagamentos | Lista pagamentos |
| GET | /pagamentos/{id} | Busca pagamento por ID |
| PATCH | /pagamentos/{id} | Atualiza pagamento |
| DELETE | /pagamentos/{id} | Remove pagamento |
| Pedido | ||
| GET | /pedidos | Lista pedidos |
| GET | /pedidos/{id} | Busca pedido por ID |
| POST | /pedidos | Cria pedido |
| PATCH | /pedidos/{id} | Atualiza pedido |
| DELETE | /pedidos/{id} | Remove pedido |
| GET | /pedidos/{id}/itens | Lista itens do pedido |
| GET | /pedidos/{id}/pagamento | Busca pagamento do pedido |
| Produto | ||
| GET | /produtos | Lista produtos |
| GET | /produtos/{id} | Busca produto por ID |
| POST | /produtos | Cria produto |
| PATCH | /produtos/{id} | Atualiza produto |
| DELETE | /produtos/{id} | Remove produto |
| Usuário | ||
| GET | /usuarios | Lista usuários |
| GET | /usuarios/{id} | Busca usuário por ID |
| PUT | /usuarios/{id} | Atualiza usuário |
| DELETE | /usuarios/{id} | Remove usuário |
| GET | /usuarios/{id}/enderecos | Lista endereços do usuário |
| GET | /usuarios/{id}/pedidos | Lista pedidos do usuário |
A API possui documentação interativa utilizando Swagger (OpenAPI).
Com ela, é possível:
- Visualizar todos os endpoints disponíveis
- Testar requisições diretamente pelo navegador
- Ver parâmetros, exemplos e respostas
- Swagger UI
- OpenAPI JSON
A aplicação utiliza Docker para provisionar os serviços de banco de dados e mensageria.
-
PostgreSQL
- Container:
banco-postgres - Porta:
5432 - Responsável pelo armazenamento dos dados da aplicação
- Container:
-
RabbitMQ
- Container:
rabbitmq - Portas:
5672→ comunicação da aplicação15672→ painel web de administração
- Container:
| Serviço | Porta | Descrição | Link de acesso ao rodar o projeto |
|---|---|---|---|
| API | 8080 | Sistema | http://localhost:8080 |
| PostgreSQL | 5432 | Banco de dados | http://localhost:5432 |
| RabbitMQ | 5672 | Comunicação (mensageria) | http://localhost:5672 |
| RabbitMQ | 15672 | Painel de administração (Web UI) | http://localhost:15672 |
| Swagger (UI) | 8080 | Painel de Documentação (Web UI) | http://localhost:8080/swagger-ui.html |
| OpenAPI (JSON) | 8080 | Painel de Documentação (JSON) | http://localhost:8080/v3/api-docs |
Configure o arquivo .env com os seguintes valores:
-
PostgreSQL
POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DB
-
RabbitMQ
RABBITMQ_DEFAULT_USERRABBITMQ_DEFAULT_PASS
Siga os passos abaixo para rodar o projeto localmente.
- Java 17+
- Maven
- Docker
- Crie um arquivo
.envna raiz do projeto - Configure as variáveis necessárias:
-
PostgreSQL
POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DB
-
RabbitMQ
RABBITMQ_DEFAULT_USERRABBITMQ_DEFAULT_PASS
Suba os containers do PostgreSQL e RabbitMQ via Docker.
Inicie a aplicação Spring Boot normalmente via Maven ou pela sua IDE.
Após iniciar:
- Verifique se a API está respondendo
- Acesse o painel do RabbitMQ
- Confirme a conexão com o banco PostgreSQL
- Certifique-se de que as portas
5432,5672e15672estão livres - O
.envdeve estar corretamente configurado antes de subir os serviços
|
|
|