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