using e_suite.API.Common; using e_suite.API.Common.models; using eSuite.API.security; using eSuite.API.Utilities; using eSuite.Core.Miscellaneous; using eSuite.Core.Security; using Microsoft.AspNetCore.Mvc; namespace eSuite.API.Controllers; /// /// Controller for managing GlossaryItems within e-suite system /// [Route("api/[controller]")] [ApiController] public class GlossariesController : ESuiteControllerBase { private readonly IGlossariesManager _glossariesManager; /// /// Controller for the GlossaryManager /// /// public GlossariesController(IGlossariesManager glossariesManager) { _glossariesManager = glossariesManager; } /// /// Used to retrieve the details of a given glossary item (does not include child items) /// /// /// /// Returns GlossaryItem with corresponding Id [Route("glossaryItem")] [HttpGet] [AccessKey(SecurityAccess.ViewGlossary)] public async Task Get( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var glossary = await _glossariesManager.GetGlossaryItem(AuditUserDetails, generalIdRef, cancellationToken); return Ok(glossary); } /// /// Used to create a new glossary list or add an item to an existing glossary list. /// /// /// [Route("glossaryItem")] [HttpPost] [AccessKey(SecurityAccess.AddGlossary)] public async Task Post([FromBody] NewGlossaryItem glossaryItem, CancellationToken cancellationToken = default!) { await _glossariesManager.AddGlossaryItem(AuditUserDetails, glossaryItem, cancellationToken); return Ok(); } /// /// Used to update an existing glossary item. /// /// /// [Route("glossaryItem")] [HttpPut] [AccessKey(SecurityAccess.EditGlossary)] public async Task Put([FromBody] EditGlossaryItem glossaryItem, CancellationToken cancellationToken = default!) { await _glossariesManager.UpdateGlossaryItem(AuditUserDetails, glossaryItem, cancellationToken); return Ok(); } /// /// Delete an item from a glossary, or delete an entire glossary /// /// /// [Route("glossaryItem")] [HttpDelete] [AccessKey(SecurityAccess.DeleteGlossary)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task Delete( [FromBody] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { await _glossariesManager.DeleteGlossaryItem(AuditUserDetails, generalIdRef, cancellationToken); return Ok(); } }