Table of Contents

Class DisciplinesController

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

US#1 (#8481) Task #8875, addendum 07/08/2026 — CRUD completo del catálogo de disciplinas. Separado de ProgramsController (donde vivía como sub-recurso con solo Create+GetAll, reusando permisos de Programs) para tener permisos propios (Academy.Disciplines) y una pantalla de administración en Master Data → Catálogo.

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

Constructors

DisciplinesController(IMediator)

public DisciplinesController(IMediator mediator)

Parameters

mediator IMediator

Methods

Create(CreateDisciplineBody, CancellationToken)

[HttpPost]
[Authorize(Policy = "ACADEMY_DISCIPLINES_CREATE")]
public Task<IActionResult> Create(CreateDisciplineBody body, CancellationToken cancellationToken)

Parameters

body CreateDisciplineBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetAll(PaginatorRequestDto, bool?, CancellationToken)

Listado paginado, para la pantalla de administración de Master Data.

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

Parameters

paginator PaginatorRequestDto
isActive bool?
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetById(Guid, CancellationToken)

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

Parameters

id Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetOptions(CancellationToken)

Listado liviano sin paginar, usado por el selector de disciplina en Programs. Mantiene la ruta histórica /programs/disciplines (ver AcademyDisciplinesService) fuera de este controller — este endpoint es el reemplazo, servido bajo /disciplines/options.

[HttpGet("options")]
[Authorize(Policy = "ACADEMY_DISCIPLINES_VIEW")]
public Task<IActionResult> GetOptions(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Returns

Task<IActionResult>

SetActive(Guid, SetDisciplineActiveBody, CancellationToken)

Toggle de IsActive. Rechaza con 400 si hay programas activos usando la disciplina.

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

Parameters

id Guid
body SetDisciplineActiveBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

Update(Guid, UpdateDisciplineBody, CancellationToken)

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

Parameters

id Guid
body UpdateDisciplineBody
cancellationToken CancellationToken

Returns

Task<IActionResult>