Table of Contents

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
object
ControllerBase
SessionsController

Constructors

SessionsController(IMediator)

public SessionsController(IMediator mediator)

Parameters

mediator IMediator

Methods

Close(Guid, CancellationToken)

[HttpPost("{id:guid}/close")]
[Authorize(Policy = "ACADEMY_ATTENDANCE_CLOSE")]
public Task<IActionResult> Close(Guid id, CancellationToken cancellationToken)

Parameters

id Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetRoster(Guid, CancellationToken)

[HttpGet("{id:guid}/attendance")]
[Authorize(Policy = "ACADEMY_ATTENDANCE_VIEW")]
public Task<IActionResult> GetRoster(Guid id, CancellationToken cancellationToken)

Parameters

id Guid
cancellationToken CancellationToken

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

id Guid
cancellationToken CancellationToken

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

date DateOnly
groupId Guid?
sectionId Guid?
startTime TimeOnly?
cancellationToken CancellationToken

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

id Guid
body MarkAttendanceBody
cancellationToken CancellationToken

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

sessionId Guid
levelId Guid
body OverrideLaneBody
cancellationToken CancellationToken

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

id Guid
body RecordPlanExecutionBody
cancellationToken CancellationToken

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

id Guid
executionId Guid
cancellationToken CancellationToken

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

id Guid
executionId Guid
body SubstitutePlanExerciseBody
cancellationToken CancellationToken

Returns

Task<IActionResult>