Projeto desenvolvido como desafio backend, com foco em boas práticas de programação Java, regras de negócio e geração de relatórios.
A aplicação simula o controle de vendas de uma granja de patos.
- Java 17
- Spring Boot
- Spring Data JPA
- PostgreSQL
- Flyway (migrações de banco)
- Apache POI (relatórios em Excel)
- Lombok
- JUnit e Mockito (testes)
- Docker e Docker Compose
controller– Rotas da APIservice– Regras de negóciorepository– Acesso ao bancodto– Entrada e saída de dadosmodel– Entidades do banco de dadosexception– Tratamento de erros
Antes de começar, certifique-se de ter as seguintes ferramentas instaladas:
- Java 17+
- Maven 3.8+
- Docker
- Docker Compose
- Git
- Postman (opcional, para testes de API)
- IDE de sua preferência (IntelliJ, Eclipse, etc.)
- (Linux/macOS/WSL recomendado para usar o script up-docker-springboot.sh)
bash
git clone https://github.com/rodrigobsjava/granja-de-patos-api.git
cd granja-de-patos-api
Para facilitar a execução local da aplicação, foi criado o script up-docker-springboot.sh. Ele realiza automaticamente os seguintes passos:
- Detecta o sistema operacional (Linux, macOS ou Windows)
- Sobe o container do PostgreSQL via Docker com o Docker Compose
- Verifica a versão do PostgreSQL para garantir que está rodando corretamente
- Inicia a aplicação Spring Boot com o Maven Wrapper (mvnw ou mvnw.cmd)
No terminal (Linux/macOS/Windows via WSL ou Git Bash), execute:
bash
chmod +x up-docker-springboot.sh
./up-docker-springboot.sh
Esse comando irá:
-
Subir o banco de dados PostgreSQL (porta 5433)
-
Rodar a aplicação Spring Boot (porta 8082)
Caso não queira usar o script, você pode seguir os passos abaixo manualmente:
bash
docker-compose up --build
-
API rodando em: http://localhost:8082
-
Banco de Dados acessível via:
- Host: localhost
- Porta: 5433
- Usuário: postgres
- Senha: 12345678
As tabelas e dados serão criados automaticamente via Flyway.
- Cadastro de patos
- Marcar pato como vendido automaticamente após venda
- Cadastro e listagem
- Validação de CPF único
- Impede exclusão se houver vendas
- Cadastro e listagem
- Verifica se o cliente tem desconto (20%) após 3 compras
- Cadastro de venda (com múltiplos patos)
- Cálculo automático do valor total com desconto (se aplicável)
- Exporta para
.xlsxcom:- Cliente
- Vendedor
- Valor total
- Data
- Quantidade de patos
Acesse via:
GET /relatorios/vendas/excel
- Lista os vendedores ordenados por total vendido e número de vendas
- Retorna os vendedores ordenados por total vendido e número de vendas, incluindo:
- Nome do vendedor
- Quantidade de vendas
- Total em reais vendido
Acesse via:
GET /relatorios/ranking-vendedores
Você pode importar o JSON com os endpoints no Postman ou usar os seguintes:
POST /vendedores- Cadastrar vendedorGET /vendedores- Listar vendedores
POST /clientes- Cadastrar clienteGET /clientes- Listar clientes
POST /patos- Cadastrar patoGET /patos- Listar patosGET /patos/disponiveis- Listar patos disponíveis para vendaDELETE /patos/{id}- Excluir pato (não pode se houver vendas)
POST /vendas- Registrar nova vendaGET /vendas- Listar vendasGET /vendas/{id}- Detalhes da venda por ID
GET /relatorios/vendas/excel- Exportar relatório de vendas em ExcelGET /relatorios/ranking-vendedores- Exibir ranking de vendedores
Este é um fluxo completo de criação de uma venda com desconto aplicado (caso o cliente tenha 3 ou mais compras).
POST http://localhost:8082/vendedores
json
{
"nome": "João da Silva",
"cpf": "123.456.789-00",
"matricula": "MAT1234"
}
POST http://localhost:8082/clientes
json
{
"nome": "Maria Oliveira",
"cpf": "987.654.321-00"
}
POST http://localhost:8082/patos
json
{
"nome": "Pato 1",
"descricao": "Pato saudável",
"preco": 100.0
}
json
{
"nome": "Pato 2",
"descricao": "Pato gordo",
"preco": 150.0
}
POST http://localhost:8082/vendas
json
{
"clienteId": "UUID_DO_CLIENTE",
"vendedorId": "UUID_DO_VENDEDOR",
"patoIds": [
"UUID_PATO_1",
"UUID_PATO_2"
]
}
Substitua os UUID_* pelos valores retornados nas respostas anteriores. O sistema irá:
- Calcular automaticamente o valor total da venda.
- Aplicar 20% de desconto caso o cliente já tenha feito 3 ou mais compras.
- Marcar os patos como vendidos.
GET http://localhost:8082/vendas
GET http://localhost:8082/relatorios/vendas/excel
-
Testes unitários e de integração para controllers e services
-
Validação das regras de negócio, como:
- CPF único para vendedores
- Impedir venda de pato já vendido
- Aplicação de desconto para clientes com 3 ou mais compras
-
Cobertura básica para garantir funcionamento esperado
Este projeto foi desenvolvido como parte do Desafio Preço Justo, proposto no processo seletivo para a vaga de Desenvolvedor Back End.
O desafio consistia em construir uma API baseada nos requisitos descritos no documento fornecido, incluindo:
- Cadastro e gerenciamento de vendedores, clientes, patos e vendas
- Regras de negócio específicas
- Relatórios em Excel
- Validações e testes automatizados
Desenvolvido por Rodrigo Barbosa De Sousa
-
GitHub - rodrigobsjava
Este projeto foi desenvolvido exclusivamente para fins de avaliação técnica no processo seletivo da empresa Preço Justo.
Seu uso é restrito ao propósito de análise técnica e não deve ser utilizado para fins comerciais ou de distribuição sem autorização.