Centralize snapshot review selection in the store
This commit is contained in:
@@ -41,13 +41,13 @@ func (m *Manager) MergeAfterReview(ctx context.Context, task api.Task, user api.
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return api.Task{}, err
|
return api.Task{}, err
|
||||||
}
|
}
|
||||||
reviews, err := m.store.ListReviews(ctx, task.Id)
|
reviews, err := m.store.SnapshotReviews(ctx, task.Id, latest.N)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return api.Task{}, err
|
return api.Task{}, err
|
||||||
}
|
}
|
||||||
reviewID := ""
|
reviewID := ""
|
||||||
for _, r := range reviews {
|
for _, r := range reviews {
|
||||||
if r.SnapshotN == latest.N && r.State == api.ReviewStateRunning {
|
if r.State == api.ReviewStateRunning {
|
||||||
reviewID = r.Id
|
reviewID = r.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ func (m *Manager) reviewFinished(reviewID string, deliver bool) {
|
|||||||
if m.advanceReviews(ctx, r) {
|
if m.advanceReviews(ctx, r) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
reviews, err := m.snapshotReviews(ctx, r.TaskId, r.SnapshotN)
|
reviews, err := m.store.SnapshotReviews(ctx, r.TaskId, r.SnapshotN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("list snapshot reviews", "task", r.TaskId, "err", err)
|
slog.Error("list snapshot reviews", "task", r.TaskId, "err", err)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ func (m *Manager) tryPromptReady(ctx context.Context, taskID string, fromReview
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
reviews, err := m.snapshotReviews(ctx, taskID, latest.N)
|
reviews, err := m.store.SnapshotReviews(ctx, taskID, latest.N)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -164,20 +164,6 @@ func pendingReviewStages(def api.WorkflowDefinition, stage string, byStage map[s
|
|||||||
return pending
|
return pending
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Manager) snapshotReviews(ctx context.Context, taskID string, n int) ([]api.Review, error) {
|
|
||||||
reviews, err := m.store.ListReviews(ctx, taskID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
out := []api.Review{}
|
|
||||||
for _, r := range reviews {
|
|
||||||
if r.SnapshotN == n {
|
|
||||||
out = append(out, r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manager) reviewDir(projectID, reviewID string) string {
|
func (m *Manager) reviewDir(projectID, reviewID string) string {
|
||||||
return filepath.Join(m.worktreeRoot, projectID, "review-"+reviewID)
|
return filepath.Join(m.worktreeRoot, projectID, "review-"+reviewID)
|
||||||
}
|
}
|
||||||
@@ -596,13 +582,13 @@ func (m *Manager) respondToFindingTool(l *live) mcp.Tool {
|
|||||||
if reason == "" {
|
if reason == "" {
|
||||||
return "", fmt.Errorf("%w: reason must not be empty", ErrInvalid)
|
return "", fmt.Errorf("%w: reason must not be empty", ErrInvalid)
|
||||||
}
|
}
|
||||||
reviews, err := m.store.ListReviews(ctx, l.taskID)
|
reviews, err := m.store.SnapshotReviews(ctx, l.taskID, args.Snapshot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
reviewID := ""
|
reviewID := ""
|
||||||
for _, r := range reviews {
|
for _, r := range reviews {
|
||||||
if r.SnapshotN == args.Snapshot && r.Stage == args.Reviewer && r.State == api.ReviewStateDone {
|
if r.Stage == args.Reviewer && r.State == api.ReviewStateDone {
|
||||||
reviewID = r.Id
|
reviewID = r.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,6 +69,14 @@ func (s *Store) ListReviews(ctx context.Context, taskID string) ([]api.Review, e
|
|||||||
return scanReviews(rows)
|
return scanReviews(rows)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Store) SnapshotReviews(ctx context.Context, taskID string, n int) ([]api.Review, error) {
|
||||||
|
rows, err := s.db.QueryContext(ctx, `SELECT `+reviewColumns+` FROM reviews WHERE task_id = ? AND snapshot_n = ? ORDER BY created_at`, taskID, n)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return scanReviews(rows)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Store) RunningReviews(ctx context.Context) ([]api.Review, error) {
|
func (s *Store) RunningReviews(ctx context.Context) ([]api.Review, error) {
|
||||||
rows, err := s.db.QueryContext(ctx, `SELECT `+reviewColumns+` FROM reviews WHERE state = ? ORDER BY created_at`, string(api.ReviewStateRunning))
|
rows, err := s.db.QueryContext(ctx, `SELECT `+reviewColumns+` FROM reviews WHERE state = ? ORDER BY created_at`, string(api.ReviewStateRunning))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user