Table of Contents

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

Constructors

SectionsController(IMediator)

public SectionsController(IMediator mediator)

Parameters

mediator IMediator

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

id Guid
body AddSectionLevelBody
cancellationToken CancellationToken

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

command CheckSectionConflictsCommand
cancellationToken CancellationToken

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

command CreateSectionCommand
cancellationToken CancellationToken

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

id Guid
body CreateAndAssignLevelBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetAll(PaginatorRequestDto, Guid?, CancellationToken)

[HttpGet]
[Authorize(Policy = "ACADEMY_SECTIONS_VIEW")]
public Task<IActionResult> GetAll(PaginatorRequestDto paginator, Guid? groupId, CancellationToken cancellationToken)

Parameters

paginator PaginatorRequestDto
groupId Guid?
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetById(Guid, CancellationToken)

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

Parameters

id Guid
cancellationToken CancellationToken

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

venueId Guid
by string
cancellationToken CancellationToken

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

id Guid
levelId Guid
cancellationToken CancellationToken

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

id Guid
body SetSectionActiveBody
cancellationToken CancellationToken

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

id Guid
body UpdateSectionBody
cancellationToken CancellationToken

Returns

Task<IActionResult>