Unify schedule creation and editing lifecycle

This commit is contained in:
Ian Gulliver
2026-10-22 08:07:22 -07:00
parent 445f56881c
commit e28071f380
2 changed files with 28 additions and 43 deletions
+12 -20
View File
@@ -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
View File
@@ -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
}