imposter creation

This commit is contained in:
adrian
2025-12-05 19:21:38 +01:00
parent 93aca73e55
commit bcc70458ae
5 changed files with 132 additions and 73 deletions

View File

@ -1,9 +1,7 @@
import sqlite3 from "sqlite3"; import sqlite3 from "sqlite3";
import express from 'express'; import express from "express";
import { fileURLToPath } from 'url'; import { fileURLToPath } from "url";
import { dirname, join } from 'path'; import { dirname, join } from "path";
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename); const __dirname = dirname(__filename);
@ -12,64 +10,97 @@ const app = express();
app.use(express.json()); app.use(express.json());
app.use(express.static(__dirname)); app.use(express.static(__dirname));
app.use(express.static(join(__dirname, 'session'))); app.use(express.static(join(__dirname, "session")));
const db = new sqlite3.Database("imposter.db"); const db = new sqlite3.Database("imposter.db");
//datenbank inizalisierung //datenbank inizalisierung
app.get('/:sessionId/:username', (req, res) => { app.get("/:sessionId/:username", (req, res) => {
const {sessionId, username} = req.params; const { sessionId, username } = req.params;
db.serialize(() => { db.serialize(() => {
db.run(`CREATE TABLE IF NOT EXISTS "${sessionId}" ( db.run(`CREATE TABLE IF NOT EXISTS "${sessionId}" (
user TEXT PRIMARY KEY, id INTEGER PRIMARY KEY AUTOINCREMENT,
user TEXT ,
ready BOOL, ready BOOL,
state BOOL state BOOL
)`); )`);
db.run(`INSERT OR IGNORE INTO "${sessionId}" (user, ready, state) VALUES (?, ?, ?)`, db.run(`CREATE TABLE IF NOT EXISTS sessionState (
[username, 0, 0], sessionId TEXT PRIMARY KEY,
state BOOL
)`);
db.run(
`INSERT OR IGNORE INTO sessionState (sessionId, state) VALUES (?,?)`,
[sessionId, 0],
);
db.get(
`SELECT id FROM "${sessionId}" WHERE user = ?`,
[username],
(err, rows) => {
if (err) {
console.error(err);
}
if (rows) {
console.log("user exists");
} else {
db.run(
`INSERT OR IGNORE INTO "${sessionId}" (user, ready, state) VALUES (?, ?, ?)`,
[username, 0, 0],
);
}
},
); );
}); });
//beim neuladen der seite ready auf false setzen //beim neuladen der seite ready auf false setzen
db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`, db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`, [username]);
[username], res.sendFile(join(__dirname, "session", "session.html"));
) });
res.sendFile(join(__dirname, 'session', 'session.html'));
app.get("/:sessionId/:username/game", (req, res) => {
const { sessionId, username } = req.params;
res.sendFile(join(__dirname, "game", "game.html"));
});
}) app.get("/api/:sessionId/:username/createImposter", (req, res) => {
const { sessionId, username } = req.params;
app.get('/:sessionId/:username/game', (req, res) => { db.all(`SELECT id FROM "${sessionId}"`, (err, row) => {
const {sessionId, username} = req.params;
res.sendFile(join (__dirname, 'game', 'game.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) { if (err) {
console.error(err); console.error(err);
return res.status(500).json({error:err.message}); res.status(500).send("DB-Fehler");
return;
}
console.log(row.length);
createImposter(sessionId, row.length);
});
});
function createImposter(sessionId, userQty) {
const ImposterId = Math.floor(Math.random() * userQty) + 1;
db.run(`UPDATE "${sessionId}" state = 1 WHERE id = ? `[ImposterId]);
}
//liste an user zurückgeben
app.get("/api/user/:sessionId", (req, res) => {
const { sessionId } = req.params;
db.all(`SELECT user, ready, state FROM "${sessionId}"`, (err, rows) => {
if (err) {
console.error(err);
return res.status(500).json({ error: err.message });
} }
res.json(rows); res.json(rows);
}); });
}); });
app.put(`/api/words/add`, (req, res) => {
app.put(`/api/words/add`, (req,res) => {
const payload = req.body; const payload = req.body;
console.log(payload.word, payload.imposterWord) console.log(payload.word, payload.imposterWord);
db.serialize(() => { db.serialize(() => {
db.run(`CREATE TABLE IF NOT EXISTS words ( db.run(`CREATE TABLE IF NOT EXISTS words (
@ -78,55 +109,57 @@ app.put(`/api/words/add`, (req,res) => {
imposterWord TEXT NOT NULL imposterWord TEXT NOT NULL
)`); )`);
db.run(`INSERT INTO words (word, imposterWord) VALUES (?, ?)`, db.run(
`INSERT INTO words (word, imposterWord) VALUES (?, ?)`,
[payload.word, payload.imposterWord], [payload.word, payload.imposterWord],
function (err){ function (err) {
if (err) { if (err) {
console.error('inserted words error:', err); console.error("inserted words error:", err);
return res.status(500).json({error: err.message}); return res.status(500).json({ error: err.message });
} }
res.status(201).json({id: this.lastID}) res.status(201).json({ id: this.lastID });
} },
) );
}) });
}) });
//ready status updaten //ready status updaten
app.put('/api/ready/:sessionId', (req,res) => { app.put("/api/ready/:sessionId", (req, res) => {
const {sessionId} = req.params; const { sessionId } = req.params;
const payload = req.body; const payload = req.body;
db.get (`SELECT ready FROM "${sessionId}" WHERE user = ?`, db.get(
`SELECT ready FROM "${sessionId}" WHERE user = ?`,
[payload.user], [payload.user],
(err, row) => { (err, row) => {
if (err) { if (err) {
console.error(err); console.error(err);
} }
console.log(row?.ready) console.log(row?.ready);
if (row?.ready == 1) { if (row?.ready == 1) {
db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`, db.run(
`UPDATE "${sessionId}" SET ready = false WHERE user = ?`,
[payload.user], [payload.user],
res.status(200).json({ready: false}) res.status(200).json({ ready: false }),
) );
} else { } else {
db.run(`UPDATE "${sessionId}" SET ready = true WHERE user = ?`, db.run(
`UPDATE "${sessionId}" SET ready = true WHERE user = ?`,
[payload.user], [payload.user],
res.status(200).json({ready: true}) res.status(200).json({ ready: true }),
) );
} }
} },
);
) });
app.get("/api/:sessionId/:username/state", (req, res) => {
const { sessionId, username } = req.params;
const payload = req.body;
}) db.get();
});
app.listen(3000, () => { app.listen(3000, () => {
console.log('Server is running'); console.log("Server is running");
}); });

View File

@ -1,11 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<base href="/game/">
<link rel="stylesheet" href="style.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>game</title> <title>game</title>
</head> </head>
<body> <body>
<script src="./game.js" ></script>
</body> </body>
</html> </html>

View File

@ -0,0 +1,21 @@
const parts = window.location.pathname.split("/").filter(Boolean);
const sessionId = parts[0] ?? null;
const username = parts[1] ?? null;
async function getState() {
const res = await fetch(`/api/${sessionId}/${username}/state`);
const state = await res.json();
}
async function show_user() {
const res = await fetch(`/api/user/${sessionId}`);
const users = await res.json();
const allUsers = users.map((u) => u.state);
if (allUsers.every((v) => v === 0)) {
console.log("test");
}
}
async function createImposter() {
const res = await fetch(`/api/${sessionId}/${username}/createImposter`);
}

View File

@ -0,0 +1,3 @@
body {
background-color: #09161e;
}

Binary file not shown.