using MediatR;
using Workflow.Application.Features.WorkflowInstances.Commands;
using BuildFlow.Shared.Domain.Common;
using BuildFlow.Host.Services.Users;
namespace BuildFlow.Host.Endpoints.Workflow.WorkflowInstance;
///
/// 发起流程实例端点。POST /workflow-instances,按定义创建实例并产生首个 token。
///
public class StartWorkflowInstanceEndpoint(
IMediator mediator,
ICurrentUserContext currentUserContext) : Endpoint
{
public override void Configure()
{
Post("/workflow-instances");
Permissions("workflow-instance:start");
Summary(s =>
{
s.Summary = "Start a new workflow instance";
});
}
public override async Task HandleAsync(StartWorkflowInstanceRequest req, CancellationToken ct)
{
// 发起人取自当前认证用户,写入 WorkflowInstance.InitiatorId,供撤回鉴权与发起人通知使用。
var command = new StartWorkflowInstanceCommand(
req.DefinitionCode,
req.Title,
req.Variables,
req.FormDataJson,
currentUserContext.GetUserIdGuid());
var result = await mediator.Send(command, ct);
await Send.OkAsync(result, ct);
}
}