Feature - Cancelamento de Agendamento
Introducao ao documento
Detalha o cancelamento de agendamento com validacao por CPF do colaborador e notificacoes.
Versionamento
- Versao do documento: 1.0.0
- Ultima atualizacao: 2026-03-17
- Responsavel: GitHub Copilot
Referencial teorico
- HTTP DELETE
- Integridade de ownership de recurso
Visao geral
A feature remove (soft delete) um appointment quando o colaborador do request corresponde ao colaborador do agendamento.
Atores
- Sistema consumidor da API.
- Colaborador dono do agendamento.
- Evidencia: routes/api.php:29
- Evidencia: app/Http/Controllers/AppointmentController.php:383
- Evidencia: app/Http/Controllers/AppointmentController.php:396
Pre-condicoes
- API key valida.
- Agendamento e colaborador devem existir.
- Evidencia: app/Http/Middleware/ApiKeyMiddleware.php:39
- Evidencia: app/Http/Controllers/AppointmentController.php:384
Fluxo principal
- Recebe
DELETE /api/appointments/{id}/cpf/{cpf}. - Resolve employee por cpf e appointment por id.
- Valida ownership (appointment.employee_id == employee.id).
- Remove appointment e invalida cache de slots.
- Dispara e-mail de cancelamento para tipos > 1.
- Evidencia: routes/api.php:29
- Evidencia: app/Http/Controllers/AppointmentController.php:396
- Evidencia: app/Http/Controllers/AppointmentController.php:397
- Evidencia: app/Http/Controllers/AppointmentController.php:401
- Evidencia: app/Http/Controllers/AppointmentController.php:403
Fluxos alternativos
- 500 quando ownership falha (tentativa de excluir agenda de outro colaborador).
- 404 para id/cpf nao encontrados.
- Evidencia: app/Http/Controllers/AppointmentController.php:416
- Evidencia: app/Http/Controllers/AppointmentController.php:427
Regras de negocio
- Tipo 1 nao envia e-mail de cancelamento.
- Mensagem de cancelamento difere para tipo individual e coletivo.
- Evidencia: app/Http/Controllers/MailController.php:130
- Evidencia: app/Http/Controllers/MailController.php:140
- Evidencia: app/Http/Controllers/MailController.php:158
Estados possiveis
- Cancelado com sucesso (200)
- Nao encontrado (404)
- Erro de regra/execucao (500)
Endpoints envolvidos
DELETE /api/appointments/{id}/cpf/{cpf}(ver ../api/openapi.yaml)
Dados impactados
- appointments (soft delete)
- cache (forget)
- fila de e-mails
- Referencia: ../data/model.md
Pendencias
- O endpoint retorna 500 para falha de ownership; tecnicamente um 403 pode ser mais adequado.
- Evidencia: app/Http/Controllers/AppointmentController.php:416