api: scope profile, workout-kind, Garmin auth, and progression handlers to userID

Pulled from userIDFromContext (never a URL/body parameter) and threaded
into every store call plus the per-user garmin.Client accessor.
This commit is contained in:
2026-07-25 18:16:06 +02:00
parent 5930cc4ef5
commit eaca8e602b
4 changed files with 46 additions and 21 deletions

View File

@@ -24,7 +24,8 @@ type workoutKindResponse struct {
}
func (s *Server) toWorkoutKindResponse(r *http.Request, k store.WorkoutKind) (workoutKindResponse, error) {
pace, err := s.DB.GetWorkoutTypePace(r.Context(), k.ID)
userID := userIDFromContext(r.Context())
pace, err := s.DB.GetWorkoutTypePace(r.Context(), userID, k.ID)
if err != nil {
return workoutKindResponse{}, err
}
@@ -71,8 +72,9 @@ func (req workoutKindRequest) validate() (classify.Node, error) {
}
func (s *Server) handleListWorkoutKinds(w http.ResponseWriter, r *http.Request) {
userID := userIDFromContext(r.Context())
activeOnly := r.URL.Query().Get("include_inactive") != "true"
kinds, err := s.DB.ListWorkoutKinds(r.Context(), activeOnly)
kinds, err := s.DB.ListWorkoutKinds(r.Context(), userID, activeOnly)
if err != nil {
writeError(w, http.StatusInternalServerError, err.Error())
return
@@ -90,12 +92,13 @@ func (s *Server) handleListWorkoutKinds(w http.ResponseWriter, r *http.Request)
}
func (s *Server) handleGetWorkoutKind(w http.ResponseWriter, r *http.Request) {
userID := userIDFromContext(r.Context())
id, err := strconv.ParseInt(chi.URLParam(r, "id"), 10, 64)
if err != nil {
writeError(w, http.StatusBadRequest, "invalid workout kind id")
return
}
kind, ok, err := s.DB.GetWorkoutKind(r.Context(), id)
kind, ok, err := s.DB.GetWorkoutKind(r.Context(), userID, id)
if err != nil {
writeError(w, http.StatusInternalServerError, err.Error())
return
@@ -113,12 +116,13 @@ func (s *Server) handleGetWorkoutKind(w http.ResponseWriter, r *http.Request) {
}
func (s *Server) handleUpdateWorkoutKind(w http.ResponseWriter, r *http.Request) {
userID := userIDFromContext(r.Context())
id, err := strconv.ParseInt(chi.URLParam(r, "id"), 10, 64)
if err != nil {
writeError(w, http.StatusBadRequest, "invalid workout kind id")
return
}
existing, ok, err := s.DB.GetWorkoutKind(r.Context(), id)
existing, ok, err := s.DB.GetWorkoutKind(r.Context(), userID, id)
if err != nil {
writeError(w, http.StatusInternalServerError, err.Error())
return
@@ -143,14 +147,14 @@ func (s *Server) handleUpdateWorkoutKind(w http.ResponseWriter, r *http.Request)
isActive = *req.IsActive
}
if err := s.DB.UpdateWorkoutKind(r.Context(), store.WorkoutKind{
if err := s.DB.UpdateWorkoutKind(r.Context(), userID, store.WorkoutKind{
ID: id, Name: req.Name, Description: req.Description, Color: req.Color,
RuleJSON: string(req.Rule), Priority: req.Priority, IsActive: isActive,
}); err != nil {
writeError(w, http.StatusInternalServerError, err.Error())
return
}
if err := s.DB.UpdateWorkoutTypePace(r.Context(), store.WorkoutTypePace{
if err := s.DB.UpdateWorkoutTypePace(r.Context(), userID, store.WorkoutTypePace{
WorkoutKindID: id,
PaceMinSecPerKm: req.PaceMinSecPerKm,
PaceMaxSecPerKm: req.PaceMaxSecPerKm,
@@ -161,7 +165,7 @@ func (s *Server) handleUpdateWorkoutKind(w http.ResponseWriter, r *http.Request)
return
}
kind, _, _ := s.DB.GetWorkoutKind(r.Context(), id)
kind, _, _ := s.DB.GetWorkoutKind(r.Context(), userID, id)
resp, err := s.toWorkoutKindResponse(r, kind)
if err != nil {
writeError(w, http.StatusInternalServerError, err.Error())