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 SiteController : ESuiteControllerBase { private readonly ISiteManager _siteManager; /// /// Constructor for the SiteController /// /// public SiteController(ISiteManager siteManager) { _siteManager = siteManager; } /// /// Gets all sites /// /// Collection of all FormTemplates [Route("sites")] [HttpGet] [AccessKey(SecurityAccess.ViewSite)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetSites( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _siteManager.GetSites(paging, cancellationToken); return Ok(result); } /// /// Get site by supplying GeneralIdRef /// /// /// /// Returns the FormTemplate with the corresponding Id [Route("site")] [HttpGet] [AccessKey(SecurityAccess.ViewSite)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetSite( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var site = await _siteManager.GetSite(generalIdRef, cancellationToken); return Ok(site); } /// /// Create site /// /// /// [Route("site")] [HttpPost] [AccessKey(SecurityAccess.AddSite)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task CreateSite([FromBody] CreateSite createSite, CancellationToken cancellationToken = default!) { await _siteManager.CreateSite(AuditUserDetails, createSite, true, cancellationToken); return Ok(); } /// /// Edit site /// /// /// [Route("site")] [HttpPut] [AccessKey(SecurityAccess.EditSite)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task EditSite( [FromBody] EditSite editSite, CancellationToken cancellationToken = default! ) { await _siteManager.EditSite(AuditUserDetails, editSite, true, cancellationToken); return Ok(); } /// /// Delete a site /// /// /// [Route("site")] [HttpDelete] [AccessKey(SecurityAccess.DeleteSite)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task DeleteSite( [FromBody] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { await _siteManager.DeleteSite(AuditUserDetails, generalIdRef, true, cancellationToken); return Ok(); } }