56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
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
|
||
|
|
}
|