package handler import ( "database/sql" "krafttrainer/internal/model" "net/http" "strings" ) // handleListSets behandelt GET /api/v1/sets. func (h *Handler) handleListSets(w http.ResponseWriter, r *http.Request) { uid, err := userID(r) if err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } sets, err := h.store.ListSets(uid) if err != nil { writeError(w, http.StatusInternalServerError, "Fehler beim Laden der Sets") return } writeJSON(w, http.StatusOK, sets) } // handleCreateSet behandelt POST /api/v1/sets. func (h *Handler) handleCreateSet(w http.ResponseWriter, r *http.Request) { uid, err := userID(r) if err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } var req model.CreateSetRequest if err := decodeJSON(r, &req); err != nil { writeError(w, http.StatusBadRequest, "Ungültiger Request-Body") return } if err := req.Validate(); err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } set, err := h.store.CreateSet(uid, &req) if err != nil { if strings.Contains(err.Error(), "existiert nicht") { writeError(w, http.StatusBadRequest, err.Error()) return } writeError(w, http.StatusInternalServerError, "Fehler beim Erstellen des Sets") return } writeJSON(w, http.StatusCreated, set) } // handleUpdateSet behandelt PUT /api/v1/sets/{id}. // Ersetzt Name und Übungszuordnungen vollständig. func (h *Handler) handleUpdateSet(w http.ResponseWriter, r *http.Request) { uid, err := userID(r) if err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } id, err := pathID(r, "id") if err != nil { writeError(w, http.StatusBadRequest, "Ungültige ID") return } var req model.UpdateSetRequest if err := decodeJSON(r, &req); err != nil { writeError(w, http.StatusBadRequest, "Ungültiger Request-Body") return } if err := req.Validate(); err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } set, err := h.store.UpdateSet(id, uid, &req) if err != nil { if strings.Contains(err.Error(), "existiert nicht") { writeError(w, http.StatusBadRequest, err.Error()) return } writeError(w, http.StatusInternalServerError, "Fehler beim Aktualisieren des Sets") return } if set == nil { writeError(w, http.StatusNotFound, "Set nicht gefunden") return } writeJSON(w, http.StatusOK, set) } // handleDeleteSet behandelt DELETE /api/v1/sets/{id}. // Führt einen Soft-Delete durch (setzt deleted_at). func (h *Handler) handleDeleteSet(w http.ResponseWriter, r *http.Request) { uid, err := userID(r) if err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } id, err := pathID(r, "id") if err != nil { writeError(w, http.StatusBadRequest, "Ungültige ID") return } err = h.store.SoftDeleteSet(id, uid) if err == sql.ErrNoRows { writeError(w, http.StatusNotFound, "Set nicht gefunden") return } if err != nil { writeError(w, http.StatusInternalServerError, "Fehler beim Löschen des Sets") return } w.WriteHeader(http.StatusNoContent) }