using e_suite.API.Common; 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; /// /// User manage is responsible for managing users within e-suite. /// [Route("api/[controller]")] [ApiController] public class WorkflowTemplateController : ESuiteControllerBase { private readonly IWorkflowTemplateManager _workflowTemplateManager; public WorkflowTemplateController(IWorkflowTemplateManager workflowTemplateManager) { _workflowTemplateManager = workflowTemplateManager; } /// /// Get a list of workflow templates /// /// /// /// /// [Route("templates")] [AccessKey(SecurityAccess.ViewWorkflowTemplates)] [HttpGet] public async Task GetWorkflowTemplates( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _workflowTemplateManager.GetWorkflowTemplatesAsync(paging, cancellationToken); return Ok(result); } /// /// Use this to deactivate a template /// /// /// [Route("template")] [HttpDelete] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound, Type = typeof(ProblemDetails))] [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ProblemDetails))] [AccessKey(SecurityAccess.DeleteWorkflowTemplate)] public async Task DeleteWorkflowTemplate( [FromBody] GeneralIdRef templateId, CancellationToken cancellationToken = default! ) { await _workflowTemplateManager.DeleteTemplate(AuditUserDetails, templateId, cancellationToken); return Ok(); } /// /// Get a list of workflow templates /// /// /// /// /// [Route("templateVersions")] [AccessKey(SecurityAccess.ViewWorkflowTemplates)] [HttpGet] public async Task GetWorkflowTemplateVersions( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _workflowTemplateManager.GetWorkflowTemplateVersionsAsync(paging, cancellationToken); return Ok(result); } /// /// Get the details of specific template /// /// /// /// [Route("templateVersion")] [HttpGet] [AccessKey(SecurityAccess.ViewWorkflowTemplates)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetWorkflowTemplateVersion( [FromQuery] GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { var result = await _workflowTemplateManager.GetWorkflowTemplateAsync(generalIdRef, cancellationToken); return Ok(result); } /// /// Edit a Workflow Template /// /// /// /// [Route("templateVersion")] [HttpPut] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [AccessKey(SecurityAccess.EditWorkflowTemplate)] public async Task EditTemplateVersion( GetWorkflowTemplateVersion template, CancellationToken cancellationToken = default! ) { await _workflowTemplateManager.EditTemplateVersion(AuditUserDetails, template, cancellationToken); return Ok(); } /// /// Patching is useful when you only want to update a few fields of the user rather than the whole object. /// /// /// /// [Route("templateVersion")] [HttpPatch] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [AccessKey(SecurityAccess.EditWorkflowTemplate)] public async Task PatchWorkflowTemplateVersion( [FromQuery] IGeneralIdRef templateId, [FromBody] PatchWorkflowTemplateVersion patchTemplate, CancellationToken cancellationToken = default! ) { await _workflowTemplateManager.PatchTemplateVersion(AuditUserDetails, templateId, patchTemplate, cancellationToken); return Ok(); } /// /// Create a new workflow template /// /// Create a new user for e-suite. The minimum information needed is the email address, which forms the account user name. Once created the user will get an e-mail asking them to confirm the account. /// Contains the details that need to be supplied to create the user. /// /// [Route("templateVersion")] [HttpPost] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ProblemDetails))] [AccessKey(SecurityAccess.AddWorkflowTemplate)] public async Task CreateWorkflowTemplateVersion( [FromBody] CreateWorkflowTemplateVersion template, CancellationToken cancellationToken = default! ) { await _workflowTemplateManager.PostTemplateVersion(AuditUserDetails, template, cancellationToken); return Ok(); } /// /// Use this to deactivate a template /// /// /// [Route("templateVersion")] [HttpDelete] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound, Type = typeof(ProblemDetails))] [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ProblemDetails))] [AccessKey(SecurityAccess.DeleteWorkflowTemplate)] public async Task DeleteWorkflowTemplateVersion( [FromBody] GeneralIdRef templateId, CancellationToken cancellationToken = default! ) { await _workflowTemplateManager.DeleteTemplateVersion(AuditUserDetails, templateId, cancellationToken); return Ok(); } /// /// Returns a list of Task Metadata /// /// [Route("taskMetadata")] [HttpGet] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound, Type = typeof(ProblemDetails))] [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ProblemDetails))] [AccessKey(SecurityAccess.Everyone)] public async Task GetAllowedTaskMetadataList( [FromQuery] string? taskType, CancellationToken cancellationToken = default! ) { var result = await _workflowTemplateManager.GetAllowedTaskMetadataList(taskType, cancellationToken); return Ok(result); } }