diff --git a/backend.js b/backend.js index 14b64a8..6b4c28b 100644 --- a/backend.js +++ b/backend.js @@ -1,9 +1,7 @@ import sqlite3 from "sqlite3"; -import express from 'express'; -import { fileURLToPath } from 'url'; -import { dirname, join } from 'path'; - - +import express from "express"; +import { fileURLToPath } from "url"; +import { dirname, join } from "path"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); @@ -12,64 +10,97 @@ const app = express(); app.use(express.json()); 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"); - //datenbank inizalisierung -app.get('/:sessionId/:username', (req, res) => { - const {sessionId, username} = req.params; - - +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, + id INTEGER PRIMARY KEY AUTOINCREMENT, + user TEXT , ready BOOL, state BOOL )`); - db.run(`INSERT OR IGNORE INTO "${sessionId}" (user, ready, state) VALUES (?, ?, ?)`, - [username, 0, 0], + db.run(`CREATE TABLE IF NOT EXISTS sessionState ( + 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 - db.run(`UPDATE "${sessionId}" SET ready = false WHERE user = ?`, - [username], - ) - res.sendFile(join(__dirname, 'session', 'session.html')); + //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")); +}); +app.get("/:sessionId/:username/game", (req, res) => { + const { sessionId, username } = req.params; -}) + res.sendFile(join(__dirname, "game", "game.html")); +}); -app.get('/:sessionId/:username/game', (req, res) => { - const {sessionId, username} = req.params; +app.get("/api/:sessionId/:username/createImposter", (req, res) => { + 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) => { + db.all(`SELECT id FROM "${sessionId}"`, (err, row) => { if (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); }); }); - - -app.put(`/api/words/add`, (req,res) => { +app.put(`/api/words/add`, (req, res) => { const payload = req.body; - console.log(payload.word, payload.imposterWord) + console.log(payload.word, payload.imposterWord); db.serialize(() => { db.run(`CREATE TABLE IF NOT EXISTS words ( @@ -77,56 +108,58 @@ app.put(`/api/words/add`, (req,res) => { word 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], - function (err){ - if (err) { - console.error('inserted words error:', err); - return res.status(500).json({error: err.message}); - } - res.status(201).json({id: this.lastID}) - } - ) - }) -}) - - + function (err) { + if (err) { + console.error("inserted words error:", err); + return res.status(500).json({ error: err.message }); + } + res.status(201).json({ id: this.lastID }); + }, + ); + }); +}); //ready status updaten -app.put('/api/ready/:sessionId', (req,res) => { - const {sessionId} = req.params; +app.put("/api/ready/:sessionId", (req, res) => { + const { sessionId } = req.params; const payload = req.body; - db.get (`SELECT ready FROM "${sessionId}" WHERE user = ?`, + 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 = ?`, + 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}) - ) + res.status(200).json({ ready: false }), + ); } else { - db.run(`UPDATE "${sessionId}" SET ready = true WHERE user = ?`, + db.run( + `UPDATE "${sessionId}" SET ready = true WHERE 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, () => { - console.log('Server is running'); -}); \ No newline at end of file +app.listen(3000, () => { + console.log("Server is running"); +}); diff --git a/game/game.html b/game/game.html index 9ec2dde..6dcd5c8 100644 --- a/game/game.html +++ b/game/game.html @@ -1,11 +1,13 @@ + + game - + \ No newline at end of file diff --git a/game/game.js b/game/game.js index e69de29..c7f4ae1 100644 --- a/game/game.js +++ b/game/game.js @@ -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`); +} diff --git a/game/style.css b/game/style.css index e69de29..c5de623 100644 --- a/game/style.css +++ b/game/style.css @@ -0,0 +1,3 @@ +body { + background-color: #09161e; +} diff --git a/imposter.db b/imposter.db index 785856b..2f63e57 100644 Binary files a/imposter.db and b/imposter.db differ