100 lines
2.3 KiB
Go
100 lines
2.3 KiB
Go
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)
|
|
}
|