43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
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,
|
|
})
|
|
}
|