Unify schedule creation and editing lifecycle
This commit is contained in:
+12
-20
@@ -9,7 +9,6 @@ import (
|
||||
"time"
|
||||
|
||||
"g.fc.run/ai/byre/internal/api"
|
||||
"g.fc.run/ai/byre/internal/ids"
|
||||
"g.fc.run/ai/byre/internal/mcp"
|
||||
"g.fc.run/ai/byre/internal/schedule"
|
||||
"g.fc.run/ai/byre/internal/store"
|
||||
@@ -45,29 +44,22 @@ func (m *Manager) SaveSchedule(ctx context.Context, projectID, scheduleID string
|
||||
sc.Id = existing.Id
|
||||
sc.ProjectId = existing.ProjectId
|
||||
sc.Owner = existing.Owner
|
||||
sc, err = m.store.UpdateSchedule(ctx, sc, actor)
|
||||
} else {
|
||||
user, err := m.store.GetUser(ctx, login)
|
||||
if err != nil {
|
||||
return api.Schedule{}, err
|
||||
}
|
||||
m.poke()
|
||||
return sc, nil
|
||||
if user.GitName == "" || user.GitEmail == "" {
|
||||
return api.Schedule{}, ErrNoGitIdentity
|
||||
}
|
||||
project, err := m.store.GetProject(ctx, projectID)
|
||||
if err != nil {
|
||||
return api.Schedule{}, err
|
||||
}
|
||||
sc.ProjectId = project.Id
|
||||
sc.Owner = user.Login
|
||||
}
|
||||
|
||||
user, err := m.store.GetUser(ctx, login)
|
||||
if err != nil {
|
||||
return api.Schedule{}, err
|
||||
}
|
||||
if user.GitName == "" || user.GitEmail == "" {
|
||||
return api.Schedule{}, ErrNoGitIdentity
|
||||
}
|
||||
project, err := m.store.GetProject(ctx, projectID)
|
||||
if err != nil {
|
||||
return api.Schedule{}, err
|
||||
}
|
||||
sc.Id = ids.New(ids.Schedule)
|
||||
sc.ProjectId = project.Id
|
||||
sc.Owner = user.Login
|
||||
sc, err = m.store.CreateSchedule(ctx, sc, actor)
|
||||
sc, err = m.store.SaveSchedule(ctx, sc, actor)
|
||||
if err != nil {
|
||||
return api.Schedule{}, err
|
||||
}
|
||||
|
||||
+16
-23
@@ -9,6 +9,7 @@ import (
|
||||
"time"
|
||||
|
||||
"g.fc.run/ai/byre/internal/api"
|
||||
"g.fc.run/ai/byre/internal/ids"
|
||||
"g.fc.run/ai/byre/internal/schedule"
|
||||
)
|
||||
|
||||
@@ -89,32 +90,24 @@ func writeWeekdays(ctx context.Context, tx *sql.Tx, sc api.Schedule) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Store) CreateSchedule(ctx context.Context, sc api.Schedule, actor string) (api.Schedule, error) {
|
||||
func (s *Store) SaveSchedule(ctx context.Context, sc api.Schedule, actor string) (api.Schedule, error) {
|
||||
sc.NextRun = schedule.Next(sc, time.Now())
|
||||
err := s.write(ctx, func(tx *sql.Tx, emit emitFunc) error {
|
||||
_, err := tx.ExecContext(ctx, `INSERT INTO schedules (`+scheduleColumns+`, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
sc.Id, sc.ProjectId, sc.Owner, sc.Title, string(sc.Every), sc.Hour, sc.Minute, sc.DayOfMonth, sc.Prompt, sc.Model, sc.Workflow, formatTime(sc.NextRun), now())
|
||||
if err != nil {
|
||||
return err
|
||||
if sc.Id == "" {
|
||||
sc.Id = ids.New(ids.Schedule)
|
||||
_, err := tx.ExecContext(ctx, `INSERT INTO schedules (`+scheduleColumns+`, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
sc.Id, sc.ProjectId, sc.Owner, sc.Title, string(sc.Every), sc.Hour, sc.Minute, sc.DayOfMonth, sc.Prompt, sc.Model, sc.Workflow, formatTime(sc.NextRun), now())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
_, err := tx.ExecContext(ctx, `UPDATE schedules SET title = ?, every = ?, hour = ?, minute = ?, day_of_month = ?, prompt = ?, model = ?, workflow = ?, next_run_at = ? WHERE id = ?`,
|
||||
sc.Title, string(sc.Every), sc.Hour, sc.Minute, sc.DayOfMonth, sc.Prompt, sc.Model, sc.Workflow, formatTime(sc.NextRun), sc.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
err = writeWeekdays(ctx, tx, sc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return emit(api.Event{Kind: "schedule.saved", ProjectId: &sc.ProjectId, Actor: actor, Payload: ToPayload(sc)})
|
||||
})
|
||||
return sc, err
|
||||
}
|
||||
|
||||
func (s *Store) UpdateSchedule(ctx context.Context, sc api.Schedule, actor string) (api.Schedule, error) {
|
||||
sc.NextRun = schedule.Next(sc, time.Now())
|
||||
err := s.write(ctx, func(tx *sql.Tx, emit emitFunc) error {
|
||||
_, err := tx.ExecContext(ctx, `UPDATE schedules SET title = ?, every = ?, hour = ?, minute = ?, day_of_month = ?, prompt = ?, model = ?, workflow = ?, next_run_at = ? WHERE id = ?`,
|
||||
sc.Title, string(sc.Every), sc.Hour, sc.Minute, sc.DayOfMonth, sc.Prompt, sc.Model, sc.Workflow, formatTime(sc.NextRun), sc.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = writeWeekdays(ctx, tx, sc)
|
||||
err := writeWeekdays(ctx, tx, sc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user