Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Delivery Management API

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.

🛠️ Stack atual

  • 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

📦 Domínio da aplicação

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.

✅ Status atual — Checkpoint 1

  • 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 → ENTREGUE
    • EM_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

Exemplo real testado — Criação de Estabelecimento

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"
    }
  ]
}

Máquina de estados do Pedido

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.

▶️ Como executar localmente

mvn spring-boot:run

Aplicaçã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/

🚧 Próximas evoluções (roadmap)

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

👩🏽‍💻 Autora

Helena Oliveira Silva
DevOps | SRE | Automação | Back-end

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages