Implementar los endpoints necesarios para que el sistema de gestión de citas médicas funcione completamente, respetando:
- El ERD proporcionado
- El patrón de arquitectura entregado
- Buenas prácticas REST
- Separación por capas (Controller → Service → Repository)
El sistema está compuesto por las siguientes entidades:
PATIENTDOCTORSPECIALTYAPPOINTMENTPAYMENTPRESCRIPTION
Relaciones principales:
- Un
PATIENTpuede tener muchasAPPOINTMENT - Un
DOCTORpuede tener muchasAPPOINTMENT - Un
SPECIALTYpuede tener muchosDOCTOR - Una
APPOINTMENTtiene:- 1
PAYMENT - Muchas
PRESCRIPTION
- 1
Deben seguir el patrón ya entregado:
/controllers
/services
/repositories
/routes
- Recibir request
- Validar entrada básica
- Llamar al service
- Retornar respuesta HTTP
- Contener lógica de negocio
- Orquestar repositorios
- No interactuar directamente con req/res
- Acceso a base de datos
- Queries SQL
- Nada de lógica de negocio
POST /specialties
GET /specialties
POST /doctors
Debe validar:
- Que
specialty_idexista.
GET /doctors
GET /doctors?specialty_id=uuid
POST /patients
GET /patients
GET /patients/:id
POST /appointments
Debe validar:
- Que el paciente exista.
- Que el doctor exista.
- Que el doctor pertenezca a la especialidad correcta.
- Que la fecha sea válida.
GET /appointments
GET /patients/:id/appointments
GET /doctors/:id/appointments
POST /appointments/:id/prescriptions
Debe validar:
- Que la cita exista.
GET /appointments/:id/prescriptions
POST /appointments/:id/payment
Debe validar:
- Que la cita exista.
- Que no exista ya un pago (relación 1:1).
GET /appointments/:id/payment
- No se puede crear un doctor sin especialidad válida.
- No se puede crear una cita con paciente o doctor inexistente.
- No se puede registrar más de un pago por cita.
- Las fechas deben ser coherentes (no permitir fechas inválidas).
- Las relaciones deben respetar el ERD.
- Manejo correcto de errores (400, 404, 500).
- Respuestas en formato JSON consistente.
- No exponer errores internos de base de datos.
- Manejo de UUID correctamente.
Ejemplo estructural:
appointments.controller.ts
appointments.service.ts
appointments.repository.ts
appointments.routes.ts
El controller no debe :
- Contener queries SQL.
- Contener lógica compleja.
El repository no debe :
- Validar reglas de negocio.
- Tomar decisiones.
Al finalizar la actividad, el sistema debe permitir:
- Registrar pacientes
- Registrar doctores
- Asignar especialidades
- Crear citas
- Registrar prescripciones
- Registrar pagos
- Consultar relaciones completas
El sistema debe funcionar completamente según el ERD.
Se evaluará:
- Correcta implementación de endpoints
- Respeto del patrón de arquitectura
- Calidad del código
- Validaciones correctas
- Manejo adecuado de errores
- Claridad en la organización del proyecto
- No modificar el modelo de datos.
- No mezclar responsabilidades entre capas.
- No usar lógica en rutas.
- No usar consultas directas desde el controller.
- Proyecto funcional
- Código organizado por módulos
- Base de datos funcionando
- README actualizado si agregan algo adicional