package handler import ( "database/sql" "krafttrainer/internal/model" "net/http" "strings" ) // handleListUsers behandelt GET /api/v1/users. func (h *Handler) handleListUsers(w http.ResponseWriter, r *http.Request) { users, err := h.store.ListUsers() if err != nil { writeError(w, http.StatusInternalServerError, "Fehler beim Laden der Nutzer") return } writeJSON(w, http.StatusOK, users) } // handleCreateUser behandelt POST /api/v1/users. func (h *Handler) handleCreateUser(w http.ResponseWriter, r *http.Request) { var req model.CreateUserRequest 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 } user, err := h.store.CreateUser(req.Name) if err != nil { writeError(w, http.StatusInternalServerError, "Fehler beim Erstellen des Nutzers") return } writeJSON(w, http.StatusCreated, user) } // handleDeleteUser behandelt DELETE /api/v1/users/{id}. // Gibt 409 zurück wenn es sich um den letzten Nutzer handelt. func (h *Handler) handleDeleteUser(w http.ResponseWriter, r *http.Request) { id, err := pathID(r, "id") if err != nil { writeError(w, http.StatusBadRequest, "Ungültige ID") return } err = h.store.DeleteUser(id) if err != nil { if err == sql.ErrNoRows { writeError(w, http.StatusNotFound, "Nutzer nicht gefunden") return } if strings.Contains(err.Error(), "LAST_USER") { writeError(w, http.StatusConflict, "Der letzte Nutzer kann nicht gelöscht werden") return } writeError(w, http.StatusInternalServerError, "Fehler beim Löschen des Nutzers") return } w.WriteHeader(http.StatusNoContent) }