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; /// /// Methods for interacting with Domains /// [Route("api/[controller]")] public class DomainController : ESuiteControllerBase { private readonly IDomainManager _domainManager; /// /// Constructor for the Domain Controller /// /// public DomainController(IDomainManager domainManager) { _domainManager = domainManager; } /// /// Get list of all domains /// /// /// /// [Route("domains")] [HttpGet] [AccessKey(SecurityAccess.ViewDomain)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetDomains( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _domainManager.GetDomainsAsync(paging, cancellationToken); return Ok(result); } /// /// Get details of domain /// /// /// /// Returns the FormTemplate with the corresponding Id [Route("domain")] [HttpGet] [AccessKey(SecurityAccess.ViewDomain)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetDomain( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var form = await _domainManager.GetDomainAsync(generalIdRef, cancellationToken); return Ok(form); } /// /// Create Domain /// /// /// /// [Route("domain")] [HttpPost] [AccessKey(SecurityAccess.AddDomain)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task CreateDomain( [FromBody] CreateDomain createDomain, CancellationToken cancellationToken = default! ) { await _domainManager.CreateDomainAsync(AuditUserDetails, createDomain, cancellationToken); return Ok(); } /// /// Edit domain /// /// /// [Route("domain")] [HttpPut] [AccessKey(SecurityAccess.EditDomain)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task EditDomain( [FromBody] EditDomain editFormTemplate, CancellationToken cancellationToken = default! ) { await _domainManager.EditDomainAsync(AuditUserDetails, editFormTemplate, cancellationToken); return Ok(); } /// /// Delete a formTemplate with all of its versions by providing GeneralIdRef of the FormTemplate /// /// /// [Route("domain")] [HttpDelete] [AccessKey(SecurityAccess.DeleteDomain)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task DeleteDomain( [FromBody] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { await _domainManager.DeleteDomainAsync(AuditUserDetails, generalIdRef, cancellationToken); return Ok(); } }