Changeset 5e16b8a in Klonkt for src/services/music/index.js


Ignore:
Timestamp:
08/15/2026 07:33:20 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
e1da6a1
Parents:
732272a
Message:

AP: eerste pagina serveren op elke collectie die first belooft

/ap/users/dev/library gaf 200 met first en last, maar ?page=1 gaf de
bibliotheek opnieuw: zelfde id, type Library, first weer naar zichzelf.
open.audio volgde die verwijzing bij "search a remote object" en gaf een
500 op onze URL terug.

pagedCollection kon dit al; vier routes gaven ?page= door en vier niet
(featured, tracks, playlists, library, library/followers). De bouwers
nemen nu een page aan en de routes reiken paginaNr(req) aan.

De test loopt over HTTP en in een lus over alle collecties. Over HTTP
omdat de unit-test op buildLibrary er al stond en groen was terwijl het
gat openstond -- het zat in de doorgifte, niet in de bouwer. In een lus
omdat het gat juist ontstond doordat de helft van de routes het wel had:
een rijtje losse gevallen vraagt om dezelfde vergeetachtigheid. Hij vond
meteen featured, die ik in deze ronde ook was vergeten.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/music/index.js

    r732272a r5e16b8a  
    247247 * ooit een besloten variant, dan hoort daar het Follow/Accept-werk bij.
    248248 */
    249 export function buildLibrary(base, site, rows) {
     249export function buildLibrary(base, site, rows, { page = false } = {}) {
    250250  const id = libraryId(base, site);
    251251  const hostPosts = site.id ? trackHostPosts(site.id) : null;
    252252  const items = (rows || []).map((r) => buildTrackAudio(base, site, r, { hostPosts }));
    253253  return pagedCollection(id, items, {
     254    page,
    254255    extra: {
    255256      type: 'Library',
     
    265266
    266267/** De collectie van alle open tracks van een site (shaer-0nh, stap 3). */
    267 export function buildTrackCollection(base, site, rows) {
     268export function buildTrackCollection(base, site, rows, { page = false } = {}) {
    268269  // Eén zoekopdracht voor alle rijen samen; zie trackHostPosts.
    269270  const posts = site.id ? trackHostPosts(site.id) : null;
    270271  const items = (rows || []).map((r) => buildTrackAudio(base, site, r, { hostPosts: posts }));
    271   return pagedCollection(`${actorId(base, site.slug)}/tracks`, items, { extra: { attributedTo: actorId(base, site.slug) } });
     272  return pagedCollection(`${actorId(base, site.slug)}/tracks`, items, { page, extra: { attributedTo: actorId(base, site.slug) } });
    272273}
    273274
     
    314315// collectie zelf, want ook een lijst mag niet verklappen wat er achter de
    315316// poort staat.
    316 export function listPlaylistsAP(base, site, enriched) {
     317export function listPlaylistsAP(base, site, enriched, { page = false } = {}) {
    317318  const rows = db.prepare(
    318319    'SELECT id, title, artist, year, cover_url FROM playlists WHERE site_id = ? ORDER BY created_at, id'
     
    327328    return stub;
    328329  });
    329   return pagedCollection(colId, items, { extra: { attributedTo: actorId(base, site.slug) } });
     330  return pagedCollection(colId, items, { page, extra: { attributedTo: actorId(base, site.slug) } });
    330331}
    331332
Note: See TracChangeset for help on using the changeset viewer.