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
-
objectControllerBaseLevelsController
Constructors
LevelsController(IMediator)
public LevelsController(IMediator mediator)
Parameters
mediatorIMediator
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
idGuidbodyAddSkillBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>
Create(CreateLevelCommand, CancellationToken)
[HttpPost]
[Authorize(Policy = "ACADEMY_LEVELS_CREATE")]
public Task<IActionResult> Create(CreateLevelCommand command, CancellationToken cancellationToken)
Parameters
commandCreateLevelCommandcancellationTokenCancellationToken
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
idGuidskillIdGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetAll(CancellationToken)
[HttpGet]
[Authorize(Policy = "ACADEMY_LEVELS_VIEW")]
public Task<IActionResult> GetAll(CancellationToken cancellationToken)
Parameters
cancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetById(Guid, CancellationToken)
[HttpGet("{id:guid}")]
[Authorize(Policy = "ACADEMY_LEVELS_VIEW")]
public Task<IActionResult> GetById(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<IActionResult>
Reorder(ReorderLevelsBody, CancellationToken)
[HttpPatch("reorder")]
[Authorize(Policy = "ACADEMY_LEVELS_REORDER")]
public Task<IActionResult> Reorder(ReorderLevelsBody body, CancellationToken cancellationToken)
Parameters
bodyReorderLevelsBodycancellationTokenCancellationToken
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
idGuidbodyReorderSkillsBodycancellationTokenCancellationToken
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
idGuidbodySetSkillsBodycancellationTokenCancellationToken
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
idGuidbodyUpdateLevelBodycancellationTokenCancellationToken
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
idGuidskillIdGuidbodyAddSkillBodycancellationTokenCancellationToken
Returns
- Task<IActionResult>