diff --git a/internal/agents/schedule.go b/internal/agents/schedule.go index 37ac8f8..c0cfa9c 100644 --- a/internal/agents/schedule.go +++ b/internal/agents/schedule.go @@ -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 } diff --git a/internal/store/schedule.go b/internal/store/schedule.go index c3b53a3..b2e9dfa 100644 --- a/internal/store/schedule.go +++ b/internal/store/schedule.go @@ -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 }