Package com.gestorrh.api.repository
Interface AsignacionTurnoRepository
- All Superinterfaces:
org.springframework.data.repository.CrudRepository<AsignacionTurno,,Long> org.springframework.data.jpa.repository.JpaRepository<AsignacionTurno,,Long> org.springframework.data.repository.ListCrudRepository<AsignacionTurno,,Long> org.springframework.data.repository.ListPagingAndSortingRepository<AsignacionTurno,,Long> org.springframework.data.repository.PagingAndSortingRepository<AsignacionTurno,,Long> org.springframework.data.repository.query.QueryByExampleExecutor<AsignacionTurno>,org.springframework.data.repository.Repository<AsignacionTurno,Long>
@Repository
public interface AsignacionTurnoRepository
extends org.springframework.data.jpa.repository.JpaRepository<AsignacionTurno,Long>
Repositorio para gestionar las operaciones de base de datos de la entidad
AsignacionTurno.
Se encarga de la persistencia de las planificaciones de turnos para los empleados.-
Method Summary
Modifier and TypeMethodDescriptioncontarEmpleadosPlanificadosHoy(Long idEmpresa, LocalDate fechaHoy) Cuenta el número de empleados distintos que tienen un turno planificado para el día de hoy.findByEmpleadoEmpresaIdEmpresa(Long idEmpresa) Recupera todas las asignaciones de turno de una empresa.findByEmpleadoEmpresaIdEmpresaAndEmpleadoDepartamentoIgnoreCase(Long idEmpresa, String departamento) Busca las asignaciones de turno para una empresa y departamento específicos.findByEmpleadoIdEmpleado(Long idEmpleado) Recupera todas las asignaciones de turno de un empleado.findByEmpleadoIdEmpleadoAndFecha(Long idEmpleado, LocalDate fecha) Busca las asignaciones de turno de un empleado para una fecha concreta.findByEmpleadoIdEmpleadoAndFechaBetween(Long idEmpleado, LocalDate fechaInicio, LocalDate fechaFin) Busca las asignaciones de turno de un empleado en un rango de fechas determinado.Methods inherited from interface org.springframework.data.repository.CrudRepository
count, delete, deleteAll, deleteAll, deleteAllById, deleteById, existsById, findById, saveMethods inherited from interface org.springframework.data.jpa.repository.JpaRepository
deleteAllByIdInBatch, deleteAllInBatch, deleteAllInBatch, deleteInBatch, findAll, findAll, flush, getById, getOne, getReferenceById, saveAllAndFlush, saveAndFlushMethods inherited from interface org.springframework.data.repository.ListCrudRepository
findAll, findAllById, saveAllMethods inherited from interface org.springframework.data.repository.ListPagingAndSortingRepository
findAllMethods inherited from interface org.springframework.data.repository.PagingAndSortingRepository
findAllMethods inherited from interface org.springframework.data.repository.query.QueryByExampleExecutor
count, exists, findAll, findBy, findOne
-
Method Details
-
findByEmpleadoIdEmpleadoAndFecha
Busca las asignaciones de turno de un empleado para una fecha concreta.- Parameters:
idEmpleado- El ID del empleado.fecha- La fecha a consultar.- Returns:
- Lista de asignaciones de turno encontradas.
-
findByEmpleadoEmpresaIdEmpresaAndEmpleadoDepartamentoIgnoreCase
@Query("SELECT a FROM AsignacionTurno a JOIN FETCH a.empleado e JOIN FETCH a.turno t WHERE e.empresa.idEmpresa = :idEmpresa AND LOWER(e.departamento) = LOWER(:departamento)") List<AsignacionTurno> findByEmpleadoEmpresaIdEmpresaAndEmpleadoDepartamentoIgnoreCase(@Param("idEmpresa") Long idEmpresa, @Param("departamento") String departamento) Busca las asignaciones de turno para una empresa y departamento específicos.Utiliza un doble JOIN FETCH para traer al empleado y su turno asignado en una sola consulta SQL, eliminando el problema N+1 múltiple.
- Parameters:
idEmpresa- El ID de la empresa.departamento- El nombre del departamento (ignora mayúsculas/minúsculas).- Returns:
- Lista de asignaciones para ese departamento.
-
findByEmpleadoEmpresaIdEmpresa
Recupera todas las asignaciones de turno de una empresa.- Parameters:
idEmpresa- El ID de la empresa.- Returns:
- Lista de asignaciones de la empresa.
-
findByEmpleadoIdEmpleado
Recupera todas las asignaciones de turno de un empleado.- Parameters:
idEmpleado- El ID del empleado.- Returns:
- Lista de asignaciones del empleado.
-
findByEmpleadoIdEmpleadoAndFechaBetween
@Query("SELECT a FROM AsignacionTurno a JOIN FETCH a.turno t JOIN FETCH a.empleado e WHERE e.idEmpleado = :idEmpleado AND a.fecha BETWEEN :fechaInicio AND :fechaFin") List<AsignacionTurno> findByEmpleadoIdEmpleadoAndFechaBetween(@Param("idEmpleado") Long idEmpleado, @Param("fechaInicio") LocalDate fechaInicio, @Param("fechaFin") LocalDate fechaFin) Busca las asignaciones de turno de un empleado en un rango de fechas determinado.Utiliza JOIN FETCH para cargar el turno y el empleado asociados, evitando latencia y consultas N+1 al renderizar el calendario mensual.
- Parameters:
idEmpleado- El ID del empleado.fechaInicio- Fecha inicial del rango.fechaFin- Fecha final del rango.- Returns:
- Lista de asignaciones en el periodo indicado.
-
contarEmpleadosPlanificadosHoy
@Query("SELECT COUNT(DISTINCT a.empleado.idEmpleado) FROM AsignacionTurno a WHERE a.empleado.empresa.idEmpresa = :idEmpresa AND a.fecha = :fechaHoy") Long contarEmpleadosPlanificadosHoy(@Param("idEmpresa") Long idEmpresa, @Param("fechaHoy") LocalDate fechaHoy) Cuenta el número de empleados distintos que tienen un turno planificado para el día de hoy.- Parameters:
idEmpresa- El ID de la empresa.fechaHoy- La fecha actual.- Returns:
- Número total de empleados planificados hoy.
-