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