Uma API REST construída com Spring Boot focada no gerenciamento de usuários, produtos e pedidos, seguindo boas práticas de arquitetura em camadas, tratamento elegante de erros e exploração completa de relacionamentos JPA.
Flow Orders é uma API que simula um sistema de pedidos, permitindo consultar usuários, produtos, categorias e pedidos. Além de executar operações CRUD completas nas principais entidades.
O projeto foi desenvolvido para praticar conceitos fundamentais Spring Boot, Spring Data JPA e Spring Web, incluindo:
-
Arquitetura em camadas (resource → service → repository)
-
Relacionamentos avançados JPA
-
Perfis de execução (dev e test)
-
Tratamento de exceções customizado
-
Popular dados automaticamente no H2 para testes
-
Estrutura limpa e de fácil manutenção
-
Java 17+
-
Spring Boot (Web, Data JPA)
-
PostgreSQL (profile: dev)
-
H2 (em memória no profile: test)
-
Maven (gerenciador de dependências)
-
Postman (Teste de endpoints)
-
🎛️ resource/ #controladores REST
-
🧠 service/ #lógica de negócio e validações
-
🗃️ repository/ #interfaces JPA e operações de banco
-
🙎🏻 entities/ #modelo de domínio (JPA)
-
❌ exception/ #handlers, erros padronizados e exceções customizadas
-
⚙️ config/ #configurações e seed para H2 (profile test)
💡Essa separação garante clareza, testabilidade e facilidade de evolução.
-
Usando PostgreSQL
-
Ideal para rodar localmente com banco real
-
Ajustável via application-dev.properties
Use spring.profiles.active=dev. -> para ativar o perfil de desenvolvimento
-
Usando H2 em memória
-
Banco populado automaticamente ao iniciar
-
Ótimo para testes rápidos e desenvolvimento inicial
-
Use spring.profiles.active=test. -> para ativar o perfil de testes
-
Produto (CREATE / READ / UPDATE / DELETE)
-
Usuário (CREATE / READ / UPDATE / DELETE)
-
Order (Pedido)
-
Category (Categoria)
-
OrderItem / Payment — dependendo do escopo: consultas por id / listagem
-
ResourceNotFoundException — exceção personalizada para recursos não encontrados.
-
HandlerException — classe que captura exceções e retorna StandardError no body, evitando erro 500 genérico quando um usuário/entidade não for encontrada.
-
StandardError — formato uniforme para respostas de erro (timestamp, status, mensagem, path).
-
@OneToOne (ex.: Order ↔ Payment)
-
@OneToMany / @ManyToOne (ex.: User → Orders)
-
@ManyToMany com entidade associativa (OrderItem) e classe para representar PK composta
-
StandardError → resposta formatada
-
ResourceNotFoundException → erro específico para entidade inexistente
-
HandlerException → intercepta exceções e retorna status correto
GET /users
GET /users/{id}
POST /users
PUT /users/{id}
DELETE /users/{id}
📦 Produtos
GET /products
GET /products/{id}
POST /products
PUT /products/{id}
DELETE /products/{id}
📑 Pedidos
GET /orders
GET /orders/{id}
git clone https://github.com/SasaGomess/spring-boot-first-RESTAPI.git
cd spring-boot-first-RESTAPI
spring.datasource.url=jdbc:postgresql://localhost:5432/nome_SEU_db
spring.datasource.username=SEU_usuario
spring.datasource.password=SUA_senha
spring.jpa.hibernate.ddl-auto=update
http://localhost:8080/h2-console
Quando um recurso não é encontrado, a API retorna um corpo padronizado StandardError com:
-
timestamp
-
status (HTTP)
-
mensagem (ex.: "Resource not found")
-
path (endpoint requisitado)
Isso evita respostas 500 genéricas e possibilita frontends clientes a lidarem corretamente com erros 404/400.
-
Autenticação & autorização (JWT)
-
DTOs e validações com Bean Validation
-
Documentação com Swagger
-
Docker Compose com Postgres
Sinta-se à vontade para abrir issues, propor melhorias ou enviar PRs!
Feito por Sabrina Gomes & Dev Superior