Scoreboard Service + Controller qui permet récupérer DailyMastermind + Affichage du dailyMastermind
continuous-integration/drone/push Build is passing Details

pull/104/head^2
Baptiste MARCEL 2 years ago
parent 259e196162
commit 8a1946fa09

@ -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;

@ -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;

@ -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 ------------------------
// -------------------------------------------------------------

@ -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<any>(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 (
// <div className='LeaderBoardiv'>
@ -133,27 +153,17 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
width='100'
alt="Person2"/>
<Container fluid>
<Row>
<Col sm={8}>Partie Jouées :</Col>
<Col className='leftRow'>10</Col>
</Row>
<Row>
<Col sm={8}>Partie gagnées :</Col>
<Col className='leftRow'>2</Col>
</Row>
<Row>
<Col sm={8}>Pions posés :</Col>
<Col className='leftRow'>2</Col>
</Row>
<hr/>
<Row>
<Col sm={8}>Partie solo :</Col>
<Col className='leftRow'>21</Col>
{dailyMastermindStats !== null ? (dailyMastermindStats.dailyMastermindStats.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{stats.pseudo}</Col>
<Col className='leftRow'>{stats.score}</Col>
</Row>
))
) : (
<Row>
<Col sm={8}>Nombre de coups moyen :</Col>
<Col className='leftRow'>19</Col>
<Col sm={10}>No data</Col>
</Row>
)}
</Container>
</Tab>
<Tab eventKey="weekly" title="Weekly">

@ -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;

@ -165,7 +165,6 @@ class SessionService {
throw error;
}
}
}
export default SessionService;

Loading…
Cancel
Save