diff --git a/cryptide_project/server/api/controllers/SessionController.js b/cryptide_project/server/api/controllers/SessionController.js index 08f1935..6d53b80 100644 --- a/cryptide_project/server/api/controllers/SessionController.js +++ b/cryptide_project/server/api/controllers/SessionController.js @@ -114,6 +114,31 @@ class SessionController { } } + 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 addOnlineStats(req, res){ const db = new DatabaseService(); @@ -128,11 +153,6 @@ class SessionController { await db.addOnlineStats(user.idUser, req.body.win, req.body.time); - const updatedUser = await db.getUserByPseudo(req.body.pseudo); - req.session.user.onlineStats.nbGames = updatedUser.nbGames; - req.session.user.onlineStats.nbWins = updatedUser.nbWins; - req.session.user.onlineStats.ratio = updatedUser.ratio; - res.status(200).json({ user: req.session.user }); //verif rep } catch(error){ diff --git a/cryptide_project/server/api/routes/AuthRoutes.js b/cryptide_project/server/api/routes/AuthRoutes.js index 5028f01..ce84834 100644 --- a/cryptide_project/server/api/routes/AuthRoutes.js +++ b/cryptide_project/server/api/routes/AuthRoutes.js @@ -11,6 +11,7 @@ router.delete('/auth/delAccount', AuthController.delAccount) // Routes pour les sessions router.get('/session', SessionController.getUserInformation); +router.post('/session/addMastermindStats', SessionController.addMastermindStats); router.post('/session/addOnlineStats', SessionController.addOnlineStats); router.put('/session/updatePseudo', SessionController.UpdatePseudo); diff --git a/cryptide_project/server/api/services/DatabaseService.js b/cryptide_project/server/api/services/DatabaseService.js index 3790ba3..47051f8 100644 --- a/cryptide_project/server/api/services/DatabaseService.js +++ b/cryptide_project/server/api/services/DatabaseService.js @@ -133,7 +133,7 @@ class DatabaseService { async getBestScoreMastermindByUserId(userId){ return new Promise((resolve, reject) => { - this.client.get('SELECT MAX(score) AS bestScore FROM games WHERE idUser = ? AND gameType = ?', userId, "mastermind", (err, result) => { + this.client.get('SELECT MIN(score) AS bestScore FROM games WHERE idUser = ? AND gameType = ?', userId, "mastermind", (err, result) => { if(err){ reject(err); } @@ -157,6 +157,18 @@ class DatabaseService { }); } + 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 -------------------------- // ------------------------------------------------------------- diff --git a/cryptide_project/src/Components/GraphContainer.tsx b/cryptide_project/src/Components/GraphContainer.tsx index 671165f..d8ca9b5 100644 --- a/cryptide_project/src/Components/GraphContainer.tsx +++ b/cryptide_project/src/Components/GraphContainer.tsx @@ -578,10 +578,10 @@ const MyGraphComponent: React.FC = ({onNodeClick, handleS // console.log("nbGames: " + user.onlineStats.nbGames + " nbWins: " + user.onlineStats.nbWins); if(winner.id === currentPlayer.id){ // Ajouter une victoire - manager.userService.updateOnlineStats(user.pseudo, 1, elapsedTime); + manager.userService.addOnlineStats(user.pseudo, 1, elapsedTime); } else{ - manager.userService.updateOnlineStats(user.pseudo, 0, elapsedTime); + manager.userService.addOnlineStats(user.pseudo, 0, elapsedTime); } } else{ @@ -780,7 +780,17 @@ const MyGraphComponent: React.FC = ({onNodeClick, handleS endgame = true try{ - + if(solo){ + if(isDaily){ + // TODO: verif difficulté et add les stats + } + else{ + // add stats mastermind + if(user && user.mastermindStats){ + manager.userService.addMastermindStats(user.pseudo, cptTour, elapsedTime); + } + } + } } catch(error){ console.log(error); diff --git a/cryptide_project/src/model/DataManagers/DbUserService.ts b/cryptide_project/src/model/DataManagers/DbUserService.ts index 5818b0d..770de48 100644 --- a/cryptide_project/src/model/DataManagers/DbUserService.ts +++ b/cryptide_project/src/model/DataManagers/DbUserService.ts @@ -84,9 +84,9 @@ class DbUserService implements IUserService{ } } - async updateSoloStats(pseudo: string, nbGames: number, bestScore: number, avgNbTry: number): Promise { + async addMastermindStats(pseudo: string, score: number, time: number): Promise { try { - const result = await SessionService.updateSoloStats(pseudo, nbGames, bestScore, avgNbTry); + const result = await SessionService.addMastermindStats(pseudo, score, time); if (result) { console.log("Stats solo updated"); } else { @@ -97,7 +97,7 @@ class DbUserService implements IUserService{ } } - async updateOnlineStats(pseudo: string, win: number, time: number): Promise { + async addOnlineStats(pseudo: string, win: number, time: number): Promise { try { const result = await SessionService.addOnlineStats(pseudo, win, time); if (result) { diff --git a/cryptide_project/src/model/DataManagers/IUserService.ts b/cryptide_project/src/model/DataManagers/IUserService.ts index 412df04..e86add8 100644 --- a/cryptide_project/src/model/DataManagers/IUserService.ts +++ b/cryptide_project/src/model/DataManagers/IUserService.ts @@ -2,8 +2,8 @@ import User from "../User"; interface IUserService{ fetchUserInformation(): Promise<[User | null, boolean]> - updateSoloStats(pseudo: string, nbGames: number, bestScore: number, avgNbTry: number): Promise - updateOnlineStats(pseudo: string, win: number, time: number): Promise + addMastermindStats(pseudo: string, score: number, time: number): Promise + addOnlineStats(pseudo: string, win: number, time: number): Promise } diff --git a/cryptide_project/src/services/SessionService.tsx b/cryptide_project/src/services/SessionService.tsx index 7c1b235..bf2ae62 100644 --- a/cryptide_project/src/services/SessionService.tsx +++ b/cryptide_project/src/services/SessionService.tsx @@ -24,19 +24,18 @@ class SessionService { } } - static async updateSoloStats(pseudo: string, nbGames: number, bestScore: number, avgNbTry: number){ + static async addMastermindStats(pseudo: string, score: number, time: number){ try { - const response = await fetch(ADRESSE_DBSERVER + '/session/updateSoloStats', { - method: 'PUT', + const response = await fetch(ADRESSE_DBSERVER + '/session/addMastermindStats', { + method: 'POST', headers: { 'Content-Type': 'application/json', }, credentials: 'include', body: JSON.stringify({ pseudo, - nbGames, - bestScore, - avgNbTry + score, + time }), });