Table of Contents

Class GroupsController

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

US#46 (US-201, #9077) — CRUD del Grupo (padre, patrón de días). Reemplaza el CRUD viejo que, desde US#35 (US-101), seguía apuntando a la composición Group+Section+SectionLevel para no romper el contrato plano congelado. GetSchedule/CheckConflicts se mudaron a SectionsController (US#47, US-202) — siempre operaron sobre horario/conflictos de Sección, no de Grupo; vivían aquí solo porque US-202 no existía todavía.

[ApiController]
[Route("api/academies/groups")]
[Authorize]
[RequireModule("ACADEMY")]
public class GroupsController : ControllerBase
Inheritance
object
ControllerBase
GroupsController

Constructors

GroupsController(IMediator)

public GroupsController(IMediator mediator)

Parameters

mediator IMediator

Methods

Create(CreateGroupCommand, CancellationToken)

CA1 — venueId, programId, name, days.

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

Parameters

command CreateGroupCommand
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetAll(PaginatorRequestDto, Guid?, Guid?, CancellationToken)

CA3 — lista paginada, filtro opcional por sede.

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

Parameters

paginator PaginatorRequestDto
venueId Guid?
academicPeriodId Guid?
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetById(Guid, CancellationToken)

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

Parameters

id Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetHierarchy(Guid?, bool, CancellationToken)

[HttpGet("hierarchy")]
[Authorize(Policy = "ACADEMY_GROUPS_VIEW")]
[ProducesResponseType(typeof(GroupHierarchyDto), 200)]
public Task<IActionResult> GetHierarchy(Guid? venueId, bool includeInactive = false, CancellationToken cancellationToken = default)

Parameters

venueId Guid?
includeInactive bool
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetKpis(Guid?, CancellationToken)

US#48 - Operational KPIs for the Group-Section hierarchy, optionally filtered by venue. Includes active groups, sections and enrollments; students are counted uniquely.

[HttpGet("kpis")]
[Authorize(Policy = "ACADEMY_GROUPS_VIEW")]
[ProducesResponseType(typeof(GroupKpisDto), 200)]
public Task<IActionResult> GetKpis(Guid? venueId, CancellationToken cancellationToken)

Parameters

venueId Guid?
cancellationToken CancellationToken

Returns

Task<IActionResult>

SetActive(Guid, SetGroupActiveBody, CancellationToken)

CA4 — baja lógica, nunca borrado físico.

[HttpPatch("{id:guid}")]
[Authorize(Policy = "ACADEMY_GROUPS_DEACTIVATE")]
public Task<IActionResult> SetActive(Guid id, SetGroupActiveBody body, CancellationToken cancellationToken)

Parameters

id Guid
body SetGroupActiveBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

Update(Guid, UpdateGroupBody, CancellationToken)

CA2.

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

Parameters

id Guid
body UpdateGroupBody
cancellationToken CancellationToken

Returns

Task<IActionResult>