API backend desenvolvida em Java e Spring Boot para gestão de usuários, pedidos, produtos, entregadores e estabelecimentos — simulando o domínio de um sistema de delivery (estilo Rappi/iFood).
🔄 Projeto em evolução contínua: este README é atualizado a cada fase concluída, refletindo o estado real da aplicação.
- Java 8
- Spring Boot 2.4.3
- Spring Data JPA
- Bean Validation (Jakarta/Javax Validation)
- H2 Database (em memória)
- Swagger / Springfox 3.0.0
- Maven
- Lombok
Entidades principais:
Usuario • Estabelecimento • Endereco • Estado (enum) • Categoria (enum) • Produto • Pedido • ItemPedido • StatusPedido (enum) • FormaPagamento (enum) • HorarioFuncionamento • Entregador
Fluxo geral: um Estabelecimento possui endereço(s), horários de funcionamento e formas de pagamento aceitas. Ele oferece Produtos categorizados. Um Usuário realiza um Pedido com um ou mais Itens de Pedido, que evolui através de diferentes Status, até ser entregue por um Entregador.
- Aplicação compila e roda localmente (Tomcat embarcado, porta 8080)
- Persistência funcional via H2 (console habilitado)
- Endpoint de criação de Estabelecimento validado (Endereço, Horário de Funcionamento e Forma de Pagamento aninhados)
- Endpoint de criação de Produto validado (vinculado a Estabelecimento e Categoria)
- Endpoint de criação de Entregador validado (com validação de formato de placa via regex)
- Endpoint de criação de Usuário validado (com Endereço de entrega)
- Fluxo completo do Pedido validado, incluindo máquina de estados:
EM_PREPARO→SAIU_PARA_ENTREGA→ENTREGUEEM_PREPARO→CANCELADO
- Regra de negócio validada: atribuição automática de entregador disponível ao pedido
- Regra de negócio validada: bloqueio de transição de status fora de ordem
POST /estabelecimentos
{
"cnpj": "12.345.678/0001-90",
"nomeFantasia": "Pizzaria do Bairro",
"razaoSocial": "Pizzaria do Bairro Ltda",
"horariosFuncionamento": [
{
"diaSemana": "MONDAY",
"horarioAbertura": "18:00:00",
"horarioFechamento": "23:00:00"
}
],
"formasPagamento": ["PIX", "CARTAO_CREDITO", "DINHEIRO"],
"enderecos": [
{
"cep": "13330-000",
"logradouro": "Rua das Flores",
"numero": "123",
"bairro": "Centro",
"cidade": "Indaiatuba",
"estado": "SP"
}
]
}EM_PREPARO ──► SAIU_PARA_ENTREGA ──► ENTREGUE
│
└──────► CANCELADO
Transições validadas via endpoints dedicados (/pedidos/{id}/entregar, /pedidos/{id}/finalizar, /pedidos/{id}/cancelar), com regras de negócio que impedem mudança de status fora da sequência esperada.
mvn spring-boot:runAplicação disponível em http://localhost:8080
Console do H2 (para consultar dados persistidos):
http://localhost:8080/h2-console
Documentação Swagger:
http://localhost:8080/swagger-ui/
- Validação completa dos endpoints (Pedido, Usuário, Entregador)
- Migração para Java 17 + Spring Boot 3
- Tratamento global de exceções (
@ControllerAdvice) — erros de validação devem retornar 400, não 500 - Testes automatizados (JUnit + Mockito)
- Migração de H2 para PostgreSQL
- Containerização com Docker e Docker Compose
- Observabilidade com Spring Actuator
- Pipeline de CI/CD com GitHub Actions
- Deploy em ambiente cloud (AWS)
Helena Oliveira Silva
DevOps | SRE | Automação | Back-end