elsa-core/src/activities/Elsa.Activities.Http/Controllers/HttpWorkflowsController.cs

50 lines
1.7 KiB
C#
Raw Normal View History

using System.Threading;
using System.Threading.Tasks;
using Elsa.Activities.Http.Models;
using Elsa.Activities.Http.Services;
2020-10-10 15:13:52 +00:00
using Elsa.Queries;
using Elsa.Services;
using Microsoft.AspNetCore.Mvc;
namespace Elsa.Activities.Http.Controllers
{
[ApiController]
[Route("workflows")]
public class HttpWorkflowsController : ControllerBase
{
private readonly ITokenService _tokenService;
2020-10-10 15:13:52 +00:00
private readonly IWorkflowHost _workflowHost;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
public HttpWorkflowsController(
ITokenService tokenService,
IWorkflowHost workflowHost,
IWorkflowInstanceManager workflowInstanceManager)
{
2020-10-10 15:13:52 +00:00
_tokenService = tokenService;
_workflowHost = workflowHost;
_workflowInstanceManager = workflowInstanceManager;
}
[Route("trigger/{token}")]
[HttpGet, HttpPost]
public async Task<IActionResult> Trigger(string token, CancellationToken cancellationToken)
{
if (!_tokenService.TryDecryptToken(token, out Signal signal))
return NotFound();
var workflowInstance = await _workflowInstanceManager.GetByWorkflowInstanceIdAsync(signal.WorkflowInstanceId, cancellationToken);
if (workflowInstance == null)
return NotFound();
2020-10-03 10:48:25 +00:00
var input = signal.Name;
2020-10-10 15:13:52 +00:00
await _workflowHost.RunWorkflowInstanceAsync(workflowInstance, input, cancellationToken: cancellationToken);
return HttpContext.Items.ContainsKey(WorkflowHttpResult.Instance)
? (IActionResult)new EmptyResult()
: Accepted();
}
}
}