Skip to content

Conversation

@cris-eci
Copy link
Collaborator

Pull Request: Implementación de Gestión de Cupos y Horarios por Entrenadores

🔍 Resumen

Este PR implementa la funcionalidad completa para que los entrenadores puedan gestionar cupos, horarios, y hacer seguimiento de asistencia de estudiantes, cumpliendo con el requisito #5 del sprint.

✅ Funcionalidades implementadas

  1. Visualización de estudiantes inscritos

    • Nuevo endpoint para listar todos los estudiantes registrados en una sesión específica
    • Visualización detallada de información personal y estado de cada inscripción
  2. Registro de asistencia

    • Implementación del endpoint para que entrenadores marquen asistencia
    • Validaciones de fecha y hora para garantizar precisión en los registros
  3. Estadísticas de asistencia

    • Nuevo endpoint para generar estadísticas detalladas de asistencia
    • Métricas de uso y ocupación por período y entrenador
  4. Consulta de detalles de sesión

    • Endpoint para obtener información completa de una sesión específica
    • Visualización de datos como capacidad, horarios y reservas actuales

🔧 Detalles de implementación

Endpoints añadidos:

GET /api/users/trainer/sessions/{sessionId}/students
POST /api/users/trainer/attendance
GET /api/users/trainer/{trainerId}/attendance/stats
GET /api/users/gym/sessions/{sessionId}

Cambios en UserController.java:

  • Implementado método getRegisteredStudents con autorización solo para entrenadores
  • Añadido método recordStudentAttendance con validaciones de fecha y hora
  • Implementado método getAttendanceStatistics para análisis de datos
  • Añadido método getSessionById para consulta detallada de sesiones

Cambios en GymSessionServiceImpl.java:

  • Implementado getRegisteredStudentsForSession para recuperar la lista de estudiantes
  • Añadido getTrainerAttendanceStatistics para cálculo de métricas
  • Implementado getSessionById para obtener detalles completos de una sesión

Validaciones y seguridad:

  • Todos los endpoints protegidos con @PreAuthorize("hasRole('TRAINER') or hasRole('ADMIN')")
  • Implementadas validaciones para:
    • Fecha de asistencia debe coincidir con la fecha de la sesión
    • Hora de asistencia debe estar dentro del horario permitido (±15 min)
    • Verificación de existencia de sesiones y reservas

🧪 Pruebas

Para probar la funcionalidad, usar Postman con las siguientes peticiones:

  1. Ver estudiantes de una sesión:

    GET /api/users/trainer/sessions/{sessionId}/students
    
  2. Registrar asistencia:

    POST /api/users/trainer/attendance
    Body: {
      "userId": "b56bbdc4-0b2d-4beb-867c-866fb23dd12a",
      "reservationId": "374c47cb-bffb-4358-91cd-0447a3458381",
      "attendanceTime": "2025-05-12T08:30:00"
    }
    

    Nota: La hora debe estar dentro del horario de la sesión.

  3. Consultar estadísticas:

    GET /api/users/trainer/{trainerId}/attendance/stats?startDate=2025-05-01&endDate=2025-05-31
    
  4. Ver detalles de una sesión:

    GET /api/users/gym/sessions/{sessionId}
    

📝 TODOs pendientes para futuras iteraciones

  • Implementar notificaciones a usuarios para cambios en sesiones
  • Mejorar la validación de TrainerID en varios endpoints
  • Completar el CRUD para equipos del gimnasio
  • Agregar funcionalidad para exportar reportes en PDF/Excel

@AnderssonProgramming AnderssonProgramming merged commit c263229 into develop May 13, 2025
3 checks passed
@AnderssonProgramming AnderssonProgramming deleted the feature/slot-and-schedule-by-trainers branch May 13, 2025 10:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants