in backend/server/services/blueprint.go [127:181]
func validateBlueprintAndMakePlan(blueprint *models.Blueprint) errors.Error {
if len(blueprint.Settings) == 0 {
blueprint.Settings = nil
}
// validation
err := vld.Struct(blueprint)
if err != nil {
return errors.BadInput.WrapRaw(err)
}
// checking if the project exist
if blueprint.ProjectName != "" {
_, err := GetProject(blueprint.ProjectName)
if err != nil {
return errors.Default.Wrap(err, fmt.Sprintf("invalid projectName: [%s] for the blueprint [%s]", blueprint.ProjectName, blueprint.Name))
}
bp, err := GetBlueprintByProjectName(blueprint.ProjectName)
if err != nil {
return err
}
if bp != nil {
if bp.ID != blueprint.ID {
return errors.Default.New(fmt.Sprintf("Each project can only be used by one blueprint. The currently selected projectName: [%s] has been used by blueprint: [id:%d] [name:%s] and cannot be reused.", bp.ProjectName, bp.ID, bp.Name))
}
}
}
if strings.ToLower(blueprint.CronConfig) == "manual" {
blueprint.IsManual = true
}
if !blueprint.IsManual {
_, err = cron.ParseStandard(blueprint.CronConfig)
if err != nil {
return errors.Default.Wrap(err, "invalid cronConfig")
}
}
if blueprint.Mode == models.BLUEPRINT_MODE_ADVANCED {
plan := make(plugin.PipelinePlan, 0)
err = errors.Convert(json.Unmarshal(blueprint.Plan, &plan))
if err != nil {
return errors.Default.Wrap(err, "invalid plan")
}
} else if blueprint.Mode == models.BLUEPRINT_MODE_NORMAL {
plan, err := MakePlanForBlueprint(blueprint, false)
if err != nil {
return errors.Default.Wrap(err, "make plan for blueprint failed")
}
blueprint.Plan, err = errors.Convert01(json.Marshal(plan))
if err != nil {
return errors.Default.Wrap(err, "failed to markshal plan")
}
}
return nil
}