using e_suite.API.Common; using e_suite.API.Common.models; using e_suite.Database.Core.Tables.CustomFields; 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; /// /// Custom fields manager is responsible for managing Custom fields within e-suite. /// [Route("api/[controller]")] [ApiController] public class CustomFieldsController : ESuiteControllerBase { private readonly ICustomFieldManager _customFieldManager; /// /// Constructor for the FieldController /// /// public CustomFieldsController(ICustomFieldManager customFieldManager) { _customFieldManager = customFieldManager; } /// /// Returns a list of all the fields in the system /// /// This returns all the fields in the system that are not soft deleted. [Route("fields")] [HttpGet] [AccessKey(SecurityAccess.ViewField)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetFields( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _customFieldManager.GetFieldsAsync(paging, cancellationToken); return Ok(result); } /// /// Gets the custom field by and id /// /// /// /// [Route("field")] [HttpGet] [AccessKey(SecurityAccess.ViewField)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task GetField( [FromQuery] GeneralIdRef genralIdRef, CancellationToken cancellationToken = default! ) { var field = await _customFieldManager.GetFieldAsync(genralIdRef, cancellationToken); return Ok(field); } /// /// Create a custom field /// /// /// /// [Route("field")] [HttpPost] [AccessKey(SecurityAccess.AddField)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task CreateField( [FromBody] CreateCustomField customField, CancellationToken cancellationToken = default! ) { await _customFieldManager.CreateFieldAsync(AuditUserDetails, customField, cancellationToken); return Ok(); } /// /// Updates the values of a created Custom field /// /// /// /// [Route("field")] [HttpPut] [AccessKey(SecurityAccess.EditField)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task EditField( [FromBody] EditCustomFields customFields, CancellationToken cancellationToken = default! ) { await _customFieldManager.EditFieldAsync(AuditUserDetails, customFields, cancellationToken); return Ok(); } /// /// Patching is useful when you only want to update a few fields of the user rather than the whole object. /// /// /// > /// /// [Route("field")] [HttpPatch] [AccessKey(SecurityAccess.EditField)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task PatchField( [FromQuery] IGeneralIdRef id, [FromBody] PatchCustomFields customFields, CancellationToken cancellationToken = default! ) { await _customFieldManager.PatchFieldAsync(AuditUserDetails, id, customFields, cancellationToken); return Ok(); } /// /// Delete a custom field by giving a Id /// /// /// /// [Route("field")] [HttpDelete] [AccessKey(SecurityAccess.DeleteField)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task DeleteField( [FromBody] GeneralIdRef id, CancellationToken cancellationToken = default! ) { await _customFieldManager.DeleteFieldAsync(AuditUserDetails, id, cancellationToken); return Ok(); } }