Esse é um projeto desenvolvido como base para a avaliação de habilidades técnicas para o papel de Desenvolvedor Backend Java da empresa Olisaúde. Para mais detalhes a respeito do desafio é recomendada a leitura do seu arquivo README.
Criar uma API simples para gerenciar Clientes.
- Criar um cliente
- Editar um cliente
- Obter um cliente específico
- Listar clientes
- nome
- data de nascimento
- sexo
- [ problemas de saude ]
- data de criação
- data de atualização
- nome
- grau do problema (de 1 a 2)
ex: diabetes, grau 2
sd = soma do grau dos problemas
score = (1 / (1 + eˆ-(-2.8 + sd ))) * 100
- Frontend (só implementaremos a API Restful)
- Autenticação
- SOLID, Clean code
- Consultas com Spring Data JPA
- Injeção de Dependências
- Tratamento de respostas de erro
- Geração automática do Swagger com a OpenAPI 3
- Testes automatizados
- Uso de DTOs para a API
As seguintes tecnologias foram utilizadas no desenvolvimento da API Rest do projeto:
- Java 17
- Spring Boot 3
- Maven
- PostgreSQL
- Hibernate
- Flyway
- Lombok
- Insomnia
- Docker
- SpringDoc OpenAPI 3
- Swagger UI
- Java 17 ou superior
- Maven 3.x
- Clonar o repositório
git clone <url-do-repositorio>
cd teste-dev-backend- Construir o projeto
./mvnw clean package- Executar a aplicação
./mvnw spring-boot:runOu usando o JAR gerado:
java -jar target/olisaude-api-0.0.1-SNAPSHOT.jar- Acessar a aplicação
- API Base URL: http://localhost:8080
- Swagger UI (Documentação Interativa): http://localhost:8080/swagger-ui/index.html
- H2 Console (banco de dados em memória): http://localhost:8080/h2-console
./mvnw testCobertura de testes:
- 20 testes unitários
- Testes de serviço (ClienteService)
- Testes de cálculo de risco (calcularSd e calcularScore)
A API está completamente documentada usando OpenAPI 3.0 e pode ser acessada através do Swagger UI.
Após iniciar a aplicação, acesse: http://localhost:8080/swagger-ui/index.html
O Swagger UI permite:
- 📖 Visualizar todos os endpoints disponíveis
- 🧪 Testar os endpoints diretamente pelo navegador
- 📋 Ver exemplos de request e response
- 📝 Consultar a estrutura dos DTOs
- ⚡ Entender os códigos de status HTTP retornados
A API oferece os seguintes endpoints para gerenciamento de clientes:
POST /clientes
Content-Type: application/json
{
"nome": "João da Silva",
"cpf": "12345678900",
"dataNascimento": "22-02-1993",
"genero": "MASCULINO",
"problemaSaude": [
{
"nome": "Diabetes",
"grau": "GRAU_2"
},
{
"nome": "Hipertensão",
"grau": "GRAU_1"
}
]
}GET /clientesGET /clientes/{id}GET /clientes/buscar/{cpf}PUT /clientes/{id}
Content-Type: application/json
{
"nome": "João da Silva Atualizado",
"cpf": "12345678900",
"dataNascimento": "22-02-1993",
"genero": "MASCULINO",
"problemaSaude": [
{
"nome": "Diabetes",
"grau": "GRAU_2"
}
]
}DELETE /clientes/{id}GET /clientes/maior_riscoEste endpoint retorna os 10 clientes com maior score de risco de saúde, ordenados do maior para o menor.
A API implementa um sistema de cálculo de risco baseado nos problemas de saúde dos clientes.
SD (Score de Doença) = Soma dos graus dos problemas de saúde
- GRAU_1 = 1 ponto
- GRAU_2 = 2 pontos
Score de Risco = (1 / (1 + e^(-2.8 + SD))) × 100
| Problemas de Saúde | SD | Score (%) |
|---|---|---|
| Nenhum | 0 | ~5.73% |
| 1x GRAU_1 | 1 | ~14.18% |
| 1x GRAU_2 | 2 | ~31.00% |
| 1x GRAU_2 + 1x GRAU_1 | 3 | ~54.98% |
| 3x GRAU_2 | 6 | ~96.08% |
O score varia de 0 a 100, onde valores mais altos indicam maior risco de saúde.
curl -X POST http://localhost:8080/clientes \
-H "Content-Type: application/json" \
-d '{
"nome": "Maria Santos",
"cpf": "98765432100",
"dataNascimento": "15-05-1985",
"genero": "FEMININO",
"problemaSaude": [
{
"nome": "Diabetes",
"grau": "GRAU_2"
}
]
}'curl http://localhost:8080/clientes/maior_riscocurl http://localhost:8080/clientes/1src/
├── main/
│ ├── java/com/olisaude/challenge/olisaudeapi/
│ │ ├── config/ # Configurações (OpenAPI, etc)
│ │ ├── controller/ # Controllers REST
│ │ ├── dto/ # Data Transfer Objects
│ │ ├── model/ # Entidades JPA
│ │ ├── repository/ # Repositories Spring Data
│ │ ├── service/ # Camada de serviço
│ │ └── OlisaudeApiApplication.java
│ └── resources/
│ ├── application.properties
│ └── db/migration/ # Scripts Flyway
└── test/
└── java/ # Testes unitários
A API implementa tratamento de erros personalizado com respostas HTTP apropriadas:
| Código HTTP | Situação |
|---|---|
| 200 OK | Operação realizada com sucesso |
| 201 Created | Cliente criado com sucesso |
| 204 No Content | Cliente desativado com sucesso |
| 400 Bad Request | Dados inválidos na requisição |
| 404 Not Found | Cliente não encontrado |
| 409 Conflict | CPF já cadastrado no sistema |
| 500 Internal Server Error | Erro interno do servidor |
Cliente não encontrado (404):
{
"message": "Cliente não encontrado: 999"
}CPF já cadastrado (409):
{
"message": "Já existe um cliente cadastrado com este CPF."
}- H2 Database (em memória)
- Console H2: http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:mem:testdb - Username:
sa - Password: (deixe em branco)
O projeto utiliza Flyway para versionamento do banco de dados. As migrations estão em:
src/main/resources/db/migration/
Scripts aplicados:
- V1: Criação da tabela
clientes - V2: Criação da tabela
problema_saude - V3: Criação da tabela de relacionamento
cliente_problema_saude - V4: Alterações na tabela
clientes(campos SD e Score)
- Implementar paginação nos endpoints de listagem
- Adicionar filtros avançados de busca
- Implementar autenticação e autorização (JWT)
- Adicionar logs estruturados
- Implementar cache para consultas frequentes
- Adicionar métricas e monitoramento (Actuator)
- Configurar perfil de produção com PostgreSQL
- Aumentar cobertura de testes (testes de integração)
Tiago Ribeiro
- LinkedIn: @tgribeiro
- Email: tgribeiro@gmail.com
⭐ Desenvolvido como parte do desafio técnico para Olisaúde