Changeset 6351545 in Klonkt for src/routes


Ignore:
Timestamp:
06/14/2026 08:18:50 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
07775b7
Parents:
9e27d64
Message:

tenancy: runtime Solo/Hub mode + mode-aware /admin (Phase 1)

Admin can switch live between modes in Admin -> Settings:

  • solo: exactly one site (the primary/owner site), no /sites routing, leaner /admin.
  • hub: main site + /sites/:slug routing (company; /gebruikers + assignment flow = Phase 2).

Switching is non-destructive (hides only, deletes nothing).

  • app_settings (key/value singleton) + SettingsService (cached getTenancy/setTenancy).
  • resolveSite: solo pins to the primary site + disables /sites/:slug + host mapping.
  • /admin/settings (god-only) toggle; /admin dashboard rewritten, mode-aware.

Tested on the demo: solo/hub dashboard tiles, /sites routing per mode, toggle back/forth.

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

Location:
src/routes
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/admin.js

    r9e27d64 r6351545  
    99import { renderPage } from '../middleware/render.js';
    1010import { requireGod } from '../middleware/auth.js';
     11import { getTenancy } from '../services/SettingsService.js';
    1112
    1213const router = express.Router();
    1314
    1415router.get('/', requireGod, (req, res) => {
     16  const tenancy = getTenancy();
     17
     18  // De primaire/owner-site — in solo dé site, in hub de hoofdsite. Geeft de
     19  // "Uiterlijk"-tegel z'n edit-link.
     20  const primarySite = db.prepare(
     21    'SELECT slug, title FROM sites ORDER BY created_at ASC LIMIT 1'
     22  ).get() || null;
     23
    1524  const stats = {
    1625    users: db.prepare('SELECT COUNT(*) AS c FROM users').get().c,
     
    2231  };
    2332
    24   const sites = db.prepare(`
     33  // Sites/users-tabellen zijn alleen in hub relevant; in solo besparen we de query.
     34  const sites = tenancy === 'hub' ? db.prepare(`
    2535    SELECT s.slug, s.title, s.created_at, u.username AS owner_username
    2636    FROM sites s
     
    2838    ORDER BY s.created_at DESC
    2939    LIMIT 50
    30   `).all();
     40  `).all() : [];
    3141
    32   const users = db.prepare(`
     42  const users = tenancy === 'hub' ? db.prepare(`
    3343    SELECT username, email, role, created_at
    3444    FROM users
    3545    ORDER BY created_at DESC
    3646    LIMIT 50
    37   `).all();
     47  `).all() : [];
    3848
    3949  renderPage(req, res, 'pages/admin', {
    40     pageTitle: 'Admin',
     50    pageTitle: 'Beheer',
    4151    bodyClass: 'on-admin',
     52    tenancy,
     53    primarySite,
    4254    stats,
    4355    sites,
Note: See TracChangeset for help on using the changeset viewer.