/** * Hub-hoofdpagina — alleen in hub-modus. In plaats van de primaire PrutFolio te * tonen, rendert '/' hier een bedrijfs-overview: de laatste posts van ALLE * gebruikers samengevat + een lijst van de PrutFolio's. * * In solo-modus doet dit niets (next()) en rendert posts.js de enige site. */ import express from 'express'; import db from '../config/database.js'; import { renderPage } from '../middleware/render.js'; import { getTenancy, getSetting } from '../services/SettingsService.js'; const router = express.Router(); router.get('/', (req, res, next) => { if (getTenancy() !== 'hub') return next(); // Als resolveSite een specifieke site adresseerde (/user/:slug of /sites/:slug), // is req.url naar '/' herschreven — dan NIET de overview tonen maar de site zelf // laten renderen door posts.js. siteUrlBase is dan gezet. if (res.locals.siteUrlBase) return next(); // Laatste gepubliceerde posts over álle sites heen. const posts = db.prepare(` SELECT p.title, p.slug, p.excerpt, p.published_at, p.created_at, p.cover_image_url, p.type, s.slug AS site_slug, s.title AS site_title, s.profile_photo AS site_photo, u.username AS author_username FROM posts p JOIN sites s ON s.id = p.site_id LEFT JOIN users u ON u.id = p.author_id WHERE p.status = 'published' ORDER BY COALESCE(p.published_at, p.created_at) DESC LIMIT 24 `).all(); // ALLE PrutFolio's (elke user, incl. de admin z'n eigen site) voor de roster. const artists = db.prepare(` SELECT s.slug, s.title, s.tagline, s.profile_photo, s.accent, (SELECT COUNT(*) FROM posts WHERE site_id = s.id AND status = 'published') AS post_count FROM sites s ORDER BY s.created_at ASC `).all(); // De hub-pagina is GENERIEK (van geen enkele user) — branding komt uit globale // instellingen die de admin in Beheer beheert, niet uit een site. const hub = { title: getSetting('hub_title') || 'Overzicht', tagline: getSetting('hub_tagline') || '', intro: getSetting('hub_intro') || '', heroImage: getSetting('hub_hero_image') || '', }; renderPage(req, res, 'pages/hub-home', { pageTitle: hub.title, socialDescr: hub.intro || hub.tagline || '', bodyClass: 'on-home on-hub', hub, artists, posts, }); }); export default router;