server_photo_s85js/server.js.ok
2026-08-11 08:45:04 +02:00

153 lines
4 KiB
Text

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}`);
});