source: Klonkt/src/routes/epk.js@ b988c96

main
Last change on this file since b988c96 was 13b2986, checked in by roboburr <roboburr@…>, 3 months ago

EPK: Music section = top 10 most played (instead of first 6 in order)

Query now orders by play_count DESC LIMIT 10; section is titled "Most played"
with a rank number per track.

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

  • Property mode set to 100644
File size: 2.3 KB
Line 
1/**
2 * EPK / perskit (premium) — een deelbare perspagina per Klonkt-site.
3 *
4 * GET /pers (solo) of /user/:slug/pers (hub, via resolveSite + siteUrlBase)
5 * -> nette, openbare perskit: hero (foto/titel/tagline), korte bio, topnummers,
6 * recente posts en een contact-knop. Bedoeld om naar boekers/pers te sturen.
7 *
8 * Premium-gated: niet-premium instances hebben GEEN /pers (next() -> 404 via de
9 * catch-all). De PAGINA zelf is openbaar (geen login) zodat pers 'm kan bekijken;
10 * alleen het BESTAAN ervan is premium. Geen login-e-mail lekken: contact loopt via
11 * een expliciet ingesteld pers-adres (epk_contact, per site) of anders de site zelf.
12 */
13
14import express from 'express';
15import db from '../config/database.js';
16import { renderPage } from '../middleware/render.js';
17import { premiumUnlocked } from '../services/PatreonService.js';
18import { getSetting } from '../services/SettingsService.js';
19
20const router = express.Router();
21
22router.get('/pers', (req, res, next) => {
23 if (!premiumUnlocked()) return next(); // geen premium -> geen perskit
24 const site = res.locals.site;
25 if (!site) return next();
26
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);
35
36 const posts = db.prepare(
37 `SELECT slug, title, created_at
38 FROM posts
39 WHERE site_id = ? AND status = 'published'
40 ORDER BY created_at DESC
41 LIMIT 5`
42 ).all(site.id);
43
44 // Pers-contact: per-site instelling (epk_contact_<siteId>) als die er is, anders
45 // de globale epk_contact. NOOIT automatisch de login-mail tonen.
46 const contact = (getSetting('epk_contact_' + site.id, '') || getSetting('epk_contact', '') || '').trim();
47 // Korte pers-bio: per-site instelling, anders de tagline van de site.
48 const bio = (getSetting('epk_bio_' + site.id, '') || site.tagline || '').trim();
49
50 renderPage(req, res, 'pages/epk', {
51 pageTitle: (site.title || 'Perskit') + ' — Perskit',
52 bodyClass: 'on-epk',
53 epkTracks: tracks,
54 epkPosts: posts,
55 epkContact: contact,
56 epkBio: bio,
57 });
58});
59
60export default router;
Note: See TracBrowser for help on using the repository browser.