Table of Contents

Class LevelsController

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

US#2 — niveles del "camino del alumno" y su malla de habilidades. La regla dura del módulo: SkillId es inmutable, reordenar solo toca Order (CA3/CA6).

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

Constructors

LevelsController(IMediator)

public LevelsController(IMediator mediator)

Parameters

mediator IMediator

Methods

AddSkill(Guid, AddSkillBody, CancellationToken)

[HttpPost("{id:guid}/skills")]
[Authorize(Policy = "ACADEMY_LEVELS_SKILLS_CREATE")]
public Task<IActionResult> AddSkill(Guid id, AddSkillBody body, CancellationToken cancellationToken)

Parameters

id Guid
body AddSkillBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

Create(CreateLevelCommand, CancellationToken)

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

Parameters

command CreateLevelCommand
cancellationToken CancellationToken

Returns

Task<IActionResult>

DeleteSkill(Guid, Guid, CancellationToken)

[HttpDelete("{id:guid}/skills/{skillId:guid}")]
[Authorize(Policy = "ACADEMY_LEVELS_SKILLS_DELETE")]
public Task<IActionResult> DeleteSkill(Guid id, Guid skillId, CancellationToken cancellationToken)

Parameters

id Guid
skillId Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetAll(CancellationToken)

[HttpGet]
[Authorize(Policy = "ACADEMY_LEVELS_VIEW")]
public Task<IActionResult> GetAll(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Returns

Task<IActionResult>

GetById(Guid, CancellationToken)

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

Parameters

id Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

Reorder(ReorderLevelsBody, CancellationToken)

[HttpPatch("reorder")]
[Authorize(Policy = "ACADEMY_LEVELS_REORDER")]
public Task<IActionResult> Reorder(ReorderLevelsBody body, CancellationToken cancellationToken)

Parameters

body ReorderLevelsBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

ReorderSkills(Guid, ReorderSkillsBody, CancellationToken)

[HttpPatch("{id:guid}/skills/reorder")]
[Authorize(Policy = "ACADEMY_LEVELS_SKILLS_REORDER")]
public Task<IActionResult> ReorderSkills(Guid id, ReorderSkillsBody body, CancellationToken cancellationToken)

Parameters

id Guid
body ReorderSkillsBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

SetSkills(Guid, SetSkillsBody, CancellationToken)

Reemplazo masivo — contrato heredado del front (levels.service.ts original tenía setSkills(levelId, skills: string[])). Hace merge por nombre contra las skills activas existentes en vez de borrar e insertar, para no violar CA3/CA6: una skill cuyo nombre ya existe conserva su Id: solo se crean las que son realmente nuevas.

[HttpPut("{id:guid}/skills")]
[Authorize(Policy = "ACADEMY_LEVELS_SKILLS_UPDATE")]
public Task<IActionResult> SetSkills(Guid id, SetSkillsBody body, CancellationToken cancellationToken)

Parameters

id Guid
body SetSkillsBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

Update(Guid, UpdateLevelBody, CancellationToken)

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

Parameters

id Guid
body UpdateLevelBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

UpdateSkill(Guid, Guid, AddSkillBody, CancellationToken)

[HttpPut("{id:guid}/skills/{skillId:guid}")]
[Authorize(Policy = "ACADEMY_LEVELS_SKILLS_UPDATE")]
public Task<IActionResult> UpdateSkill(Guid id, Guid skillId, AddSkillBody body, CancellationToken cancellationToken)

Parameters

id Guid
skillId Guid
body AddSkillBody
cancellationToken CancellationToken

Returns

Task<IActionResult>