in internal/dal/workflow.go [263:311]
func (w *workflowDALImpl) create(ctx context.Context, tx *gorm.DB, record *model.Workflow) error {
wf, err := swf.Parse(record.Definition)
if err != nil {
return err
}
if wf == nil {
return errors.New("workflow text invalid")
}
r, err := w.Select(ctx, tx, wf.ID)
if err != nil {
return err
}
if r != nil {
return errors.New("workflow id already exists")
}
var insertData = model.Workflow{}
insertData.WorkflowID = wf.ID
insertData.WorkflowName = wf.Name
insertData.Version = wf.Version
insertData.Definition = record.Definition
insertData.Status = constants.NormalStatus
insertData.CreateTime = time.Now()
insertData.UpdateTime = time.Now()
var handlers []func() error
handlers = append(handlers, func() error {
return tx.Create(insertData).Error
})
tasks := w.buildTask(wf)
for _, task := range tasks {
task := task
handlers = append(handlers, func() error {
return tx.Create(task).Error
})
for _, action := range task.Actions {
action := action
handlers = append(handlers, func() error {
return tx.Create(action).Error
})
}
}
taskRelations := w.buildTaskRelation(wf, tasks)
for _, relation := range taskRelations {
relation := relation
handlers = append(handlers, func() error {
return tx.Create(relation).Error
})
}
return util.GoAndWait(handlers...)
}