From 8a1946fa0946e938bcd079311a7e8d0351a4c342 Mon Sep 17 00:00:00 2001 From: Baptiste Marcel Date: Tue, 5 Dec 2023 17:08:58 +0100 Subject: [PATCH] =?UTF-8?q?Scoreboard=20Service=20+=20Controller=20qui=20p?= =?UTF-8?q?ermet=20r=C3=A9cup=C3=A9rer=20DailyMastermind=20+=20Affichage?= =?UTF-8?q?=20du=20dailyMastermind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controllers/ScoreboardController.js | 29 +++++++++++ .../server/api/routes/AuthRoutes.js | 4 ++ .../server/api/services/DatabaseService.js | 27 ++++++++++ .../src/Components/ScoreBoard.tsx | 52 +++++++++++-------- .../src/services/ScoreboardService.tsx | 28 ++++++++++ .../src/services/SessionService.tsx | 1 - 6 files changed, 119 insertions(+), 22 deletions(-) create mode 100644 cryptide_project/server/api/controllers/ScoreboardController.js create mode 100644 cryptide_project/src/services/ScoreboardService.tsx diff --git a/cryptide_project/server/api/controllers/ScoreboardController.js b/cryptide_project/server/api/controllers/ScoreboardController.js new file mode 100644 index 0000000..51812fd --- /dev/null +++ b/cryptide_project/server/api/controllers/ScoreboardController.js @@ -0,0 +1,29 @@ +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 getDailyMastermind(req, res){ + const db = new DatabaseService(); + + try{ + await db.connect(); + + const dailyMastermindStats = await db.getDailyMastermindStats(); + + res.status(200).json({ dailyMastermindStats }); + } + catch(error){ + console.error(error); + res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' }); + } + finally{ + await db.disconnect(); + } + } +} + +module.exports = SessionController; \ No newline at end of file diff --git a/cryptide_project/server/api/routes/AuthRoutes.js b/cryptide_project/server/api/routes/AuthRoutes.js index 3e053e0..1642035 100644 --- a/cryptide_project/server/api/routes/AuthRoutes.js +++ b/cryptide_project/server/api/routes/AuthRoutes.js @@ -2,6 +2,7 @@ const express = require('express'); const router = express.Router(); const AuthController = require('../controllers/AuthController'); const SessionController = require('../controllers/SessionController'); +const ScoreboardController = require('../controllers/ScoreboardController'); // Routes pour l'authentification router.post('/auth/signup', AuthController.signUp); @@ -20,4 +21,7 @@ router.post('/session/addHardEnigmaStats', SessionController.addHardEnigmaStats) router.post('/session/addOnlineStats', SessionController.addOnlineStats); router.put('/session/updatePseudo', SessionController.UpdatePseudo); +// Routes pour le scoreboard +router.get('/scoreboard/getDailyMastermind', ScoreboardController.getDailyMastermind); + module.exports = router; diff --git a/cryptide_project/server/api/services/DatabaseService.js b/cryptide_project/server/api/services/DatabaseService.js index e8baba2..7cc35b8 100644 --- a/cryptide_project/server/api/services/DatabaseService.js +++ b/cryptide_project/server/api/services/DatabaseService.js @@ -127,6 +127,33 @@ class DatabaseService { }); } + // ------------------------------------------------------------- + // ------------------- STATS GENERALES ------------------------- + // ------------------------------------------------------------- + + // Récupérer les 10 meilleurs scores de la journée + async getDailyMastermindStats() { + return new Promise((resolve, reject) => { + // Obtenez la date actuelle au format AAAA-MM-JJ + const currentDate = new Date().toISOString().slice(0, 10); + + this.client.all( + 'SELECT pseudo, score FROM users INNER JOIN games ON users.idUser = games.idUser WHERE gameType = ? AND SUBSTR(playedDate, 1, 10) = ? ORDER BY score DESC LIMIT 10', + "mastermind", + currentDate, + (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + } + + + // ------------------------------------------------------------- // ------------------- STATS MASTERMIND ------------------------ // ------------------------------------------------------------- diff --git a/cryptide_project/src/Components/ScoreBoard.tsx b/cryptide_project/src/Components/ScoreBoard.tsx index 3dbe23c..15f63ee 100644 --- a/cryptide_project/src/Components/ScoreBoard.tsx +++ b/cryptide_project/src/Components/ScoreBoard.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, {useEffect, useState} from 'react'; /* Style */ import '../Pages/Play.css'; @@ -22,13 +22,33 @@ import Col from 'react-bootstrap/Col'; import ButtonImgNav from './ButtonImgNav'; import User from '../model/User'; -/* Types */ +/* Services */ +import ScoreboardService from '../services/ScoreboardService'; //@ts-ignore const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { const theme=useTheme(); - console.log(Player); + const [dailyMastermindStats, setDailyMastermindStats] = useState(null); + + // Récupérer les records daily et weekly + useEffect(() => { + async function fetchDailyMastermindStats() { + try { + const result = await ScoreboardService.getDailyMastermindStats(); + console.log(result); + setDailyMastermindStats(result); + } catch (error) { + console.error(error); + } + } + + fetchDailyMastermindStats(); + }, []); + + useEffect(() => { + console.log("Updated dailyMastermindStats:", dailyMastermindStats); + }, [dailyMastermindStats]); return ( //
@@ -133,27 +153,17 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { width='100' alt="Person2"/> - - Partie Jouées : - 10 - - - Partie gagnées : - 2 - - - Pions posés : - 2 - -
- - Partie solo : - 21 + {dailyMastermindStats !== null ? (dailyMastermindStats.dailyMastermindStats.map((stats: any, index: number) => ( + + {stats.pseudo} + {stats.score} + )) + ) : ( - Nombre de coups moyen : - 19 + No data + )}
diff --git a/cryptide_project/src/services/ScoreboardService.tsx b/cryptide_project/src/services/ScoreboardService.tsx new file mode 100644 index 0000000..9e5427f --- /dev/null +++ b/cryptide_project/src/services/ScoreboardService.tsx @@ -0,0 +1,28 @@ +import {ADRESSE_DBSERVER} from '../AdressSetup'; + +class ScoreboardService { + static async getDailyMastermindStats() { + try { + const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getDailyMastermind', { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + credentials: 'include', + }); + + if (response.ok) { + const result = await response.json(); + return result; + } else { + const errorResponse = await response.json(); + throw new Error(errorResponse.error); + } + } catch (error) { + console.error(error); + throw error; + } + } +} + +export default ScoreboardService; \ No newline at end of file diff --git a/cryptide_project/src/services/SessionService.tsx b/cryptide_project/src/services/SessionService.tsx index e17de92..f555132 100644 --- a/cryptide_project/src/services/SessionService.tsx +++ b/cryptide_project/src/services/SessionService.tsx @@ -165,7 +165,6 @@ class SessionService { throw error; } } - } export default SessionService;