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