package api import ( "net/http" "strconv" "github.com/go-chi/chi/v5" "smartrun/backend/internal/store" ) func (s *Server) handleListActivities(w http.ResponseWriter, r *http.Request) { q := r.URL.Query() filter := store.ActivityFilter{ FromDate: q.Get("from"), ToDate: q.Get("to"), } if limit, err := strconv.Atoi(q.Get("limit")); err == nil { filter.Limit = limit } if offset, err := strconv.Atoi(q.Get("offset")); err == nil { filter.Offset = offset } activities, err := s.DB.ListActivities(r.Context(), filter) if err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } writeJSON(w, http.StatusOK, activities) } func (s *Server) handleGetActivity(w http.ResponseWriter, r *http.Request) { id, err := strconv.ParseInt(chi.URLParam(r, "id"), 10, 64) if err != nil { writeError(w, http.StatusBadRequest, "invalid activity id") return } activity, ok, err := s.DB.GetActivity(r.Context(), id) if err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } if !ok { writeError(w, http.StatusNotFound, "activity not found") return } laps, err := s.DB.LapsForActivity(r.Context(), id) if err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } assignment, hasAssignment, err := s.DB.CurrentAssignment(r.Context(), id) if err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } resp := map[string]any{"activity": activity, "laps": laps} if hasAssignment { resp["assignment"] = assignment } writeJSON(w, http.StatusOK, resp) }