Skip to content
Snippets Groups Projects
Commit 7b1730a4 authored by alec.schmidt's avatar alec.schmidt
Browse files

refactor table names in db

parent e62f95ab
Branches
No related tags found
No related merge requests found
No preview for this file type
PRAGMA foreign_keys = on;
.mode json
CREATE TABLE users (
CREATE TABLE Users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT,
admin BOOLEAN
);
CREATE TABLE questions (
CREATE TABLE Questions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
question TEXT UNIQUE,
category TEXT,
CONSTRAINT FK_category FOREIGN KEY (category) REFERENCES category(title) ON DELETE CASCADE
CONSTRAINT FK_category FOREIGN KEY (category) REFERENCES Categories(title) ON DELETE CASCADE
);
CREATE TABLE category (
CREATE TABLE Categories (
title TEXT PRIMARY KEY UNIQUE
);
CREATE TABLE answer (
CREATE TABLE Answers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
text_answer TEXT,
id_question INTEGER,
correct BOOLEAN,
CONSTRAINT FK_question FOREIGN KEY (id_question) REFERENCES questions(id) ON DELETE CASCADE
CONSTRAINT FK_question FOREIGN KEY (id_question) REFERENCES Questions(id) ON DELETE CASCADE
);
CREATE TABLE room (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE,
);
INSERT INTO users (username, password, admin)
INSERT INTO Users (username, password, admin)
VALUES ('alec', 'alec', true);
INSERT INTO category (title)
INSERT INTO Categories (title)
VALUES ('Histoire'), ('Géographie');
......
......@@ -46,13 +46,13 @@ class DBHandler {
else
throw JSON.stringify({message: "Username does not exists"});
if (okay)
return await asyncdb.get("SELECT id, username, admin FROM users WHERE username='" + user.username + "'")
return await asyncdb.get("SELECT id, username, admin FROM Users WHERE username='" + user.username + "'")
else
throw JSON.stringify({message: "Incorrect Password"});
}
async verifyUsernameExistence(username:string) : Promise<boolean> {
const usernameInDB = await asyncdb.all<User_t>("SELECT username FROM users WHERE username='" + username + "'")
const usernameInDB = await asyncdb.all<User_t>("SELECT username FROM Users WHERE username='" + username + "'")
if (usernameInDB.length == 0)
return false;
......@@ -68,19 +68,19 @@ class DBHandler {
}
async comparePassword(user: User_t) : Promise<boolean> {
const query = "SELECT password, admin FROM users WHERE username='"+ user.username + "'";
const query = "SELECT password, admin FROM Users WHERE username='"+ user.username + "'";
const password = await asyncdb.all<User_t>(query)
return (password[0].password == user.password);
}
async getUserById(id: number) : Promise<User_t> {
const query = "SELECT username, password, admin FROM users WHERE id="+id;
const query = "SELECT username, password, admin FROM Users WHERE id="+id;
const user = await asyncdb.get<User_t>(query);
return user;
}
async getUsers(res:express.Response) {
const query = "SELECT id, username, admin FROM users";
const query = "SELECT id, username, admin FROM Users";
asyncdb.all(query)
.then(result => {
res.status(StatusCodes.OK).json(result).end()}
......@@ -94,7 +94,7 @@ class DBHandler {
if (a.admin === undefined)
a.admin = false;
const query = "INSERT INTO users (username, password, admin) \
const query = "INSERT INTO Users (username, password, admin) \
VALUES ('" + a.username + "','" + a.password + "'," + a.admin +")";
asyncdb.all(query)
......@@ -105,7 +105,7 @@ class DBHandler {
async updateUser(req:express.Request, res:express.Response) {
const a = req.body as User_t;
const request = "UPDATE users \
const request = "UPDATE Users \
SET username = '"+ a.username + "', admin =" + a.admin + " WHERE id = " + req.params.id;
asyncdb.all(request)
......@@ -114,7 +114,7 @@ class DBHandler {
}
async deleteUser(req:express.Request, res:express.Response) {
asyncdb.all("DELETE FROM users WHERE id = " + req.params.id)
asyncdb.all("DELETE FROM Users WHERE id = " + req.params.id)
.then(() => res.status(StatusCodes.OK).end())
.catch(err => console.log(err));
}
......@@ -122,7 +122,7 @@ class DBHandler {
async postQuestion(req:express.Request, res:express.Response) {
const a = req.body as Question_t;
const insert_question = "INSERT INTO questions (question, category) VALUES ('"+ a.question +"', '"+ a.category +"')";
const insert_question = "INSERT INTO Questions (question, category) VALUES ('"+ a.question +"', '"+ a.category +"')";
asyncdb.all(insert_question)
.then(() => res.status(StatusCodes.OK).end())
......@@ -133,11 +133,11 @@ class DBHandler {
const id = req.params.id;
if (id === undefined) {
var query = "SELECT * FROM questions";
var query = "SELECT * FROM Questions";
var questions = await asyncdb.all(query);
}
else {
query = "SELECT * FROM questions WHERE id =" + id;
query = "SELECT * FROM Questions WHERE id =" + id;
questions = await asyncdb.get(query);
}
......@@ -146,7 +146,7 @@ class DBHandler {
async updateQuestion(req:express.Request, res:express.Response){
const a = req.body as Question_t;
const request = "UPDATE questions \
const request = "UPDATE Questions \
SET question='"+ a.question +"', category='"+ a.category +"' \
WHERE id=" + req.params.id;
......@@ -158,20 +158,20 @@ class DBHandler {
async deleteQuestion(req:express.Request, res:express.Response) {
const a = req.body as Question_t;
asyncdb.all("DELETE FROM questions WHERE id =" + req.params.id)
asyncdb.all("DELETE FROM Questions WHERE id =" + req.params.id)
.then(() => res.status(StatusCodes.OK).end())
.catch(e => console.log(e));
}
async getCategories(req:express.Request, res:express.Response) {
asyncdb.all("SELECT * FROM category")
asyncdb.all("SELECT * FROM Categories")
.then(result => res.status(StatusCodes.OK).json(result).end())
.catch(e => console.log(e));
}
async postCategory(req:express.Request, res:express.Response) {
const a = req.body as Category_t;
const request = "INSERT INTO Category VALUES ('" + a.category + "');"
const request = "INSERT INTO Categories VALUES ('" + a.category + "');"
asyncdb.all(request)
.then(() => res.status(StatusCodes.OK).end())
......@@ -180,7 +180,7 @@ class DBHandler {
async deleteCategory(req:express.Request, res:express.Response) {
const category = req.params.category;
const request = "DELETE FROM category WHERE title = '" + category + "'";
const request = "DELETE FROM Categories WHERE title = '" + category + "'";
asyncdb.all(request)
.then(() => res.status(StatusCodes.OK).end())
.catch(e => console.log(e));
......@@ -189,7 +189,7 @@ class DBHandler {
async getAnwsers(req:express.Request, res:express.Response) {
const question_id = req.params.questionId;
const query = "SELECT * FROM answer WHERE id_question=" + question_id;
const query = "SELECT * FROM Answers WHERE id_question=" + question_id;
asyncdb.all(query)
.then(ans => res.status(StatusCodes.OK).json(ans))
......@@ -198,7 +198,7 @@ class DBHandler {
async postAnwsers(req:express.Request, res:express.Response) {
const answer = req.body as Answer_t;
const query = "INSERT INTO answer (text_answer, id_question, correct) \
const query = "INSERT INTO Answers (text_answer, id_question, correct) \
VALUES ('" + answer.text_answer + "', " + answer.id_question + ", " + answer.correct + ")";
asyncdb.all(query)
......@@ -206,7 +206,7 @@ class DBHandler {
}
async deleteAnswer(req:express.Request, res:express.Response) {
const query = "DELETE from answer WHERE id=" + req.params.id;
const query = "DELETE from Answers WHERE id=" + req.params.id;
asyncdb.all(query)
.then(() => res.status(StatusCodes.OK).end())
......@@ -214,7 +214,7 @@ class DBHandler {
async updateAnswer(req:express.Request, res:express.Response) {
const a = req.body as Answer_t;
const request = "UPDATE answer \
const request = "UPDATE Answers \
SET text_answer='"+ a.text_answer +"', correct="+ a.correct + " \
WHERE id=" + req.params.id;
......@@ -225,13 +225,13 @@ class DBHandler {
}
async getQuestionsForGame() {
const query = "SELECT * FROM questions ORDER BY RANDOM() LIMIT 10;";
const query = "SELECT * FROM Questions ORDER BY RANDOM() LIMIT 10;";
let questions = await asyncdb.all(query);
return questions;
}
async getAnswersForGame(question_id: number) {
const query = "SELECT * FROM answer WHERE id_question= " + question_id + " ORDER BY RANDOM();";
const query = "SELECT * FROM Answers WHERE id_question= " + question_id + " ORDER BY RANDOM();";
const answers = await asyncdb.all(query);
console.log(answers);
......
......@@ -41,8 +41,6 @@ class ServerIO extends IO.Server {
const token = socket.handshake.query.Authorization as string;
console.log(token);
var user: User_t = this.decodeToken(token);
logger.info(user.username + ` joined the game`);
......@@ -64,6 +62,7 @@ class ServerIO extends IO.Server {
var index: number = this.playerList.indexOf(user.username, 0);
delete this.scoreboard[user.username]
if (index != -1) {
this.playerList.splice(index, 1);
......@@ -73,8 +72,7 @@ class ServerIO extends IO.Server {
if (this.gameOngoing)
this.gameEnd();
socket.emit('Players Waiting', this.playerList.length)
socket.broadcast.emit('Players Waiting', this.playerList.length);
this.emit('Players Waiting', this.playerList.length);
})
socket.on('disconnect', _ => {
......@@ -139,8 +137,6 @@ class ServerIO extends IO.Server {
if (this.questions.length == 0)
return this.gameEnd()
console.log(this.scoreboard)
let currentQuestion = this.questions.pop()
this.emit("Question", currentQuestion.question);
......@@ -161,7 +157,7 @@ class ServerIO extends IO.Server {
this.playerList = [];
this.scoreboard = {};
this.emit('Players Waiting', this.playerList.length)
this.emit('Players Waiting', this.playerList.length);
this.gameOngoing = false;
}
......
# Application Web style Question pour un Champion
---
### Introduction
Dans le cadre des cours Architecture Web et Application Web, nous avons du créer un site web permettant à des joueurs de s'inscrire, puis de participer à des parties de jeu contre deux autres joueurs.
Le projet se sépare donc en trois parties distinctes :
- L'API REST du projet
- Le visuel du site
- Le système de jeu à l'aide de WebSockets.
Cette documentation va se porter sur ces parties du projet, en détaillant les aspects techniques ainsi que des requis pour pouvoir les lancer.
---
### API REST
L'API REST va être celle qui va faire le lien entre la base de données et les utilisateurs. Avec ses routes, on peut y effectuer toutes les actions du CRUD sur notre db.
##### Database
Pour ce projet, on avait commencé par garder les données "In Memory". Très vite, on a rencontré des problèmes majeurs, comme la persistence des données, ou simplement les actions sur celles-ci.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment