Class SessionsController
- Namespace
- KadicErp.WebApi.Controllers.Academy
- Assembly
- KadicErp.WebApi.dll
US#7 (#8487) — asistencia (roster diario). Contrato 100% nuevo: ninguna de estas rutas existía en el frontend antes de esta US.
[ApiController]
[Route("api/academies/sessions")]
[Authorize]
[RequireModule("ACADEMY")]
public class SessionsController : ControllerBase
- Inheritance
-
objectControllerBaseSessionsController
Constructors
SessionsController(IMediator)
public SessionsController(IMediator mediator)
Parameters
mediatorIMediator
Methods
Close(Guid, CancellationToken)
[HttpPost("{id:guid}/close")]
[Authorize(Policy = "ACADEMY_ATTENDANCE_CLOSE")]
public Task<IActionResult> Close(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetRoster(Guid, CancellationToken)
[HttpGet("{id:guid}/attendance")]
[Authorize(Policy = "ACADEMY_ATTENDANCE_VIEW")]
public Task<IActionResult> GetRoster(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetSessionPlan(Guid, CancellationToken)
US#32 (#8990) — "qué toca hoy" del plan asignado al grupo de esta sesión, embebido en el roster de asistencia (no pantalla propia).
[HttpGet("{id:guid}/plan")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_RECORD")]
public Task<IActionResult> GetSessionPlan(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetSessions(DateOnly, Guid?, Guid?, TimeOnly?, CancellationToken)
US#42 (US-108, #9073) CA1/CA2 — groupId resuelve automáticamente el
Grupo por patrón de días (auto-derivación); sectionId/startTime son el
filtro explícito por Sección/Hora cuando el instructor ya sabe cuál elegir. Fecha sin
ningún Grupo activo ese día de la semana → lista vacía (CA3), nunca 500.
[HttpGet]
[Authorize(Policy = "ACADEMY_ATTENDANCE_VIEW")]
public Task<IActionResult> GetSessions(DateOnly date, Guid? groupId, Guid? sectionId, TimeOnly? startTime, CancellationToken cancellationToken)
Parameters
dateDateOnlygroupIdGuid?sectionIdGuid?startTimeTimeOnly?cancellationTokenCancellationToken
Returns
- Task<IActionResult>
MarkAttendance(Guid, MarkAttendanceBody, CancellationToken)
[HttpPost("{id:guid}/attendance")]
[Authorize(Policy = "ACADEMY_ATTENDANCE_MARK")]
public Task<IActionResult> MarkAttendance(Guid id, MarkAttendanceBody body, CancellationToken cancellationToken)
Parameters
idGuidbodyMarkAttendanceBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>
OverrideLane(Guid, Guid, OverrideLaneBody, CancellationToken)
US#36 (US-102, #9067) CA3/CA4 — registra que el carril de este Nivel, en esta Sesión, difirió del default configurado. Motivo obligatorio.
[HttpPost("{sessionId:guid}/lane-history/{levelId:guid}/override")]
[Authorize(Policy = "ACADEMY_LANE_HISTORY_OVERRIDE")]
public Task<IActionResult> OverrideLane(Guid sessionId, Guid levelId, OverrideLaneBody body, CancellationToken cancellationToken)
Parameters
sessionIdGuidlevelIdGuidbodyOverrideLaneBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>
RecordPlanExecution(Guid, RecordPlanExecutionBody, CancellationToken)
US#32 (#8990) CA5/CA11 — registro por clase de lo ejecutado del plan. 403 si el usuario autenticado no es el instructor titular/sustituto de esta sesión.
[HttpPost("{id:guid}/plan-execution")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_RECORD")]
public Task<IActionResult> RecordPlanExecution(Guid id, RecordPlanExecutionBody body, CancellationToken cancellationToken)
Parameters
idGuidbodyRecordPlanExecutionBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>
RestorePlanExercise(Guid, Guid, CancellationToken)
[HttpPost("{id:guid}/plan-execution/{executionId:guid}/restore")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_RECORD")]
public Task<IActionResult> RestorePlanExercise(Guid id, Guid executionId, CancellationToken cancellationToken)
Parameters
idGuidexecutionIdGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
SubstitutePlanExercise(Guid, Guid, SubstitutePlanExerciseBody, CancellationToken)
[HttpPost("{id:guid}/plan-execution/{executionId:guid}/substitute")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_RECORD")]
public Task<IActionResult> SubstitutePlanExercise(Guid id, Guid executionId, SubstitutePlanExerciseBody body, CancellationToken cancellationToken)
Parameters
idGuidexecutionIdGuidbodySubstitutePlanExerciseBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>