Class TurnoService
Proporciona la lógica de negocio necesaria para la creación, consulta, actualización y eliminación de los diferentes tipos de turnos que una empresa puede configurar. El catálogo de turnos permite a la empresa definir sus propios horarios operativos (mañana, tarde, noche, etc.) para su posterior asignación a los empleados.
Todos los métodos operan bajo el contexto de la empresa autenticada extraída del
SecurityContextHolder para garantizar un aislamiento total de los datos entre diferentes empresas (Seguridad Multi-tenant).
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionactualizarTurno(Long idTurno, PeticionTurnoDTO peticion) Modifica los datos de un turno ya existente en la base de datos.crearTurno(PeticionTurnoDTO peticion) Crea un nuevo tipo de turno dentro del catálogo de la empresa actualmente autenticada.voideliminarTurno(Long idTurno) Realiza el borrado físico de un turno del catálogo del sistema.private RespuestaTurnoDTOmapearARespuesta(Turno turno) Convierte la entidad de base de datosTurnoen un objeto de respuesta DTO.private EmpresaRecupera la entidad Empresa asociada al usuario que ha iniciado sesión actualmente.Recupera la lista completa de turnos que han sido definidos por la empresa que realiza la solicitud.private voidvalidarHoras(PeticionTurnoDTO peticion) Realiza la validación de las reglas de negocio horarias para un turno.
-
Field Details
-
turnoRepository
-
empresaRepository
-
-
Constructor Details
-
TurnoService
public TurnoService()
-
-
Method Details
-
crearTurno
Crea un nuevo tipo de turno dentro del catálogo de la empresa actualmente autenticada.Antes de proceder con el guardado, se validan las reglas de negocio referentes a la coherencia horaria mediante el método
validarHoras(PeticionTurnoDTO). El turno se vincula automáticamente a la entidadEmpresadel usuario que ha iniciado sesión.- Parameters:
peticion- Objeto de transferencia de datos con la descripción y el rango horario (inicio y fin) del turno.- Returns:
RespuestaTurnoDTOcon la información del turno recién creado, incluyendo su identificador único generado por la base de datos.- Throws:
RuntimeException- Si la hora de inicio no es estrictamente anterior a la hora de fin.
-
obtenerTurnosDeEmpresa
Recupera la lista completa de turnos que han sido definidos por la empresa que realiza la solicitud.La búsqueda se filtra automáticamente utilizando el identificador único de la empresa obtenido del contexto de seguridad global. Se garantiza que una empresa no pueda ver los turnos configurados por otra.
- Returns:
- List de
RespuestaTurnoDTOque contiene todos los turnos disponibles y configurados para la empresa solicitante.
-
actualizarTurno
Modifica los datos de un turno ya existente en la base de datos.El sistema realiza una comprobación de propiedad: verifica que el turno pertenezca efectivamente a la empresa que está realizando la petición. Si el turno existe pero pertenece a otra empresa, se deniega el acceso por motivos de seguridad.
- Parameters:
idTurno- Identificador único del turno que se desea actualizar.peticion- Nuevos datos (descripción, hora de inicio y hora de fin) para el turno.- Returns:
RespuestaTurnoDTOcon la información actualizada y persistida del turno.- Throws:
jakarta.persistence.EntityNotFoundException- Si el turno no se encuentra en la base de datos.RuntimeException- Si no pertenece a la empresa autenticada.
-
eliminarTurno
Realiza el borrado físico de un turno del catálogo del sistema.Al igual que en el proceso de actualización, se valida estrictamente que el turno sea propiedad de la empresa autenticada. Es importante tener en cuenta que el borrado puede fallar si existen asignaciones de turnos vinculadas a este registro (Integridad Referencial).
- Parameters:
idTurno- Identificador único del turno que se pretende eliminar de forma definitiva.- Throws:
jakarta.persistence.EntityNotFoundException- Si el turno no se encuentra en la base de datos.RuntimeException- El acceso es denegado por falta de permisos de propiedad.
-
obtenerEmpresaAutenticada
Recupera la entidad Empresa asociada al usuario que ha iniciado sesión actualmente. Utiliza el email extraído del SecurityContextHolder para realizar la búsqueda en el repositorio.- Returns:
EmpresaEntidad que representa a la empresa autenticada.- Throws:
jakarta.persistence.EntityNotFoundException- Si no se encuentra ninguna empresa con el correo electrónico del contexto de seguridad.
-
validarHoras
Realiza la validación de las reglas de negocio horarias para un turno. Comprueba fundamentalmente que la hora de inicio sea anterior a la hora de finalización.- Parameters:
peticion- DTO que contiene las horas a validar.- Throws:
RuntimeException- Si la hora de inicio no es estrictamente anterior a la hora de fin.
-
mapearARespuesta
Convierte la entidad de base de datosTurnoen un objeto de respuesta DTO. Se utiliza para desacoplar la capa de persistencia de la capa de presentación.- Parameters:
turno- Entidad Turno a ser mapeada.- Returns:
RespuestaTurnoDTOcon los datos formateados para ser devueltos por la API.
-