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