Feature - Consulta de Slots Disponiveis
Introducao ao documento
Documenta a consulta de disponibilidade de horarios para colaborador em um dia especifico.
Versionamento
- Versao do documento: 1.0.0
- Ultima atualizacao: 2026-03-17
- Responsavel: GitHub Copilot
Referencial teorico
- Time-slot scheduling
- Caching de leitura
Visao geral
A feature retorna slots disponiveis em duas modalidades: geral e mentoria em grupo.
Atores
- Sistema consumidor da API com API key.
- Evidencia: routes/api.php:30
- Evidencia: routes/api.php:31
Pre-condicoes
- employee_cpf valido para um colaborador existente.
- date em formato valido para parse no model.
- Evidencia: app/Http/Controllers/AppointmentController.php:538
- Evidencia: app/Models/Appointment.php:91
Fluxo principal
GET /api/appointments/slots/{date}/employee/{employee_cpf}/client/{client}.- Busca em cache pela chave composta.
- Se miss, calcula slots e armazena por 600 segundos.
- Retorna lista de objetos id/date/time.
- Evidencia: app/Http/Controllers/AppointmentController.php:581
- Evidencia: app/Http/Controllers/AppointmentController.php:583
- Evidencia: app/Http/Controllers/AppointmentController.php:601
- Evidencia: app/Models/Appointment.php:117
Fluxo alternativo (grupo)
GET /api/appointments/slots/group/{date}/employee/{employee_cpf}/client/{client}.- Permite concorrencia quando o tipo existente for group e retorna appointment_count.
- Evidencia: routes/api.php:31
- Evidencia: app/Models/Appointment.php:171
- Evidencia: app/Models/Appointment.php:191
Regras de negocio
- Grade e incrementada em passos de 60 minutos.
- Horarios ocupados por tipos nao-group bloqueiam slot.
- Evidencia: app/Models/Appointment.php:100
- Evidencia: app/Models/Appointment.php:150
- Evidencia: app/Models/Appointment.php:172
Estados possiveis
- Retorno de cache ou banco com status 200
- employee nao encontrado (404)
- erro interno (500)
- Evidencia: app/Http/Controllers/AppointmentController.php:585
- Evidencia: app/Http/Controllers/AppointmentController.php:595
- Evidencia: app/Http/Controllers/AppointmentController.php:624
Endpoints envolvidos
GET /api/appointments/slots/{date}/employee/{employee_cpf}/client/{client}GET /api/appointments/slots/group/{date}/employee/{employee_cpf}/client/{client}
Dados impactados
- appointments (consulta)
- cache (read/write)
- Referencia: ../data/model.md
Pendencias
- O parametro client existe na rota, mas nao participa da assinatura dos metodos.
- Evidencia: routes/api.php:30
- Evidencia: app/Http/Controllers/AppointmentController.php:577