package api import ( "encoding/json" "net/http" "github.com/fujin/music-agregator/internal/services" "github.com/go-chi/chi/v5" ) func (h *Handlers) GetAlbum(w http.ResponseWriter, r *http.Request) { if h.DB == nil { writeError(w, http.StatusServiceUnavailable, "database not connected") return } albumIDStr := chi.URLParam(r, "id") albumID, err := parseUUID(albumIDStr) if err != nil { writeError(w, http.StatusBadRequest, "invalid album ID") return } album, err := h.DB.GetAlbumDetailByID(r.Context(), albumID) if err != nil { writeError(w, http.StatusNotFound, "album not found") return } writeJSON(w, http.StatusOK, album) } func (h *Handlers) EditAlbum(w http.ResponseWriter, r *http.Request) { if h.DB == nil { writeError(w, http.StatusServiceUnavailable, "database not connected") return } albumIDStr := chi.URLParam(r, "id") albumID, err := parseUUID(albumIDStr) if err != nil { writeError(w, http.StatusBadRequest, "invalid album ID") return } var update struct { Monitored *bool `json:"monitored"` } if err := json.NewDecoder(r.Body).Decode(&update); err != nil { writeError(w, http.StatusBadRequest, "invalid request body") return } if update.Monitored != nil { if err := h.DB.UpdateAlbumMonitored(r.Context(), albumID, *update.Monitored); err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } if *update.Monitored { hasFiles, _ := h.DB.HasTrackFiles(r.Context(), albumID) if !hasFiles { h.DB.AddToWantedAlbums(r.Context(), albumID) } } else { h.DB.RemoveFromWantedAlbums(r.Context(), albumID) } } album, err := h.DB.GetAlbumDetailByID(r.Context(), albumID) if err != nil { writeError(w, http.StatusNotFound, "album not found") return } writeJSON(w, http.StatusOK, album) } func (h *Handlers) SearchAlbum(w http.ResponseWriter, r *http.Request) { if h.DB == nil { writeError(w, http.StatusServiceUnavailable, "database not connected") return } albumIDStr := chi.URLParam(r, "id") albumID, err := parseUUID(albumIDStr) if err != nil { writeError(w, http.StatusBadRequest, "invalid album ID") return } result, err := services.SearchAlbum(r.Context(), albumID, h.DB, h.IndexerService) if err != nil { writeError(w, http.StatusNotFound, "album not found") return } writeJSON(w, http.StatusOK, result) }