Alunos:
Nicolas Haubricht Hainfellner
Lucas Henzo Ide Yuki
A saúde mental e o bem-estar são prioridades globais, e a tecnologia surge como uma aliada poderosa para o monitoramento e apoio. Este projeto consiste no desenvolvimento de uma API RESTful em Java com Spring Boot para uma plataforma de monitoramento de saúde mental, conforme os requisitos da Global Solution - O Futuro do Trabalho.
A solução visa permitir que pacientes registrem diariamente seu estado emocional (humor, ansiedade, sono) e que a plataforma gerencie a conexão com profissionais de saúde e recursos de apoio.
O projeto se conecta diretamente com o tema "O Futuro do Trabalho" ao fornecer ferramentas de monitoramento de bem-estar, essenciais para prevenir o burnout e o estresse no ambiente profissional. Além disso, está alinhado com a ODS 3 (Saúde e Bem-Estar) e indiretamente com a ODS 8 (Trabalho Decente e Crescimento Econômico), promovendo ambientes de trabalho mais saudáveis e produtivos.
| Tecnologia | Versão | Descrição |
|---|---|---|
| Java | 21 (LTS) | Linguagem de programação principal. |
| Spring Boot | 3.2.5 | Framework para desenvolvimento rápido de APIs REST. |
| Spring Data JPA | 3.2.5 | Abstração para persistência de dados. |
| H2 Database | 2.2.224 | Banco de dados relacional em memória, ideal para desenvolvimento e testes. |
| Lombok | 1.18.30 | Redução de código boilerplate (getters, setters, construtores). |
| Bean Validation | Jakarta Validation | Validação de dados em DTOs e Entidades. |
A API segue o padrão de Arquitetura em Camadas (Controller → Service → Repository) e utiliza DTOs (Data Transfer Objects) para desacoplar a camada de apresentação da camada de persistência.
O domínio é composto pelas seguintes entidades:
Paciente(CRUD Completo)RegistroDiario(CRUD Completo, relacionado aPaciente)ProfissionalSaudeConsulta(relacionada aPacienteeProfissionalSaude)RecursoApoio
- Java Development Kit (JDK) 21 ou superior.
- Apache Maven 3.6 ou superior.
-
Clone o repositório:
git clone https://github.com/L-A-N-E/GS_2_Nicolas_-_Lucas_Java cd mental-health-api -
Configuração do Banco de Dados (H2): O projeto está configurado para usar o H2 Database em modo em memória. A configuração está no arquivo
src/main/resources/application.properties:spring.datasource.url=jdbc:h2:mem:saudementaldb spring.jpa.hibernate.ddl-auto=create-drop
O parâmetro
create-dropgarante que o esquema do banco seja criado automaticamente ao iniciar a aplicação e destruído ao parar. O componenteDataSeeder(item 5) é responsável por carregar os dados iniciais (seeds). -
Executar a Aplicação: Utilize o Maven para compilar e executar o projeto:
mvn clean install mvn spring-boot:run
A API estará acessível em:
http://localhost:8080.
Os endpoints implementados com CRUD completo são para as entidades Paciente e RegistroDiario.
| Método | URL | Descrição | Status HTTP |
|---|---|---|---|
POST |
/pacientes |
Cria um novo paciente. | 201 Created |
GET |
/pacientes |
Lista todos os pacientes. | 200 OK |
GET |
/pacientes/{id} |
Busca um paciente pelo ID. | 200 OK / 404 Not Found |
PUT |
/pacientes/{id} |
Atualiza um paciente existente. | 200 OK / 404 Not Found |
DELETE |
/pacientes/{id} |
Remove um paciente. | 204 No Content / 404 Not Found |
Exemplo de Requisição POST /pacientes
- URL:
http://localhost:8080/pacientes - Body (JSON):
{ "nome": "João da Silva", "email": "joao.silva@exemplo.com", "dataNascimento": "1990-01-01", "telefone": "11999998888" }
| Método | URL | Descrição | Status HTTP |
|---|---|---|---|
POST |
/registros-diarios |
Cria um novo registro diário. | 201 Created |
GET |
/registros-diarios |
Lista todos os registros diários. | 200 OK |
GET |
/registros-diarios/{id} |
Busca um registro pelo ID. | 200 OK / 404 Not Found |
PUT |
/registros-diarios/{id} |
Atualiza um registro existente. | 200 OK / 404 Not Found |
DELETE |
/registros-diarios/{id} |
Remove um registro. | 204 No Content / 404 Not Found |
Exemplo de Requisição POST /registros-diarios
- URL:
http://localhost:8080/registros-diarios - Body (JSON):
Observação: O
{ "pacienteId": 1, "dataRegistro": "2025-11-14", "nivelHumor": 4, "nivelAnsiedade": 2, "horasSono": 7, "notas": "Dia produtivo e com pouca ansiedade." }pacienteIddeve ser um ID de paciente existente (ex: 1, que é criado pelo DataSeeder).
As validações são aplicadas nos DTOs de requisição. Em caso de falha de validação, a API retorna HTTP 400 (Bad Request) com uma lista detalhada dos erros.
Exemplos de Validações:
PacienteRequestDTO:@NotBlank(nome, email, telefone),@Email(email),@Past(dataNascimento).RegistroDiarioRequestDTO:@NotNull(campos),@Min(1)e@Max(5)(níveis de humor/ansiedade),@PastOrPresent(dataRegistro).
O tratamento de exceções é centralizado no GlobalExceptionHandler (@RestControllerAdvice).
- 404 Not Found: Retornado para exceções customizadas como
PacienteNaoEncontradoExceptioneRegistroDiarioNaoEncontradoException. - 400 Bad Request: Retornado para erros de validação (
MethodArgumentNotValidException). - 500 Internal Server Error: Retornado para exceções não tratadas.
A classe DataSeeder é executada no início da aplicação para popular o banco H2 com dados de exemplo, garantindo que os endpoints de listagem e busca funcionem imediatamente.
Dados Iniciais Carregados:
- 2
ProfissionalSaude - 2
Paciente - 3
RegistroDiario - 2
Consulta - 2
RecursoApoio
Você pode usar ferramentas como Postman, Insomnia ou o comando curl para interagir com a API.
curl -X POST http://localhost:8080/pacientes \
-H "Content-Type: application/json" \
-d '{
"nome": "Novo Paciente Teste",
"email": "teste@api.com",
"dataNascimento": "1998-05-20",
"telefone": "99999999999"
}'