Unify schedule creation and editing lifecycle
This commit is contained in:
+12
-20
@@ -9,7 +9,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"g.fc.run/ai/byre/internal/api"
|
"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/mcp"
|
||||||
"g.fc.run/ai/byre/internal/schedule"
|
"g.fc.run/ai/byre/internal/schedule"
|
||||||
"g.fc.run/ai/byre/internal/store"
|
"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.Id = existing.Id
|
||||||
sc.ProjectId = existing.ProjectId
|
sc.ProjectId = existing.ProjectId
|
||||||
sc.Owner = existing.Owner
|
sc.Owner = existing.Owner
|
||||||
sc, err = m.store.UpdateSchedule(ctx, sc, actor)
|
} else {
|
||||||
|
user, err := m.store.GetUser(ctx, login)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return api.Schedule{}, err
|
return api.Schedule{}, err
|
||||||
}
|
}
|
||||||
m.poke()
|
if user.GitName == "" || user.GitEmail == "" {
|
||||||
return sc, nil
|
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
|
||||||
}
|
}
|
||||||
|
sc, err = m.store.SaveSchedule(ctx, sc, actor)
|
||||||
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)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return api.Schedule{}, err
|
return api.Schedule{}, err
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-23
@@ -9,6 +9,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"g.fc.run/ai/byre/internal/api"
|
"g.fc.run/ai/byre/internal/api"
|
||||||
|
"g.fc.run/ai/byre/internal/ids"
|
||||||
"g.fc.run/ai/byre/internal/schedule"
|
"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
|
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())
|
sc.NextRun = schedule.Next(sc, time.Now())
|
||||||
err := s.write(ctx, func(tx *sql.Tx, emit emitFunc) error {
|
err := s.write(ctx, func(tx *sql.Tx, emit emitFunc) error {
|
||||||
_, err := tx.ExecContext(ctx, `INSERT INTO schedules (`+scheduleColumns+`, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
if sc.Id == "" {
|
||||||
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())
|
sc.Id = ids.New(ids.Schedule)
|
||||||
if err != nil {
|
_, err := tx.ExecContext(ctx, `INSERT INTO schedules (`+scheduleColumns+`, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||||
return err
|
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)
|
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)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user