source: Klonkt/src/routes/admin.js@ 76e9cfd

main
Last change on this file since 76e9cfd was 7bc636b, checked in by Robin <robin@…>, 4 months ago

Initial commit — PrutFolio v1 source (pulled from Hetzner /srv/prutfolio)

  • Property mode set to 100644
File size: 1.3 KB
Line 
1/**
2 * Admin routes — Phase B stub.
3 * Read-only god-only overview of users / sites / posts.
4 * Real admin dashboard (create/delete sites, manage users, etc.) comes later.
5 */
6
7import express from 'express';
8import db from '../config/database.js';
9import { renderPage } from '../middleware/render.js';
10import { requireGod } from '../middleware/auth.js';
11
12const router = express.Router();
13
14router.get('/', requireGod, (req, res) => {
15 const stats = {
16 users: db.prepare('SELECT COUNT(*) AS c FROM users').get().c,
17 sites: db.prepare('SELECT COUNT(*) AS c FROM sites').get().c,
18 posts: db.prepare('SELECT COUNT(*) AS c FROM posts').get().c,
19 published: db.prepare(
20 "SELECT COUNT(*) AS c FROM posts WHERE status = 'published'"
21 ).get().c,
22 };
23
24 const sites = db.prepare(`
25 SELECT s.slug, s.title, s.created_at, u.username AS owner_username
26 FROM sites s
27 LEFT JOIN users u ON u.id = s.owner_id
28 ORDER BY s.created_at DESC
29 LIMIT 50
30 `).all();
31
32 const users = db.prepare(`
33 SELECT username, email, role, created_at
34 FROM users
35 ORDER BY created_at DESC
36 LIMIT 50
37 `).all();
38
39 renderPage(req, res, 'pages/admin', {
40 pageTitle: 'Admin',
41 bodyClass: 'on-admin',
42 stats,
43 sites,
44 users,
45 });
46});
47
48export default router;
Note: See TracBrowser for help on using the repository browser.