Class SectionsController
- Namespace
- KadicErp.WebApi.Controllers.Academy
- Assembly
- KadicErp.WebApi.dll
US#47 (US-202, #9078) — CRUD de la Sección (horario dentro de un Grupo) + sus
SectionLevel (nivel + carril por defecto), con detección de conflictos de horario/carril
y validación de capacidad de carril ≤ capacidad de piscina.
GetSchedule/CheckConflicts se mudan aquí desde GroupsController (US#46 los había
dejado ahí con el comentario "US-202, no tocar"): ya operaban sobre Section/
SectionLevel desde US#35 (US-101) — vivían mal ubicados bajo el Grupo. CheckConflicts
se reemplaza por CheckSectionConflictsCommand, con granularidad real por Nivel/carril en
vez del ResourceId único que exigía el contrato viejo de Grupo.
[ApiController]
[Route("api/academies/sections")]
[Authorize]
[RequireModule("ACADEMY")]
public class SectionsController : ControllerBase
- Inheritance
-
objectControllerBaseSectionsController
Constructors
SectionsController(IMediator)
public SectionsController(IMediator mediator)
Parameters
mediatorIMediator
Methods
AddLevel(Guid, AddSectionLevelBody, CancellationToken)
CA3 — agrega Nivel + carril por defecto.
[HttpPost("{id:guid}/levels")]
[Authorize(Policy = "ACADEMY_SECTIONS_UPDATE")]
public Task<IActionResult> AddLevel(Guid id, AddSectionLevelBody body, CancellationToken cancellationToken)
Parameters
idGuidbodyAddSectionLevelBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>
CheckConflicts(CheckSectionConflictsCommand, CancellationToken)
CA5/CA9 — simula una Sección (con sus Niveles) sin persistir. Reemplaza
GroupsController.CheckConflicts (US-202): granularidad por carril/Nivel real.
[HttpPost("check-conflicts")]
[Authorize(Policy = "ACADEMY_SECTIONS_SIMULATE")]
public Task<IActionResult> CheckConflicts(CheckSectionConflictsCommand command, CancellationToken cancellationToken)
Parameters
commandCheckSectionConflictsCommandcancellationTokenCancellationToken
Returns
- Task<IActionResult>
Create(CreateSectionCommand, CancellationToken)
CA1 — incluye la lista inicial de SectionLevel.
[HttpPost]
[Authorize(Policy = "ACADEMY_SECTIONS_CREATE")]
public Task<IActionResult> Create(CreateSectionCommand command, CancellationToken cancellationToken)
Parameters
commandCreateSectionCommandcancellationTokenCancellationToken
Returns
- Task<IActionResult>
CreateAndAssignLevel(Guid, CreateAndAssignLevelBody, CancellationToken)
#9080 CA5 — creates a catalog Level and assigns it to this Section with its default lane in one transaction. Requires permission to create Levels and update Sections.
[HttpPost("{id:guid}/levels/create")]
[Authorize(Policy = "ACADEMY_LEVELS_CREATE")]
[Authorize(Policy = "ACADEMY_SECTIONS_UPDATE")]
[ProducesResponseType(typeof(CreateAndAssignLevelDto), 200)]
[ProducesResponseType(400)]
public Task<IActionResult> CreateAndAssignLevel(Guid id, CreateAndAssignLevelBody body, CancellationToken cancellationToken)
Parameters
idGuidbodyCreateAndAssignLevelBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetAll(PaginatorRequestDto, Guid?, CancellationToken)
[HttpGet]
[Authorize(Policy = "ACADEMY_SECTIONS_VIEW")]
public Task<IActionResult> GetAll(PaginatorRequestDto paginator, Guid? groupId, CancellationToken cancellationToken)
Parameters
paginatorPaginatorRequestDtogroupIdGuid?cancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetById(Guid, CancellationToken)
[HttpGet("{id:guid}")]
[Authorize(Policy = "ACADEMY_SECTIONS_VIEW")]
public Task<IActionResult> GetById(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetSchedule(Guid, string, CancellationToken)
CA5 — movido de GroupsController.GetSchedule (US-202).
[HttpGet("schedule")]
[Authorize(Policy = "ACADEMY_SECTIONS_VIEW")]
public Task<IActionResult> GetSchedule(Guid venueId, string by, CancellationToken cancellationToken)
Parameters
venueIdGuidbystringcancellationTokenCancellationToken
Returns
- Task<IActionResult>
RemoveLevel(Guid, Guid, CancellationToken)
CA4 — baja lógica del Nivel dentro de la Sección.
[HttpDelete("{id:guid}/levels/{levelId:guid}")]
[Authorize(Policy = "ACADEMY_SECTIONS_UPDATE")]
public Task<IActionResult> RemoveLevel(Guid id, Guid levelId, CancellationToken cancellationToken)
Parameters
idGuidlevelIdGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
SetActive(Guid, SetSectionActiveBody, CancellationToken)
Baja lógica de la Sección, nunca borrado físico.
[HttpPatch("{id:guid}")]
[Authorize(Policy = "ACADEMY_SECTIONS_DEACTIVATE")]
[ProducesResponseType(409)]
public Task<IActionResult> SetActive(Guid id, SetSectionActiveBody body, CancellationToken cancellationToken)
Parameters
idGuidbodySetSectionActiveBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>
Update(Guid, UpdateSectionBody, CancellationToken)
CA2 — no toca los SectionLevel (ver AddLevel/RemoveLevel).
[HttpPut("{id:guid}")]
[Authorize(Policy = "ACADEMY_SECTIONS_UPDATE")]
public Task<IActionResult> Update(Guid id, UpdateSectionBody body, CancellationToken cancellationToken)
Parameters
idGuidbodyUpdateSectionBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>