Changeset e6ad948 in Klonkt for src/routes/epk.js


Ignore:
Timestamp:
06/20/2026 06:47:41 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
08cfdaa
Parents:
57b1843
Message:

feat(epk): choose up to 5 tracks for the press kit (instead of auto top-5)

Press kit editor now has a track picker (checkboxes, max 5). /pers shows the
chosen tracks in that order; no selection → automatically the top 5 most
played. Stored as epk_tracks_<siteId> (validated on site + max 5).

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/epk.js

    r57b1843 re6ad948  
    2525  if (!site) return next();
    2626
    27   // Top 10 meest beluisterde nummers (op play_count), niet zomaar de eerste paar.
    28   const tracks = db.prepare(
    29     `SELECT title, artist, duration, cover_url, COALESCE(play_count, 0) AS plays
    30        FROM audio_tracks
    31       WHERE site_id = ?
    32       ORDER BY plays DESC, position ASC, created_at ASC
    33       LIMIT 10`
    34   ).all(site.id);
     27  // Nummers op de perskit: een door de admin GEKOZEN selectie (max 5, in eigen
     28  // volgorde) als die is ingesteld; anders automatisch de top 5 meest beluisterde.
     29  let chosenIds = [];
     30  try {
     31    const raw = JSON.parse(getSetting('epk_tracks_' + site.id, '') || '[]');
     32    if (Array.isArray(raw)) chosenIds = raw.filter((x) => typeof x === 'string').slice(0, 5);
     33  } catch (e) { /* ongeldige JSON → val terug op top */ }
     34
     35  let tracks;
     36  if (chosenIds.length) {
     37    const ph = chosenIds.map(() => '?').join(',');
     38    const rows = db.prepare(
     39      `SELECT id, title, artist, duration, cover_url, COALESCE(play_count, 0) AS plays
     40         FROM audio_tracks WHERE site_id = ? AND id IN (${ph})`
     41    ).all(site.id, ...chosenIds);
     42    const byId = new Map(rows.map((r) => [r.id, r]));
     43    tracks = chosenIds.map((id) => byId.get(id)).filter(Boolean);  // behoud gekozen volgorde
     44  } else {
     45    tracks = db.prepare(
     46      `SELECT title, artist, duration, cover_url, COALESCE(play_count, 0) AS plays
     47         FROM audio_tracks
     48        WHERE site_id = ?
     49        ORDER BY plays DESC, position ASC, created_at ASC
     50        LIMIT 5`
     51    ).all(site.id);
     52  }
    3553
    3654  const posts = db.prepare(
Note: See TracChangeset for help on using the changeset viewer.