func()

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