Este é um microserviço desenvolvido em Java Spring Boot para gerenciar o agendamento de consultas médicas.
- POST /consultas - Agendar uma nova consulta
- GET /consultas/{id} - Detalhes de uma consulta específica
- DELETE /consultas/{id} - Cancelar uma consulta
- GET /consultas - Listar todas as consultas futuras
- GET /consultas/dia?data=2025-06-15 - Listar consultas de um dia específico
- POST /pacientes - Cadastrar um novo paciente
- GET /pacientes/{cpf} - Buscar paciente por CPF
- GET /horarios/disponiveis?data=2025-06-15 - Ver horários disponíveis
- POST /horarios/bloquear - Bloquear um horário específico
- DELETE /horarios/bloquear - Desbloquear um horário
- O médico atende de segunda a sexta, das 8h às 17h, com intervalos de 30 minutos
- Não pode haver mais de uma consulta no mesmo horário
- Cada CPF só pode agendar uma consulta por dia
- Java 17
- Spring Boot 3.2.0
- Spring Data JPA
- PostgreSQL
- Docker & Docker Compose
- Swagger/OpenAPI
- Lombok
- Maven
- Docker e Docker Compose instalados
- Java 17+ (opcional, se quiser executar sem Docker)
- Clone o repositório
- Execute o comando:
docker-compose up --build- A aplicação estará disponível em:
- API: http://localhost:8080
- Swagger UI: http://localhost:8080/swagger-ui.html
- API Docs: http://localhost:8080/docs
- Certifique-se de ter PostgreSQL rodando na porta 5432
- Configure as credenciais no
application.properties - Execute:
./mvnw spring-boot:runcurl -X POST http://localhost:8080/pacientes \
-H "Content-Type: application/json" \
-d '{
"nome": "João Silva",
"cpf": "12345678901",
"telefone": "11999999999"
}'curl -X POST http://localhost:8080/consultas \
-H "Content-Type: application/json" \
-d '{
"cpfPaciente": "12345678901",
"data": "15/06/2025",
"hora": "14:30",
"observacoes": "Consulta de rotina"
}'curl "http://localhost:8080/horarios/disponiveis?data=2025-06-15"Para executar os testes:
./mvnw testAcesse a documentação interativa da API através do Swagger UI: http://localhost:8080/swagger-ui.html
O projeto inclui:
- Dockerfile para build da aplicação
- docker-compose.yml para orquestração com PostgreSQL
- Configuração de rede isolada
- Volume persistente para dados do PostgreSQL
src/
├── main/
│ ├── java/com/medico/agendamento/
│ │ ├── controller/ # Controllers REST
│ │ ├── service/ # Lógica de negócio
│ │ ├── repository/ # Repositórios JPA
│ │ ├── entity/ # Entidades JPA
│ │ ├── dto/ # DTOs de requisição/resposta
│ │ ├── config/ # Configurações
│ │ └── exception/ # Tratamento de exceções
│ └── resources/
│ └── application.properties
└── test/
├── java/ # Testes unitários
└── resources/
└── application-test.properties
As principais configurações estão no application.properties: