91 Validar Eventos Duplicados de Reservas de Citas Medicas Sistema con LARAVEL(PHP-MySql) FullStack
Duración: 14 minDescripción
🛡️🚫 Lección 91: Validación de Eventos Duplicados de Citas Médicas
Esta lección finaliza la serie de validaciones en el controlador, enfocándose en la lógica crítica para prevenir que un paciente reserve una cita que ya ha sido tomada por otra persona (o por sí mismo) con el mismo doctor, en la misma fecha y a la misma hora.
1. 🕰️ Ajuste en el Almacenamiento de la Hora
Antes de la validación de duplicidad, se corrige el método de almacenamiento en el EventController (función store) para asegurar que el campo start guarde correctamente tanto la fecha como la hora:
- Concatenación en Start: Se ajusta la variable $request->fecha_reserva para que se concatene con la hora de reserva ($request->hora_reserva). Esto asegura que el campo start en la base de datos contenga un valor exacto (ej. YYYY-MM-DD HH:MM:00) que es crucial para la consulta de duplicidad [03:31].
2. 🚫 Validación de Duplicidad en el EventController
Se implementa una segunda consulta en el controlador, después de la validación del horario del doctor, para buscar coincidencias de reserva en la tabla events [05:22].
A. Condiciones para la Duplicidad
Una reserva se considera duplicada si se cumplen las siguientes tres condiciones simultáneamente:
- Mismo Doctor: El doctor_id debe ser el mismo que el seleccionado [06:06].
- Misma Fecha y Hora de Inicio: El campo start del evento debe coincidir exactamente con la fecha y hora que el usuario intenta reservar [06:42].
- Existencia: Se verifica si existe algún registro que satisfaga las condiciones anteriores [07:22].
B. Lógica de Consulta
Se utiliza el modelo Event para realizar la búsqueda:
PHP
$eventos_duplicados = Event::where('doctor_id', $doctor_id) ->where('start', $fecha_hora_reserva) ->exists();
- Manejo de Error: Si la variable $eventos_duplicados es verdadera (existe una coincidencia), se lanza una excepción de validación [12:12].
- Mensaje de Error: Se muestra el mensaje: "Ya existe una reserva con el mismo doctor en esa fecha y hora" [12:43].
3. 🏁 Conclusión
Con esta validación en el backend, el sistema ya es robusto contra reservas no válidas [13:49]:
- Fechas Pasadas y Rango Horario: Validado en el frontend (JavaScript).
- Disponibilidad del Doctor: Validado en el backend contra la tabla horarios (Lección 90).
- Duplicidad de Citas: Validado en el backend contra la tabla events (Lección 91).
El próximo capítulo se centrará en obtener y mostrar toda la información de las citas registradas en la base de datos dentro del componente FullCalendar [13:28].
Lecciones
Apoya este proyecto
Si te gusta nuestro contenido, ¡apóyanos con una donación!
Donar por Airtm Donar por Binance¡Gracias por tu apoyo! ❤️