const express = require('express'); const path = require('path'); const fs = require('fs'); require('./db'); const app = express(); app.use(express.json()); // ── API ─────────────────────────────────────────────────────────────────────── app.use('/api/auth', require('./routes/auth')); app.use('/api/admin', require('./routes/admin')); app.use('/api/calendar', require('./routes/calendar')); app.use('/api/nachrichten', require('./routes/nachrichten')); app.use('/api/dashboard', require('./routes/dashboard')); app.use('/api/system', require('./routes/system')); // Tool-Routen automatisch laden const toolsDir = path.join(__dirname, 'tools'); fs.readdirSync(toolsDir, { withFileTypes: true }) .filter(d => d.isDirectory()) .forEach(d => { const routeFile = path.join(toolsDir, d.name, 'routes.js'); if (fs.existsSync(routeFile)) { app.use(`/api/tools/${d.name}`, require(routeFile)); console.log(` 🔧 Tool geladen: ${d.name}`); } }); // ── Frontend ────────────────────────────────────────────────────────────────── const PUBLIC = path.join(__dirname, '../public'); app.get('/manifest.json', (_req, res) => { res.setHeader('Content-Type', 'application/manifest+json'); res.setHeader('Cache-Control', 'no-cache'); res.sendFile(path.join(PUBLIC, 'manifest.json')); }); app.get('/sw.js', (_req, res) => { res.setHeader('Content-Type', 'application/javascript'); res.setHeader('Service-Worker-Allowed', '/'); res.setHeader('Cache-Control', 'no-cache'); res.sendFile(path.join(PUBLIC, 'sw.js')); }); app.use(express.static(PUBLIC)); app.get('*', (_req, res) => res.sendFile(path.join(PUBLIC, 'index.html'))); app.listen(4000, () => console.log('🚀 Dicken Dock läuft auf Port 4000'));