package api import ( "encoding/json" "net/http" "strconv" "github.com/go-chi/chi/v5" "smartrun/backend/internal/store" ) func (s *Server) handleReviewQueue(w http.ResponseWriter, r *http.Request) { queue, err := s.DB.ReviewQueue(r.Context()) if err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } type item struct { store.KindAssignment Activity store.Activity `json:"activity"` } items := make([]item, 0, len(queue)) for _, a := range queue { activity, ok, err := s.DB.GetActivity(r.Context(), a.ActivityID) if err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } if !ok { continue } items = append(items, item{KindAssignment: a, Activity: activity}) } writeJSON(w, http.StatusOK, items) } func (s *Server) handleResolveReview(w http.ResponseWriter, r *http.Request) { activityID, err := strconv.ParseInt(chi.URLParam(r, "activityID"), 10, 64) if err != nil { writeError(w, http.StatusBadRequest, "invalid activity id") return } var body struct { WorkoutKindID int64 `json:"workout_kind_id"` } if err := json.NewDecoder(r.Body).Decode(&body); err != nil { writeError(w, http.StatusBadRequest, "invalid request body") return } if body.WorkoutKindID == 0 { writeError(w, http.StatusBadRequest, "workout_kind_id is required") return } if _, ok, err := s.DB.GetWorkoutKind(r.Context(), body.WorkoutKindID); err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } else if !ok { writeError(w, http.StatusBadRequest, "workout kind not found") return } kindID := body.WorkoutKindID if _, err := s.DB.InsertKindAssignment(r.Context(), store.KindAssignment{ ActivityID: activityID, WorkoutKindID: &kindID, AssignmentSource: store.AssignmentSourceManual, Status: store.AssignmentStatusAssigned, CandidateKindsJSON: "[]", }); err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } writeJSON(w, http.StatusOK, map[string]string{"status": "resolved"}) }