feat(api): route track-list reads through user-context quarantine filter
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/go-chi/chi/v5"
|
"github.com/go-chi/chi/v5"
|
||||||
"github.com/jackc/pgx/v5"
|
"github.com/jackc/pgx/v5"
|
||||||
|
|
||||||
|
"git.fabledsword.com/bvandeusen/minstrel/internal/auth"
|
||||||
"git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq"
|
"git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -71,7 +72,14 @@ func (h *handlers) handleGetAlbum(w http.ResponseWriter, r *http.Request) {
|
|||||||
writeErr(w, http.StatusInternalServerError, "server_error", "lookup failed")
|
writeErr(w, http.StatusInternalServerError, "server_error", "lookup failed")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
tracks, err := q.ListTracksByAlbum(r.Context(), id)
|
var tracks []dbq.Track
|
||||||
|
if user, ok := auth.UserFromContext(r.Context()); ok {
|
||||||
|
tracks, err = q.ListTracksByAlbumForUser(r.Context(), dbq.ListTracksByAlbumForUserParams{
|
||||||
|
AlbumID: id, UserID: user.ID,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
tracks, err = q.ListTracksByAlbum(r.Context(), id)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("api: list tracks failed", "err", err)
|
h.logger.Error("api: list tracks failed", "err", err)
|
||||||
writeErr(w, http.StatusInternalServerError, "server_error", "lookup failed")
|
writeErr(w, http.StatusInternalServerError, "server_error", "lookup failed")
|
||||||
|
|||||||
+17
-2
@@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
"github.com/jackc/pgx/v5/pgtype"
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
|
|
||||||
|
"git.fabledsword.com/bvandeusen/minstrel/internal/auth"
|
||||||
"git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq"
|
"git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -74,15 +75,29 @@ func (h *handlers) handleSearch(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
tracks, err := dbQ.SearchTracks(r.Context(), dbq.SearchTracksParams{
|
var tracks []dbq.Track
|
||||||
|
if user, ok := auth.UserFromContext(r.Context()); ok {
|
||||||
|
tracks, err = dbQ.SearchTracksForUser(r.Context(), dbq.SearchTracksForUserParams{
|
||||||
|
Column1: needle, UserID: user.ID, Limit: int32(limit), Offset: int32(offset),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
tracks, err = dbQ.SearchTracks(r.Context(), dbq.SearchTracksParams{
|
||||||
Column1: needle, Limit: int32(limit), Offset: int32(offset),
|
Column1: needle, Limit: int32(limit), Offset: int32(offset),
|
||||||
})
|
})
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("api: search tracks failed", "err", err)
|
h.logger.Error("api: search tracks failed", "err", err)
|
||||||
writeErr(w, http.StatusInternalServerError, "server_error", "search failed")
|
writeErr(w, http.StatusInternalServerError, "server_error", "search failed")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
trackTotal, err := dbQ.CountTracksMatching(r.Context(), q)
|
var trackTotal int64
|
||||||
|
if user, ok := auth.UserFromContext(r.Context()); ok {
|
||||||
|
trackTotal, err = dbQ.CountTracksMatchingForUser(r.Context(), dbq.CountTracksMatchingForUserParams{
|
||||||
|
Column1: q, UserID: user.ID,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
trackTotal, err = dbQ.CountTracksMatching(r.Context(), q)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("api: count tracks matching failed", "err", err)
|
h.logger.Error("api: count tracks matching failed", "err", err)
|
||||||
writeErr(w, http.StatusInternalServerError, "server_error", "search failed")
|
writeErr(w, http.StatusInternalServerError, "server_error", "search failed")
|
||||||
|
|||||||
Reference in New Issue
Block a user