package store import ( "context" "database/sql" "fmt" "g.fc.run/ai/byre/internal/api" ) func migrateScheduleWorkflows(tx *sql.Tx, _ string) error { rows, err := tx.Query(`SELECT id, title, model, prompt FROM schedules WHERE workflow = ''`) if err != nil { return err } type row struct{ id, title, model, prompt string } all := []row{} for rows.Next() { r := row{} err = rows.Scan(&r.id, &r.title, &r.model, &r.prompt) if err != nil { rows.Close() return err } all = append(all, r) } rows.Close() err = rows.Err() if err != nil { return err } ctx := context.Background() for _, r := range all { def := api.WorkflowDefinition{ Description: r.title, Steps: []api.WorkflowStep{{Stage: r.title, Model: r.model, Prompt: r.prompt}}, } id, err := insertDefinition(ctx, tx, def) if err != nil { return fmt.Errorf("schedule %s: %w", r.id, err) } _, err = tx.Exec(`INSERT INTO workflows (name, definition_id) VALUES (?, ?)`, r.title, id) if err != nil { return fmt.Errorf("schedule %s: workflow %q: %w", r.id, r.title, err) } _, err = tx.Exec(`UPDATE schedules SET workflow = ?, prompt = '' WHERE id = ?`, r.title, r.id) if err != nil { return err } } _, err = tx.Exec(`ALTER TABLE schedules DROP COLUMN model`) return err }