package api import ( "net/http" "git.fabledsword.com/bvandeusen/minstrel/internal/apierror" "git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq" ) // handleListLibraryAlbums implements GET /api/library/albums. Mirrors // /api/artists?sort=alpha but for albums. The new wrapping-grid page on // the SPA infinite-scrolls against this endpoint via TanStack // createInfiniteQuery. func (h *handlers) handleListLibraryAlbums(w http.ResponseWriter, r *http.Request) { limit, offset, err := parsePaging(r.URL.Query()) if err != nil { writeErr(w, apierror.BadRequest("bad_request", err.Error())) return } q := dbq.New(h.pool) rows, err := q.ListAlbumsAlphaWithArtist(r.Context(), dbq.ListAlbumsAlphaWithArtistParams{ Limit: int32(limit), Offset: int32(offset), }) if err != nil { h.logger.Error("api: list library albums", "err", err) writeErr(w, apierror.InternalMsg("lookup failed", err)) return } total, err := q.CountAlbums(r.Context()) if err != nil { h.logger.Error("api: count albums", "err", err) writeErr(w, apierror.InternalMsg("count failed", err)) return } items := make([]AlbumRef, 0, len(rows)) for _, row := range rows { items = append(items, albumRefFrom(row.Album, row.ArtistName, 0, 0)) } writeJSON(w, http.StatusOK, Page[AlbumRef]{ Items: items, Total: int(total), Limit: limit, Offset: offset, }) }