in flow/engine.go [47:67]
func (e *Engine) Start(ctx context.Context, param *WorkflowParam) (string, error) {
metrics.Inc(constants.MetricsEngine, constants.MetricsStartRequest)
r, err := e.workflowDAL.SelectStartTask(ctx, model.WorkflowTask{WorkflowID: param.ID})
if err != nil {
return "", err
}
if r == nil {
return "", ErrWorkflowNotExists
}
var workflowInstanceID = uuid.New().String()
if err = e.workflowDAL.InsertInstance(ctx, &model.WorkflowInstance{
WorkflowID: param.ID, WorkflowInstanceID: workflowInstanceID,
WorkflowStatus: constants.WorkflowInstanceProcessStatus,
}); err != nil {
return "", err
}
var w = model.WorkflowTaskInstance{WorkflowInstanceID: workflowInstanceID, WorkflowID: param.ID,
TaskID: r.TaskID, TaskInstanceID: uuid.New().String(), Status: constants.TaskInstanceWaitStatus,
Input: param.Input, IsStart: true}
return workflowInstanceID, e.queue.Publish([]*model.WorkflowTaskInstance{&w})
}