Aplicação RESTful em Spring Boot para gerenciar clientes, produtos e pedidos com persistência em PostgreSQL. Inclui validação de dados, regras de estoque e endpoints prontos para testes manuais ou automatizados.
Instale os seguintes softwares:
- Java JDK 17
- Apache Maven
- PostgreSQL
- Cliente HTTP (ex.: Postman)
- Inicie o serviço do PostgreSQL.
- Crie o banco padrão esperado pelo projeto (ajuste se desejar):
CREATE DATABASE projeto_vendas;
- As tabelas (
clientes,produtos,pedidos,itens_pedido) são criadas automaticamente na primeira execução graças ao Spring Data JPA.
O arquivo src/main/resources/application.properties já está versionado. Atualize sempre conforme o ambiente que será utilizado:
spring.datasource.url=jdbc:postgresql://localhost:5433/projeto_vendas
spring.datasource.username=postgres
spring.datasource.password=12345
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialectObservação: ajuste porta, usuário e senha para combinar com a sua instalação. Os endpoints usam Bean Validation (
spring-boot-starter-validation); payloads inválidos retornam400 Bad Requestcom mensagens indicando cada campo.
Na raiz do projeto:
mvn spring-boot:runOu, na IDE, execute a classe SistemaVendasApiApplication.
Base URL padrão: http://localhost:8080
POST /clientes{ "nome": "João Silva", "email": "joao@exemplo.com", "telefone": "11999999999" }- Validações: nome, email e telefone obrigatórios; email precisa ser válido.
- Exemplo de retorno inválido:
{ "nome": "O nome é obrigatório.", "email": "O e-mail informado é inválido." }
GET /clientes– lista todosGET /clientes/{id}– retorna 200 ou 404PUT /clientes/{id}– atualiza (reaplica validações)DELETE /clientes/{id}– remove cliente (204)
POST /produtos{ "nome": "Notebook Gamer", "descricao": "Core i7, 16GB RAM", "preco": 4500.00, "quantidadeEstoque": 12 }- Validações: nome obrigatório, preço > 0, estoque ≥ 0.
- Retorno para payload inválido:
{ "nome": "O nome do produto é obrigatório.", "preco": "O preço deve ser maior que zero.", "quantidadeEstoque": "A quantidade em estoque não pode ser negativa." }
GET /produtos– lista todosGET /produtos/{id}– 200 ou 404PUT /produtos/{id}– atualiza com validaçõesDELETE /produtos/{id}– remove produto (204)
POST /pedidos{ "clienteId": 1, "itens": [ { "produtoId": 1, "quantidade": 2 } ] }- Regras de negócio: cliente e produtos precisam existir; estoque é verificado e decrementado.
GET /pedidos– lista todos os pedidos.
- Crie uma collection contendo as requisições acima e defina o header
Content-Type: application/json. - Monte casos positivos e negativos:
- Cliente com dados vazios →
400. - Produto com preço negativo →
400. - Pedido com estoque insuficiente →
400.
- Cliente com dados vazios →
- Use a aba Tests para automatizar checks simples:
pm.test("Status 201", function () { pm.response.to.have.status(201); });
O projeto possui configuração de testes com H2 em src/test/resources/application.properties. Para executar:
mvn testspring-boot-starter-webspring-boot-starter-data-jpaspring-boot-starter-validationorg.postgresql:postgresqlcom.h2database:h2(escopo de testes)
- Adicionar paginação e filtros nas listagens.
- Criar testes de integração cobrindo fluxos de pedidos.
- Centralizar tratamento de erros com um handler global reutilizável.