package api import ( "encoding/json" "errors" "net/http" "git.fabledsword.com/bvandeusen/minstrel/internal/apierror" "git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq" "git.fabledsword.com/bvandeusen/minstrel/internal/library" ) // GET /api/me/normalization returns the caller's loudness-normalization // preference, or the defaults when they have never set one (M464 #4998). func (h *handlers) handleGetMyNormalization(w http.ResponseWriter, r *http.Request) { caller, ok := requireUser(w, r) if !ok { return } p, err := library.LoadNormalizationPrefs(r.Context(), dbq.New(h.pool), caller.ID) if err != nil { writeErrWithLog(w, h.logger, "normalization: load", apierror.InternalMsg("lookup failed", err)) return } writeJSON(w, http.StatusOK, p) } // PUT /api/me/normalization replaces the caller's preference with the whole // body. Every field is required, so a client replaying a queued change // offline sends the full state it showed the user, and the last write wins. func (h *handlers) handlePutMyNormalization(w http.ResponseWriter, r *http.Request) { caller, ok := requireUser(w, r) if !ok { return } var body library.NormalizationPrefs if err := json.NewDecoder(r.Body).Decode(&body); err != nil { writeErr(w, apierror.BadRequest("bad_body", "invalid JSON body")) return } p, err := library.SaveNormalizationPrefs(r.Context(), dbq.New(h.pool), caller.ID, body) if errors.Is(err, library.ErrNormalizationPrefsInvalid) { writeErr(w, apierror.BadRequest("invalid_normalization", err.Error())) return } if err != nil { writeErrWithLog(w, h.logger, "normalization: save", apierror.InternalMsg("save failed", err)) return } writeJSON(w, http.StatusOK, p) }