require('dotenv').config(); const express = require('express'); const path = require('path'); const config = require('./api_v1/config'); const db = require('./db/knex'); const { jwtMiddleware } = require('./middleware/jwt'); const staticMiddleware = require('./middleware/static'); const hlsMiddleware = require('./middleware/hls'); const authRouter = require('./routes/auth'); const configRouter = require('./routes/config'); const scanRouter = require('./routes/scan'); const autoScanRouter = require('./routes/autoScan'); const shareRouter = require('./routes/share'); const photosRouter = require('./routes/photos'); const activitiesRouter = require('./routes/activities'); const scanActivitiesRouter = require('./routes/scanActivities'); const server = express(); // statici pubblici server.use(staticMiddleware); server.use('/hls', hlsMiddleware); // body parser server.use(express.json()); server.use(express.urlencoded({ extended: true })); // login pubblico server.get('/login', (req, res) => { res.sendFile(path.join(__dirname, 'public/login.html')); }); // rotte pubbliche server.use('/auth', authRouter); server.use('/config', configRouter); server.use('/share', shareRouter); // JWT per tutto il resto server.use( /^(?!\/auth)(?!\/login)(?!\/login.html)(?!\/css)(?!\/js)(?!\/img)(?!\/fonts)(?!\/favicon).*$/, jwtMiddleware ); // ===================================================== // ADMIN — RESET COMPLETO DB ATTIVITÀ // Chiamato dal frontend: POST /initActivitiesDB // ===================================================== server.post('/initActivitiesDB', async (req, res) => { try { const loggedUser = req.user?.name; if (loggedUser !== 'Admin') { return res.status(403).json({ ok: false, error: 'Forbidden' }); } console.log(`🧹 [ADMIN] Reset completo DB attività richiesto da=${loggedUser}`); await db('activities').del(); await db('deleted_hard_activities').del(); await db('sync_done_activities').del(); res.json({ ok: true, message: 'DB attività svuotato' }); } catch (err) { console.error('❌ Errore POST /initActivitiesDB:', err); res.status(500).json({ ok: false, error: err.message }); } }); // ===================================================== // ADMIN — RESET DB ATTIVITÀ PER UTENTE // Chiamato dal frontend: POST /initActivitiesDBuser // Accetta user da body oppure query. // ===================================================== server.post('/initActivitiesDBuser', async (req, res) => { try { const loggedUser = req.user?.name; if (loggedUser !== 'Admin') { return res.status(403).json({ ok: false, error: 'Forbidden' }); } const targetUser = req.body?.user || req.query?.user || req.body?.name || req.query?.name; if (!targetUser) { return res.status(400).json({ ok: false, error: 'Missing user' }); } console.log(`🧹 [ADMIN] Reset DB attività user=${targetUser} richiesto da=${loggedUser}`); await db('activities') .where({ user: targetUser }) .del(); await db('deleted_hard_activities') .where({ user: targetUser }) .del(); // sync_done_activities non ha colonna user nel tuo schema, // quindi lo svuotiamo per forzare nuova sync pulita. await db('sync_done_activities').del(); res.json({ ok: true, user: targetUser, message: `DB attività svuotato per user=${targetUser}` }); } catch (err) { console.error('❌ Errore POST /initActivitiesDBuser:', err); res.status(500).json({ ok: false, error: err.message }); } }); // rotte protette server.use('/photos', photosRouter); server.use('/activities', activitiesRouter); server.use('/scan', scanRouter); server.use('/scanActivities', scanActivitiesRouter); server.use('/api_v1/auto_scan', autoScanRouter); // home server.get('/', (req, res) => { res.sendFile(path.resolve('public/index.html')); }); server.listen(config.PORT, () => { console.log(`Server running on port ${config.PORT}`); });