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();
}
}