using e_suite.API.Common; using e_suite.API.Common.models; using e_suite.Utilities.Pagination; using eSuite.API.security; using eSuite.API.Utilities; using eSuite.Core.Miscellaneous; using eSuite.Core.Security; using Microsoft.AspNetCore.Mvc; namespace eSuite.API.Controllers; /// /// forms manager is responsible for managing custom forms within e-suite. /// [Route("api/[controller]")] public class SpecificationController : ESuiteControllerBase { private readonly ISpecificationManager _specificationManager; /// /// Constructor for Specification Controller /// /// public SpecificationController(ISpecificationManager specificationManager) { _specificationManager = specificationManager; } /// /// Gets all specifications /// /// Collection of all FormTemplates [Route("specifications")] [HttpGet] [AccessKey(SecurityAccess.ViewSpecification)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetSpecifications( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _specificationManager.GetSpecifications(paging, cancellationToken); return Ok(result); } /// /// Get specification by supplying GeneralIdRef /// /// /// /// Returns the FormTemplate with the corresponding Id [Route("specification")] [HttpGet] [AccessKey(SecurityAccess.ViewSpecification)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetSpecification( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var site = await _specificationManager.GetSpecification(generalIdRef, cancellationToken); return Ok(site); } /// /// Gets the form template for a given print specification /// /// IdRef of specification glossary which has the form template saved as a custom value /// /// [Route("getTemplateForPrintSpec")] [HttpGet] [AccessKey(SecurityAccess.ViewTemplateForPrintSpec)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetTemplateForPrintSpec( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var site = await _specificationManager.GetTemplateForPrintSpec(generalIdRef, cancellationToken); return Ok(site); } /// /// Create a new Specification. Linking it to the associated form instance /// /// /// /// [Route("specification")] [HttpPost] [AccessKey(SecurityAccess.AddSpecification)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task CreateSpecification([FromBody] CreateSpecification create, CancellationToken cancellationToken = default!) { await _specificationManager.CreateSpecification(AuditUserDetails, create, true, cancellationToken); return Ok(); } /// /// Edit a specification /// /// /// /// [Route("specification")] [HttpPut] [AccessKey(SecurityAccess.EditSpecification)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task EditSpecification([FromBody] EditSpecification edit, CancellationToken cancellationToken = default!) { await _specificationManager.EditSpecification(AuditUserDetails, edit, true, cancellationToken); return Ok(); } /// /// Delete a specification /// /// /// [Route("specification")] [HttpDelete] [AccessKey(SecurityAccess.DeleteSpecification)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task DeleteSpecification( [FromBody] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { await _specificationManager.DeleteSpecification(AuditUserDetails, generalIdRef, true, cancellationToken); return Ok(); } }