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 FormsController : ESuiteControllerBase { private readonly IFormsManager _formsManager; /// /// Constructor for the FormsController /// Constructor for the FormsController /// /// public FormsController(IFormsManager formsManager) { _formsManager = formsManager; } /// /// Gets all FormTemplates with latest version /// /// Collection of all FormTemplates [Route("forms")] [HttpGet] [AccessKey(SecurityAccess.ViewFormTemplate)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetFormTemplates( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _formsManager.GetFormTemplatesAsync(paging, cancellationToken); return Ok(result); } /// /// Get FormTemplate by supplying GeneralIdRef /// /// /// /// Returns the FormTemplate with the corresponding Id [Route("form")] [HttpGet] [AccessKey(SecurityAccess.ViewFormTemplate)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetFormTemplate( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var form = await _formsManager.GetFormTemplateAsync(generalIdRef, cancellationToken); return Ok(form); } /// /// Create FormTemplate /// /// /// [Route("form")] [HttpPost] [AccessKey(SecurityAccess.AddFormTemplate)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task CreateFormTemplate([FromBody] CreateFormTemplate createFormTemplate, CancellationToken cancellationToken = default!) { await _formsManager.CreateFormTemplateAsync(AuditUserDetails, createFormTemplate, cancellationToken); return Ok(); } /// /// Edit FormTemplate /// /// /// [Route("form")] [HttpPut] [AccessKey(SecurityAccess.EditFormTemplate)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task EditFormTempalate([FromBody] EditFormTemplate editFormTemplate, CancellationToken cancellationToken = default!) { await _formsManager.EditFormTemplateAsync(AuditUserDetails, editFormTemplate, cancellationToken); return Ok(); } /// /// Delete a formTemplate with all of its versions by providing GeneralIdRef of the FormTemplate /// /// /// [Route("form")] [HttpDelete] [AccessKey(SecurityAccess.DeleteFormTemplate)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task DeleteForm( [FromBody] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { await _formsManager.DeleteFormTemplateAsync(AuditUserDetails, generalIdRef, cancellationToken); return Ok(); } /// /// Get FormTemplate by supplying GeneralIdRef /// /// /// /// Returns the FormTemplate with the corresponding Id [Route("formInstance")] [HttpGet] [AccessKey(SecurityAccess.ViewFormInstance)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetFormInstance( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var form = await _formsManager.GetFormInstanceAsync(generalIdRef, cancellationToken); return Ok(form); } /// /// Create an instance of a form based on a given version of a template /// /// /// /// [Route("formInstance")] [HttpPost] [AccessKey(SecurityAccess.AddFormInstance)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task CreateFormInstance( [FromBody] CreateFormInstance createFormInstance, CancellationToken cancellationToken = default! ) { var formInstanceGeneralIdRef = await _formsManager.CreateFormInstanceAsync(AuditUserDetails, createFormInstance, cancellationToken); return Ok(formInstanceGeneralIdRef); } /// /// Edit a Form Instance /// /// /// /// [Route("formInstance")] [HttpPut] [AccessKey(SecurityAccess.EditFormInstance)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task EditFormInstance( [FromBody] EditFormInstance editFormInstance, CancellationToken cancellationToken = default! ) { await _formsManager.EditFormInstanceAsync(AuditUserDetails, editFormInstance, cancellationToken); return Ok(); } }