Files
imposter/backend.js
2025-12-04 21:21:30 +01:00

100 lines
2.1 KiB
JavaScript

import sqlite3 from "sqlite3";
import express from 'express';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const app = express();
app.use(express.json());
app.use(express.static(__dirname));
app.use(express.static(join(__dirname, 'session')));
const db = new sqlite3.Database("imposter.db");
//datenbank inizalisierung
app.get('/:sessionId/:username', (req, res) => {
const {sessionId, username} = req.params;
db.serialize(() => {
db.run(`CREATE TABLE IF NOT EXISTS "${sessionId}" (
user TEXT PRIMARY KEY,
ready BOOL,
state BOOL
)`);
db.run(`INSERT OR IGNORE INTO "${sessionId}" (user, ready, state) VALUES (?, ?, ?)`,
[username, 0, 0],
);
});
//beim neuladen der seite ready auf false setzen
db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`,
[username],
)
res.sendFile(join(__dirname, 'session', 'session.html'));
})
//liste an user zurückgeben
app.get('/api/user/:sessionId', (req,res) => {
const {sessionId} = req.params;
db.all(`SELECT user, ready FROM "${sessionId}"`, (err, rows) => {
if (err) {
console.error(err);
return res.status(500).json({error:err.message});
}
res.json(rows);
});
});
//ready status updaten
app.put('/api/ready/:sessionId', (req,res) => {
const {sessionId} = req.params;
const payload = req.body;
db.get (`SELECT ready FROM "${sessionId}" WHERE user = ?`,
[payload.user],
(err, row) => {
if (err) {
console.error(err);
}
console.log(row?.ready)
if (row?.ready == 1) {
db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`,
[payload.user],
res.status(200).json({ready: false})
)
} else {
db.run(`UPDATE "${sessionId}" SET ready = true WHERE user = ?`,
[payload.user],
res.status(200).json({ready: true})
)
}
}
)
})
app.listen(3000, () => {
console.log('Server is running');
});