Merge branch 'master' of https://codefirst.iut.uca.fr/git/Crypteam/Cryptid into deduc2
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
commit
4c5715ac40
@ -1,22 +1,32 @@
|
||||
FROM node:14
|
||||
# Utilisez l'image Node.js LTS comme base
|
||||
FROM node:14-alpine
|
||||
|
||||
# Définissez le répertoire de travail dans le conteneur
|
||||
WORKDIR /app
|
||||
|
||||
# Copiez le package.json et le package-lock.json dans le conteneur
|
||||
COPY package*.json ./
|
||||
|
||||
# Installez les dépendances du projet
|
||||
RUN npm install
|
||||
|
||||
# Copiez le reste des fichiers de l'application dans le conteneur
|
||||
COPY . .
|
||||
|
||||
# Construisez l'application React
|
||||
RUN npm run build
|
||||
|
||||
EXPOSE 80
|
||||
#
|
||||
# Installez express
|
||||
RUN npm install express
|
||||
# Utilisez l'image légère Nginx pour servir l'application construite
|
||||
FROM nginx:alpine
|
||||
|
||||
# Copiez les fichiers construits de l'étape précédente dans le répertoire de travail de Nginx
|
||||
COPY --from=0 /app/build /usr/share/nginx/html
|
||||
|
||||
# Copiez le script serveur personnalisé
|
||||
COPY server.js .
|
||||
# Copiez la configuration Nginx personnalisée
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# Exposez le port 80 pour que l'application puisse être accessible
|
||||
EXPOSE 80
|
||||
|
||||
# Commande pour démarrer le serveur personnalisé
|
||||
CMD ["node", "server.js"]
|
||||
# Définissez ENTRYPOINT pour démarrer Nginx lorsque le conteneur est lancé
|
||||
ENTRYPOINT ["nginx", "-g", "daemon off;"]
|
||||
|
@ -1,9 +0,0 @@
|
||||
<FilesMatch "\.css$">
|
||||
ForceType text/css
|
||||
Header set Content-Type "text/css"
|
||||
</FilesMatch>
|
||||
|
||||
<FilesMatch "\.js$">
|
||||
ForceType application/javascript
|
||||
Header set Content-Type "application/javascript"
|
||||
</FilesMatch>
|
@ -0,0 +1,15 @@
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
error_page 404 /index.html;
|
||||
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
}
|
||||
}
|
@ -0,0 +1,181 @@
|
||||
const bcrypt = require('bcrypt');
|
||||
const path = require('path');
|
||||
const DatabaseService = require(path.resolve(__dirname, '../services/DatabaseService.js'));
|
||||
const UserService = require(path.resolve(__dirname, '../services/UserService.js'));
|
||||
|
||||
class AuthController {
|
||||
static async signUp(req, res) {
|
||||
const databaseService = new DatabaseService();
|
||||
const pseudo = req.body.pseudo;
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try {
|
||||
await databaseService.connect();
|
||||
|
||||
// Vérifier que le pseudo n'existe pas déjà
|
||||
const verif = await databaseService.getUserByPseudo(pseudo);
|
||||
if (verif) {
|
||||
res.status(400).json({ error: 'Le pseudo est déjà utilisé.' });
|
||||
return;
|
||||
}
|
||||
|
||||
// Créer un nouvel utilisateur
|
||||
const currentUser = await UserService.createUser(req.body);
|
||||
const insertedUser = await databaseService.insertUser(currentUser);
|
||||
|
||||
const user = await databaseService.getUserByPseudo(pseudo);
|
||||
|
||||
console.log("[" + hour + ":" + minutes + "] " + user.pseudo + " have been registered.");
|
||||
res.status(201).json({ message: 'Inscription réussie', user: insertedUser});
|
||||
}
|
||||
catch (error) {
|
||||
// Gérer les erreurs
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de l\'inscription.' });
|
||||
}
|
||||
finally {
|
||||
await databaseService.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async signIn(req, res) {
|
||||
const databaseService = new DatabaseService();
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try{
|
||||
await databaseService.connect();
|
||||
|
||||
// Vérifier que le pseudo existe
|
||||
const pseudo = req.body.pseudo;
|
||||
const user = await databaseService.getUserByPseudo(pseudo);
|
||||
if (!user) {
|
||||
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
|
||||
return;
|
||||
}
|
||||
|
||||
// Vérifier que le mot de passe est correct
|
||||
const password = req.body.password;
|
||||
const validPassword = await bcrypt.compare(password, user.password);
|
||||
if (!validPassword) {
|
||||
res.status(400).json({ error: 'Le mot de passe est incorrect.' });
|
||||
return;
|
||||
}
|
||||
|
||||
// Stocker l'utilisateur dans la session)
|
||||
req.session.user = user;
|
||||
|
||||
// Envoyer une réponse réussie
|
||||
console.log("[" + hour + ":" + minutes + "] " + user.pseudo + " have been connected.");
|
||||
res.status(200).json({ message: 'Connexion réussie', user: user });
|
||||
}
|
||||
catch(error){
|
||||
// Gérer les erreurs
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la connexion.' });
|
||||
}
|
||||
finally{
|
||||
await databaseService.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async logout(req, res) {
|
||||
const pseudo = req.session.user.pseudo;
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
// Détruire la session pour déconnecter l'utilisateur
|
||||
req.session.destroy((err) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
res.status(500).json({ error: 'Erreur lors de la déconnexion.' });
|
||||
} else {
|
||||
console.log("[" + hour + ":" + minutes + "] " + pseudo + " have been disconnected.");
|
||||
res.status(200).json({ message: 'Déconnexion réussie' });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static async delAccount(req, res){
|
||||
const db = new DatabaseService();
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
|
||||
if(!user){
|
||||
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.deleteUser(user.idUser);
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la supression du compte.' });
|
||||
}
|
||||
finally{
|
||||
db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async validatePassword(req, res){
|
||||
const db = new DatabaseService();
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
if(!user){
|
||||
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
|
||||
return;
|
||||
}
|
||||
|
||||
const password = req.body.password;
|
||||
const validPassword = await bcrypt.compare(password, user.password);
|
||||
if(!validPassword){
|
||||
res.status(400).json({ error: 'Le mot de passe est incorrect.' });
|
||||
return;
|
||||
}
|
||||
|
||||
res.status(200).json({ message: 'Mot de passe correct.' });
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la vérification du mot de passe.' });
|
||||
}
|
||||
finally{
|
||||
db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async updatePassword(req, res){
|
||||
const db = new DatabaseService();
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
if(!user){
|
||||
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
|
||||
return;
|
||||
}
|
||||
|
||||
const hashedPassword = await bcrypt.hash(req.body.newPassword, 10);
|
||||
|
||||
await db.updatePassword(user.idUser, hashedPassword);
|
||||
|
||||
res.status(200).json({ message: 'Mot de passe mis à jour.' });
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la mise à jour du mot de passe.' });
|
||||
}
|
||||
finally{
|
||||
db.disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = AuthController;
|
@ -0,0 +1,237 @@
|
||||
const path = require('path');
|
||||
const DatabaseService = require(path.resolve(__dirname, '../services/DatabaseService'));
|
||||
|
||||
const ENIGME_FACILE = "enigme_facile";
|
||||
const ENIGME_MOYEN = "enigme_moyenne";
|
||||
const ENIGME_DIFFICILE = "enigme_difficile";
|
||||
|
||||
class SessionController {
|
||||
static async getUserInformation(req, res) {
|
||||
const db = new DatabaseService();
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
if (!req.session.user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
// Récupérer les stats mastermind de l'utilisateur
|
||||
let nbGamesMM = await db.getNbGamesMastermindByUserId(req.session.user.idUser);
|
||||
nbGamesMM = nbGamesMM.nbGames || 0;
|
||||
let bestScoreMM = await db.getBestScoreMastermindByUserId(req.session.user.idUser);
|
||||
bestScoreMM = bestScoreMM.bestScore || 0;
|
||||
let avgNbTryMM = await db.getAvgNbTryMastermindByUserId(req.session.user.idUser);
|
||||
avgNbTryMM = avgNbTryMM.avgNbTry || 0;
|
||||
|
||||
req.session.user.mastermindStats = {nbGames: nbGamesMM,
|
||||
bestScore: bestScoreMM,
|
||||
avgNbTry: avgNbTryMM};
|
||||
|
||||
// Récupérer les stats enigme facile
|
||||
let nbGamesEF = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
|
||||
nbGamesEF = nbGamesEF.nbGames || 0;
|
||||
let nbWinsEF = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
|
||||
nbWinsEF = nbWinsEF.nbWins || 0;
|
||||
let ratioEF = (nbWinsEF.nbWins / nbGamesEF.nbGames) * 100 || 0;
|
||||
let bestTimeEF = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
|
||||
bestTimeEF = bestTimeEF.bestTime || 0;
|
||||
let avgTimeEF = await db.getAvgTimeEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
|
||||
avgTimeEF = avgTimeEF.avgTime || 0;
|
||||
|
||||
req.session.user.easyEnigmaStats = {nbGames: nbGamesEF,
|
||||
nbWins: nbWinsEF,
|
||||
ratio: ratioEF,
|
||||
bestTime: bestTimeEF,
|
||||
avgTime: avgTimeEF};
|
||||
|
||||
// Récupérer les stats enigme moyenne
|
||||
let nbGamesEM = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN);
|
||||
nbGamesEM = nbGamesEM.nbGames || 0;
|
||||
let bestScoreEM = await db.getBestScoreEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN);
|
||||
bestScoreEM = bestScoreEM.bestScore || 0;
|
||||
let avgNbTryEM = await db.getAvgScoreEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN);
|
||||
avgNbTryEM = avgNbTryEM.avgScore || 0;
|
||||
|
||||
req.session.user.mediumEnigmaStats = {nbGames: nbGamesEM,
|
||||
bestScore: bestScoreEM,
|
||||
avgNbTry: avgNbTryEM};
|
||||
|
||||
// Récupérer les stats enigme difficile
|
||||
let nbGamesED = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
|
||||
nbGamesED = nbGamesED.nbGames || 0;
|
||||
let nbWinsED = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
|
||||
nbWinsED = nbWinsED.nbWins || 0;
|
||||
let ratioED = (nbWinsED.nbWins / nbGamesED.nbGames) * 100 || 0;
|
||||
let bestTimeED = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
|
||||
bestTimeED = bestTimeED.bestTime || 0;
|
||||
let avgTimeED = await db.getAvgTimeEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
|
||||
avgTimeED = avgTimeED.avgTime || 0;
|
||||
|
||||
req.session.user.hardEnigmaStats = {nbGames: nbGamesED,
|
||||
nbWins: nbWinsED,
|
||||
ratio: ratioED,
|
||||
bestTime: bestTimeED,
|
||||
avgTime: avgTimeED};
|
||||
|
||||
// Récupérer les stats en ligne de l'utilisateur
|
||||
let nbGamesOL = await db.getNbGamesOnlineByUserId(req.session.user.idUser);
|
||||
nbGamesOL = nbGamesOL.nbGames || 0;
|
||||
let nbWinsOL = await db.getNbWinsOnlineByUserId(req.session.user.idUser);
|
||||
nbWinsOL = nbWinsOL.nbWins || 0;
|
||||
let ratioOL = (nbWinsOL.nbWins / nbGamesOL.nbGames) * 100 || 0;
|
||||
req.session.user.onlineStats = {nbGames: nbGamesOL,
|
||||
nbWins: nbWinsOL,
|
||||
ratio: ratioOL};
|
||||
|
||||
|
||||
console.log("[" + hour + ":" + minutes + "] " + req.session.user.pseudo + " have a session.");
|
||||
res.status(200).json({ user: req.session.user });
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la récupération de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async UpdatePseudo(req, res){
|
||||
const db = new DatabaseService();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
console.log("utilisateur" + user.idUser + " pseudo" + user.pseudo)
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.updatePseudo(user.idUser, req.body.newPseudo); //* update
|
||||
|
||||
const updatedUser = await db.getUserByPseudo(req.body.newPseudo);
|
||||
console.log("updaetdutilisateur" + updatedUser.idUser + " pseudo" + updatedUser.pseudo)
|
||||
req.session.user.pseudo = updatedUser.pseudo;
|
||||
console.log("req.session.user.pseudo" + req.session.user.pseudo)
|
||||
res.status(200).json({ user: req.session.user }); //verif rep
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la modification du pseudo de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async addMastermindStats(req, res){
|
||||
const db = new DatabaseService();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.addMastermindStats(user.idUser, req.body.score, req.body.time);
|
||||
|
||||
res.status(200).json({ user: req.session.user }); //verif rep
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la modification des stats mastermind de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async addEasyEnigmaStats(req, res){
|
||||
const db = new DatabaseService();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.addEasyEnigmaStats(user.idUser, ENIGME_FACILE, req.body.win, req.body.time);
|
||||
|
||||
res.status(200).json({ user: req.session.user }); //verif rep
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la modification des stats de l\'énigme facile de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
// static async addMediumEnigmaStats(req, res)
|
||||
|
||||
static async addHardEnigmaStats(req, res){
|
||||
const db = new DatabaseService();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.addHardEnigmaStats(user.idUser, ENIGME_DIFFICILE, req.body.win, req.body.time);
|
||||
|
||||
res.status(200).json({ user: req.session.user }); //verif rep
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la modification des stats de l\'énigme difficile de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async addOnlineStats(req, res){
|
||||
const db = new DatabaseService();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.addOnlineStats(user.idUser, req.body.win, req.body.time);
|
||||
|
||||
res.status(200).json({ user: req.session.user }); //verif rep
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la modification des stats en ligne de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SessionController;
|
@ -0,0 +1,339 @@
|
||||
const sqlite3 = require('sqlite3');
|
||||
const path = require('path');
|
||||
const { rejects } = require('assert');
|
||||
|
||||
class DatabaseService {
|
||||
constructor(){
|
||||
this.db_name = "socialgraph";
|
||||
}
|
||||
|
||||
// ----------------------------------------------------
|
||||
// ------------------- UTILITAIRE ---------------------
|
||||
// ----------------------------------------------------
|
||||
|
||||
async connect(client){
|
||||
const dbPath = path.resolve(__dirname, `../../../db/${this.db_name}.db`)
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client = new sqlite3.Database(dbPath,
|
||||
sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
|
||||
(err) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async disconnect(){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.close((err) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------
|
||||
// ------------------- UTILISATEUR --------------------
|
||||
// ----------------------------------------------------
|
||||
|
||||
// Récupère l'utilisateur par son id
|
||||
async getUserByID(id){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT * FROM users WHERE idUser = ?', id, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Récupère l'utilisateur par son pseudo
|
||||
async getUserByPseudo(pseudo){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT * FROM users WHERE pseudo = ?', pseudo, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// insère un utilisateur dans la base de données
|
||||
async insertUser(user) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const { pseudo, password } = user;
|
||||
this.client.run('INSERT INTO users (pseudo, password) VALUES (?, ?)', [pseudo, password], (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async deleteUser(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('DELETE FROM users WHERE idUser=?', userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async updatePseudo(userId, newPseudo){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('UPDATE users SET pseudo = ? WHERE idUser = ?', newPseudo, userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async updatePassword(userId, newPassword){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('UPDATE users SET password = ? WHERE idUser = ?', newPassword, userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// ------------------- STATS MASTERMIND ------------------------
|
||||
// -------------------------------------------------------------
|
||||
|
||||
async getNbGamesMastermindByUserId(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT COUNT(*) AS nbGames FROM games WHERE idUser = ? AND gameType = ?', userId, "mastermind", (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getBestScoreMastermindByUserId(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT MIN(score) AS bestScore FROM games WHERE idUser = ? AND gameType = ?', userId, "mastermind", (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getAvgNbTryMastermindByUserId(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT AVG(score) AS avgNbTry FROM games WHERE idUser = ? AND gameType = ?', userId, "mastermind", (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async addMastermindStats(userId, score, time){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('INSERT INTO games (idUser, gameType, win, score, time) VALUES (?, ?, ?, ?, ?)', userId, "mastermind", 1, score, time, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
// -------------------------------------------------------------
|
||||
// ------------------- STATS EN LIGNE --------------------------
|
||||
// -------------------------------------------------------------
|
||||
|
||||
async getNbGamesOnlineByUserId(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT COUNT(*) AS nbGames FROM games WHERE idUser = ? AND gameType = ?', userId, "multijoueur", (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getNbWinsOnlineByUserId(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT COUNT(*) AS nbWins FROM games WHERE idUser = ? AND gameType = ? AND win = ?', userId, "multijoueur", 1, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async addOnlineStats(userId, win, time){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('INSERT INTO games (idUser, gameType, win, score, time) VALUES (?, ?, ?, ?, ?)', userId, "multijoueur", win, 0, time, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// ------------------- STATS ENIGME ----------------------------
|
||||
// -------------------------------------------------------------
|
||||
|
||||
async getNbGamesEnigmeByUserId(userId, enigmaLevel){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT COUNT(*) AS nbGames FROM games WHERE idUser = ? AND gameType = ?', userId, enigmaLevel, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getNbWinsEnigmeByUserId(userId, enigmaLevel){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT COUNT(*) AS nbWins FROM games WHERE idUser = ? AND gameType = ? AND win = ?', userId, enigmaLevel, 1, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getBestScoreEnigmeByUserId(userId, enigmaLevel){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT MAX(score) AS bestScore FROM games WHERE idUser = ? AND gameType = ?', userId, enigmaLevel, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getAvgScoreEnigmeByUserId(userId, enigmaLevel){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT AVG(score) AS avgScore FROM games WHERE idUser = ? AND gameType = ?', userId, enigmaLevel, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getBestTimeEnigmeByUserId(userId, enigmaLevel){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT MIN(time) AS bestTime FROM games WHERE idUser = ? AND gameType = ?', userId, enigmaLevel, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getAvgTimeEnigmeByUserId(userId, enigmaLevel){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT AVG(time) AS avgTime FROM games WHERE idUser = ? AND gameType = ?', userId, enigmaLevel, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async addEasyEnigmaStats(userId, enigmaLevel, win, time){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('INSERT INTO games (idUser, gameType, win, score, time) VALUES (?, ?, ?, ?, ?)', userId, enigmaLevel, win, 0, time, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// async addMediumEnigmaStats(userId, enigmaLevel, score)
|
||||
|
||||
async addHardEnigmaStats(userId, enigmaLevel, win, time){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('INSERT INTO games (idUser, gameType, win, score, time) VALUES (?, ?, ?, ?, ?)', userId, enigmaLevel, win, 0, time, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DatabaseService;
|
@ -1,169 +0,0 @@
|
||||
const UserService = require('../services/UserService');
|
||||
const DatabaseService = require('../services/DatabaseService');
|
||||
const bcrypt = require('bcrypt');
|
||||
|
||||
const sqlite3 = require('sqlite3');
|
||||
|
||||
class AuthController {
|
||||
static async signUp(req, res) {
|
||||
const databaseService = new DatabaseService();
|
||||
const pseudo = req.body.pseudo;
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try {
|
||||
await databaseService.connect();
|
||||
|
||||
// Vérifier que le pseudo n'existe pas déjà
|
||||
const verif = await databaseService.getUserByPseudo(pseudo);
|
||||
if (verif) {
|
||||
res.status(400).json({ error: 'Le pseudo est déjà utilisé.' });
|
||||
return;
|
||||
}
|
||||
|
||||
// Créer un nouvel utilisateur
|
||||
const currentUser = await UserService.createUser(req.body);
|
||||
const insertedUser = await databaseService.insertUser(currentUser);
|
||||
|
||||
const user = await databaseService.getUserByPseudo(pseudo);
|
||||
|
||||
// Initialiser les stats de l'utilisateur
|
||||
await databaseService.initSoloStats(user.idUser);
|
||||
await databaseService.initOnlineStats(user.idUser);
|
||||
|
||||
const soloStats = await databaseService.getSoloStatsByUserId(user.idUser);
|
||||
const onlineStats = await databaseService.getOnlineStatsByUserId(user.idUser);
|
||||
|
||||
await databaseService.updateUserIDStats(user.idUser, soloStats.idSoloStats, onlineStats.idOnlineStats);
|
||||
|
||||
console.log("[" + hour + ":" + minutes + "] " + user.pseudo + " have been registered.");
|
||||
res.status(201).json({ message: 'Inscription réussie', user: insertedUser});
|
||||
}
|
||||
catch (error) {
|
||||
// Gérer les erreurs
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de l\'inscription.' });
|
||||
}
|
||||
finally {
|
||||
await databaseService.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async signIn(req, res) {
|
||||
const databaseService = new DatabaseService();
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try{
|
||||
await databaseService.connect();
|
||||
|
||||
// Vérifier que le pseudo existe
|
||||
const pseudo = req.body.pseudo;
|
||||
const user = await databaseService.getUserByPseudo(pseudo);
|
||||
if (!user) {
|
||||
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
|
||||
return;
|
||||
}
|
||||
|
||||
// Vérifier que le mot de passe est correct
|
||||
const password = req.body.password;
|
||||
const validPassword = await bcrypt.compare(password, user.password);
|
||||
if (!validPassword) {
|
||||
res.status(400).json({ error: 'Le mot de passe est incorrect.' });
|
||||
return;
|
||||
}
|
||||
|
||||
// Stocker l'utilisateur dans la session)
|
||||
req.session.user = user;
|
||||
|
||||
// Envoyer une réponse réussie
|
||||
console.log("[" + hour + ":" + minutes + "] " + user.pseudo + " have been connected.");
|
||||
res.status(200).json({ message: 'Connexion réussie', user: user });
|
||||
}
|
||||
catch(error){
|
||||
// Gérer les erreurs
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la connexion.' });
|
||||
}
|
||||
finally{
|
||||
await databaseService.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async logout(req, res) {
|
||||
const pseudo = req.session.user.pseudo;
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
// Détruire la session pour déconnecter l'utilisateur
|
||||
req.session.destroy((err) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
res.status(500).json({ error: 'Erreur lors de la déconnexion.' });
|
||||
} else {
|
||||
console.log("[" + hour + ":" + minutes + "] " + pseudo + " have been disconnected.");
|
||||
res.status(200).json({ message: 'Déconnexion réussie' });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static async delAccount(req, res){
|
||||
const db = new DatabaseService();
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
|
||||
if(!user){
|
||||
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
|
||||
return;
|
||||
}
|
||||
await db.deleteSoloStat(user.idUser);
|
||||
await db.deleteOnlineStat(user.idUser);
|
||||
await db.deleteUser(user.idUser);
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la supression du compte.' });
|
||||
}
|
||||
finally{
|
||||
db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static async UpdateMDP(req, res){
|
||||
console.log("UpdateMDP");
|
||||
// const db = new DatabaseService();
|
||||
|
||||
// try{
|
||||
// await db.connect();
|
||||
|
||||
// const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
// console.log("utilisateur" + user.idUser + " pseudo" + user.pseudo)
|
||||
// if (!user) {
|
||||
// res.status(200).json({ error: "true", message: 'User not found' });
|
||||
// return;
|
||||
// }
|
||||
|
||||
// await db.updatePseudo(user.idUser, req.body.newPseudo); //* update
|
||||
|
||||
// const updatedUser = await db.getUserByPseudo(req.body.newPseudo);
|
||||
// console.log("updaetdutilisateur" + updatedUser.idUser + " pseudo" + updatedUser.pseudo)
|
||||
// req.session.user.pseudo = updatedUser.pseudo;
|
||||
// console.log("req.session.user.pseudo" + req.session.user.pseudo)
|
||||
// res.status(200).json({ user: req.session.user }); //verif rep
|
||||
// }
|
||||
// catch(error){
|
||||
// console.error(error);
|
||||
// res.status(500).json({ error: 'Erreur lors de la modification du pseudo de l\'utilisateur.' });
|
||||
// }
|
||||
// finally{
|
||||
// await db.disconnect();
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = AuthController;
|
@ -1,146 +0,0 @@
|
||||
const DatabaseService = require('../services/DatabaseService');
|
||||
|
||||
class SessionController {
|
||||
static async getUserInformation(req, res) {
|
||||
const db = new DatabaseService();
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
if (!req.session.user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
req.session.user.soloStats = await db.getSoloStatsByUserId(req.session.user.idUser);
|
||||
req.session.user.onlineStats = await db.getOnlineStatsByUserId(req.session.user.idUser);
|
||||
|
||||
console.log("[" + hour + ":" + minutes + "] " + req.session.user.pseudo + " have a session.");
|
||||
res.status(200).json({ user: req.session.user });
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la récupération de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async updateSoloStats(req, res) {
|
||||
const db = new DatabaseService();
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
const soloStats = await db.getSoloStatsByUserId(user.idUser);
|
||||
|
||||
if (!soloStats) {
|
||||
res.status(200).json({ error: "true", message: 'Solo stats not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.updateSoloStats(user.idUser, req.body.nbGames, req.body.bestScore, req.body.avgNbTry);
|
||||
|
||||
const newSoloStats = await db.getSoloStatsByUserId(user.idUser);
|
||||
|
||||
req.session.user.soloStats = newSoloStats;
|
||||
|
||||
console.log("[" + hour + ":" + minutes + "] " + req.session.user.pseudo + "'s solot_stats are updated.");
|
||||
res.status(200).json({ user: req.session.user });
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la mise à jour des statistiques solo.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async updateOnlineStats(req, res) {
|
||||
const db = new DatabaseService();
|
||||
const date = new Date();
|
||||
const hour = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
const onlineStats = await db.getOnlineStatsByUserId(user.idUser);
|
||||
|
||||
if (!onlineStats) {
|
||||
res.status(200).json({ error: "true", message: 'Online stats not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.updateOnlineStats(user.idUser, req.body.nbGames, req.body.nbWins, req.body.ratio);
|
||||
|
||||
const newOnlineStats = await db.getOnlineStatsByUserId(user.idUser);
|
||||
|
||||
req.session.user.onlineStats = newOnlineStats;
|
||||
|
||||
console.log("[" + hour + ":" + minutes + "] " + req.session.user.pseudo + "'s online_stats are updated.");
|
||||
res.status(200).json({ user: req.session.user });
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la mise à jour des statistiques en ligne.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
static async UpdatePseudo(req, res){
|
||||
const db = new DatabaseService();
|
||||
|
||||
try{
|
||||
await db.connect();
|
||||
|
||||
const user = await db.getUserByPseudo(req.body.pseudo);
|
||||
console.log("utilisateur" + user.idUser + " pseudo" + user.pseudo)
|
||||
if (!user) {
|
||||
res.status(200).json({ error: "true", message: 'User not found' });
|
||||
return;
|
||||
}
|
||||
|
||||
await db.updatePseudo(user.idUser, req.body.newPseudo); //* update
|
||||
|
||||
const updatedUser = await db.getUserByPseudo(req.body.newPseudo);
|
||||
console.log("updaetdutilisateur" + updatedUser.idUser + " pseudo" + updatedUser.pseudo)
|
||||
req.session.user.pseudo = updatedUser.pseudo;
|
||||
console.log("req.session.user.pseudo" + req.session.user.pseudo)
|
||||
res.status(200).json({ user: req.session.user }); //verif rep
|
||||
}
|
||||
catch(error){
|
||||
console.error(error);
|
||||
res.status(500).json({ error: 'Erreur lors de la modification du pseudo de l\'utilisateur.' });
|
||||
}
|
||||
finally{
|
||||
await db.disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SessionController;
|
Binary file not shown.
@ -1,231 +0,0 @@
|
||||
const sqlite3 = require('sqlite3');
|
||||
const path = require('path');
|
||||
const { rejects } = require('assert');
|
||||
|
||||
class DatabaseService {
|
||||
constructor(){
|
||||
this.db_name = "socialgraph";
|
||||
}
|
||||
|
||||
async connect(client){
|
||||
const dbPath = path.resolve(__dirname, `../db/${this.db_name}.db`)
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client = new sqlite3.Database(dbPath,
|
||||
sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
|
||||
(err) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async disconnect(){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.close((err) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Récupère l'utilisateur par son pseudo
|
||||
async getUserByPseudo(pseudo){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT * FROM users WHERE pseudo = ?', pseudo, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Récupère l'utilisateur par son id
|
||||
async getUserByID(id){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT * FROM users WHERE idUser = ?', id, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Récupère stats solo de l'utilisateur
|
||||
async getSoloStatsByUserId(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT * FROM solo_stats WHERE idUser = ?', userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Récupère stats online de l'utilisateur
|
||||
async getOnlineStatsByUserId(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.get('SELECT * FROM online_stats WHERE idUser = ?', userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// insère un utilisateur dans la base de données
|
||||
async insertUser(user) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const { pseudo, password } = user;
|
||||
this.client.run('INSERT INTO users (pseudo, password) VALUES (?, ?)', [pseudo, password], (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Mettre à jour l'id de stats solo et online de l'utilisateur
|
||||
async updateUserIDStats(userId, soloStatsId, onlineStatsId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('UPDATE users SET idSoloStats = ?, idOnlineStats = ? WHERE idUser = ?', [soloStatsId, onlineStatsId, userId], (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Mettre à jour les stats solo de l'utilisateur
|
||||
async updateSoloStats(userId, nbGames, bestScore, avgNbTry){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('UPDATE solo_stats SET nbGames = ?, bestScore = ?, avgNbTry = ? WHERE idUser = ?', [nbGames, bestScore, avgNbTry, userId], (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Mettre à jour les stats online de l'utilisateur
|
||||
async updateOnlineStats(userId, nbGames, nbWins, ratio){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('UPDATE online_stats SET nbGames = ?, nbWins = ?, ratio = ? WHERE idUser = ?', [nbGames, nbWins, ratio, userId], (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async initSoloStats(userId) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('INSERT INTO solo_stats (nbGames, bestScore, avgNbTry, idUser) VALUES (?, ?, ?, ?)', 0, 0, 0.0, userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async initOnlineStats(userId) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('INSERT INTO online_stats (nbGames, nbWins, ratio, idUser) VALUES (?, ?, ?, ?)', 0, 0, 0.0, userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async deleteUser(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('DELETE FROM users WHERE idUser=?', userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async deleteSoloStat(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('DELETE FROM solo_stats WHERE idUser=?', userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async deleteOnlineStat(userId){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('DELETE FROM online_stats WHERE idUser=?', userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async updatePseudo(userId, newPseudo){
|
||||
return new Promise((resolve, reject) => {
|
||||
this.client.run('UPDATE users SET pseudo = ? WHERE idUser = ?', newPseudo, userId, (err, result) => {
|
||||
if(err){
|
||||
reject(err);
|
||||
}
|
||||
else{
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DatabaseService;
|
@ -1 +0,0 @@
|
||||
{}
|
Loading…
Reference in new issue