Table of Contents

Class ClassScheduleController

Namespace
KadicErp.WebApi.Controllers.Academy
Assembly
KadicErp.WebApi.dll

US#32 (#8990) — catálogo, asignación y adherencia del Programa de Clases. Renombrado de TrainingPlansController por US#39 (US-105, #9070) CA1: el nombre técnico ahora coincide con el nombre de negocio "Programa de Clases" (branding UI "360", fuera del código, DA-01). El registro por clase vive en SessionsController (embebido en el roster de asistencia de US#7, no en pantalla propia).

[ApiController]
[Route("api/academies/class-schedule")]
[Authorize]
[RequireModule("ACADEMY")]
public class ClassScheduleController : ControllerBase
Inheritance
object
ControllerBase
ClassScheduleController

Constructors

ClassScheduleController(IMediator)

public ClassScheduleController(IMediator mediator)

Parameters

mediator IMediator

Methods

AddItem(Guid, AddClassScheduleItemBody, CancellationToken)

US#41 (US9083, #9083) — agrega una unidad de trabajo individual desde el catálogo de ejercicios, sin reemplazar la lista completa (a diferencia de Update(Guid, UpdateClassScheduleBody, CancellationToken)).

[HttpPost("{id:guid}/items")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_EDIT")]
public Task<IActionResult> AddItem(Guid id, AddClassScheduleItemBody body, CancellationToken cancellationToken)

Parameters

id Guid
body AddClassScheduleItemBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

Assign(Guid, AssignClassScheduleBody, CancellationToken)

[HttpPost("{id:guid}/assign")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_ASSIGN")]
public Task<IActionResult> Assign(Guid id, AssignClassScheduleBody body, CancellationToken cancellationToken)

Parameters

id Guid
body AssignClassScheduleBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

Create(CreateClassScheduleCommand, CancellationToken)

[HttpPost]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_CREATE")]
public Task<IActionResult> Create(CreateClassScheduleCommand command, CancellationToken cancellationToken)

Parameters

command CreateClassScheduleCommand
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetAdherence(Guid, CancellationToken)

CA12 — sujeto a ClassSchedule.View; sin programa asignado, la respuesta trae todos los campos en null ("sin dato"), nunca 0%.

[HttpGet("/api/academies/students/{studentId:guid}/plan-adherence")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_VIEW")]
public Task<IActionResult> GetAdherence(Guid studentId, CancellationToken cancellationToken)

Parameters

studentId Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetAll(bool?, CancellationToken)

[HttpGet]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_VIEW")]
public Task<IActionResult> GetAll(bool? isActive, CancellationToken cancellationToken)

Parameters

isActive bool?
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetById(Guid, CancellationToken)

[HttpGet("{id:guid}")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_VIEW")]
public Task<IActionResult> GetById(Guid id, CancellationToken cancellationToken)

Parameters

id Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

RemoveItem(Guid, Guid, CancellationToken)

US#41 (US9083, #9083) — elimina una unidad de trabajo agregada desde el catálogo. Las unidades base/master retornan 400 (AppException de dominio).

[HttpDelete("{id:guid}/items/{itemId:guid}")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_EDIT")]
public Task<IActionResult> RemoveItem(Guid id, Guid itemId, CancellationToken cancellationToken)

Parameters

id Guid
itemId Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

Resolve(Guid?, Guid?, Guid, DateOnly?, CancellationToken)

US9082 ("tree resolver") — resuelve el programa vigente para una sección o un atleta en una fecha, con los ítems ya filtrados por nivel. Ruta con segmento literal resolve (no {id:guid}) para no colisionar de firma con GetById(Guid, CancellationToken): ambos son GET sobre la raíz del recurso pero uno identifica un programa por Id y este resuelve por destinatario/fecha/nivel.

[HttpGet("resolve")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_VIEW")]
public Task<IActionResult> Resolve(Guid? sectionId, Guid? studentProfileId, Guid levelId, DateOnly? date, CancellationToken cancellationToken)

Parameters

sectionId Guid?
studentProfileId Guid?
levelId Guid
date DateOnly?
cancellationToken CancellationToken

Returns

Task<IActionResult>

Tree(CancellationToken)

US9082 CA1 ("tree resolver") — árbol Sección·Nivel del tenant actual (join de SectionLevel con Section.Name/Level.Name, solo secciones activas). Ruta con segmento literal tree (no {id:guid}) por el mismo motivo que Resolve(Guid?, Guid?, Guid, DateOnly?, CancellationToken): debe ir antes de GetById en el orden de matching de rutas para no colisionar de firma.

[HttpGet("tree")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_VIEW")]
public Task<IActionResult> Tree(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Returns

Task<IActionResult>

Update(Guid, UpdateClassScheduleBody, CancellationToken)

[HttpPut("{id:guid}")]
[Authorize(Policy = "ACADEMY_CLASS_SCHEDULE_EDIT")]
public Task<IActionResult> Update(Guid id, UpdateClassScheduleBody body, CancellationToken cancellationToken)

Parameters

id Guid
body UpdateClassScheduleBody
cancellationToken CancellationToken

Returns

Task<IActionResult>