ajout dans le scoreboard des stats daily/weekly multijoueur + correctif pour affichage quand pas de data
continuous-integration/drone/push Build is passing Details

pull/104/head^2
Baptiste MARCEL 1 year ago
parent 8a1946fa09
commit 78dd03cefa

@ -6,6 +6,10 @@ const ENIGME_MOYEN = "enigme_moyenne";
const ENIGME_DIFFICILE = "enigme_difficile"; const ENIGME_DIFFICILE = "enigme_difficile";
class SessionController { class SessionController {
// ---------------------------------------------------
// ----------------- GET DAILY STATS -----------------
// ---------------------------------------------------
static async getDailyMastermind(req, res){ static async getDailyMastermind(req, res){
const db = new DatabaseService(); const db = new DatabaseService();
@ -14,7 +18,68 @@ class SessionController {
const dailyMastermindStats = await db.getDailyMastermindStats(); const dailyMastermindStats = await db.getDailyMastermindStats();
res.status(200).json({ dailyMastermindStats }); res.status(200).json({ tab : dailyMastermindStats });
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' });
}
finally{
await db.disconnect();
}
}
static async getDailyOnline(req, res){
const db = new DatabaseService();
try{
await db.connect();
const dailyOnlineStats = await db.getDailyOnlineStats();
res.status(200).json({ tab : dailyOnlineStats });
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' });
}
finally{
await db.disconnect();
}
}
// ---------------------------------------------------
// ---------------- GET WEEKLY STATS -----------------
// ---------------------------------------------------
static async getWeeklyMastermind(req, res){
const db = new DatabaseService();
try{
await db.connect();
const weeklyMastermindStats = await db.getWeeklyMastermindStats();
res.status(200).json({ tab : weeklyMastermindStats });
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' });
}
finally{
await db.disconnect();
}
}
static async getWeeklyOnline(req, res){
const db = new DatabaseService();
try{
await db.connect();
const weeklyOnlineStats = await db.getWeeklyOnlineStats();
res.status(200).json({ tab : weeklyOnlineStats });
} }
catch(error){ catch(error){
console.error(error); console.error(error);
@ -24,6 +89,7 @@ class SessionController {
await db.disconnect(); await db.disconnect();
} }
} }
} }
module.exports = SessionController; module.exports = SessionController;

@ -21,7 +21,12 @@ router.post('/session/addHardEnigmaStats', SessionController.addHardEnigmaStats)
router.post('/session/addOnlineStats', SessionController.addOnlineStats); router.post('/session/addOnlineStats', SessionController.addOnlineStats);
router.put('/session/updatePseudo', SessionController.UpdatePseudo); router.put('/session/updatePseudo', SessionController.UpdatePseudo);
// Routes pour le scoreboard // Routes pour le daily scoreboard
router.get('/scoreboard/getDailyMastermind', ScoreboardController.getDailyMastermind); router.get('/scoreboard/getDailyMastermind', ScoreboardController.getDailyMastermind);
router.get('/scoreboard/getDailyOnline', ScoreboardController.getDailyOnline);
// Routes pour le weekly scoreboard
router.get('/scoreboard/getWeeklyMastermind', ScoreboardController.getWeeklyMastermind);
router.get('/scoreboard/getWeeklyOnline', ScoreboardController.getWeeklyOnline);
module.exports = router; module.exports = router;

@ -127,16 +127,16 @@ class DatabaseService {
}); });
} }
// ------------------------------------------------------------- // ---------------------------------------------------------------
// ------------------- STATS GENERALES ------------------------- // ------------------- STATS JOURNALIERE -------------------------
// ------------------------------------------------------------- // ---------------------------------------------------------------
// Récupérer les 10 meilleurs scores de la journée
async getDailyMastermindStats() { async getDailyMastermindStats() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// Obtenez la date actuelle au format AAAA-MM-JJ // Obtenez la date actuelle au format AAAA-MM-JJ
const currentDate = new Date().toISOString().slice(0, 10); const currentDate = new Date().toISOString().slice(0, 10);
// Récupérer les 5 meilleurs scores de la journée
this.client.all( 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', '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", "mastermind",
@ -151,8 +151,74 @@ class DatabaseService {
); );
}); });
} }
async getDailyOnlineStats() {
return new Promise((resolve, reject) => {
const currentDate = new Date().toISOString().slice(0, 10);
this.client.all(
'SELECT pseudo, COUNT(*) AS wins FROM users INNER JOIN games ON users.idUser = games.idUser WHERE gameType = ? AND SUBSTR(playedDate, 1, 10) = ? AND win = ? GROUP BY users.idUser ORDER BY wins DESC LIMIT 10',
"multijoueur", currentDate, 1,
(err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
}
);
});
}
// ---------------------------------------------------------------
// ------------------- STATS HEBDOMADAIRE ------------------------
// ---------------------------------------------------------------
async getWeeklyMastermindStats() {
return new Promise((resolve, reject) => {
const currentDate = new Date().toISOString().slice(0, 10);
const currentDay = new Date().getDay();
const firstDayOfWeek = new Date(new Date().setDate(new Date().getDate() - currentDay)).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) BETWEEN ? AND ? ORDER BY score DESC LIMIT 10',
"mastermind",
firstDayOfWeek,
currentDate,
(err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
}
);
});
}
async getWeeklyOnlineStats() {
return new Promise((resolve, reject) => {
const currentDate = new Date().toISOString().slice(0, 10);
const currentDay = new Date().getDay();
const firstDayOfWeek = new Date(new Date().setDate(new Date().getDate() - currentDay)).toISOString().slice(0, 10);
this.client.all(
'SELECT pseudo, COUNT(*) as wins FROM users INNER JOIN games ON users.idUser = games.idUser WHERE gameType = ? AND SUBSTR(playedDate, 1, 10) BETWEEN ? AND ? AND win = ? ORDER BY wins DESC LIMIT 10',
"multijoueur",
firstDayOfWeek,
currentDate,
1,
(err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
}
);
});
}
// ------------------------------------------------------------- // -------------------------------------------------------------
// ------------------- STATS MASTERMIND ------------------------ // ------------------- STATS MASTERMIND ------------------------

@ -29,26 +29,51 @@ import ScoreboardService from '../services/ScoreboardService';
const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
const theme=useTheme(); const theme=useTheme();
// DAILY STATS
const [dailyMastermindStats, setDailyMastermindStats] = useState<any>(null); const [dailyMastermindStats, setDailyMastermindStats] = useState<any>(null);
const [dailyEasyEnigmaStats, setDailyEasyEnigmaStats] = useState<any>(null);
const [dailyMediumEnigmaStats, setDailyMediumEnigmaStats] = useState<any>(null);
const [dailyHardEnigmaStats, setDailyHardEnigmaStats] = useState<any>(null);
const [dailyOnlineStats, setDailyOnlineStats] = useState<any>(null);
// Récupérer les records daily et weekly // WEEKLY STATS
const [weeklyMastermindStats, setWeeklyMastermindStats] = useState<any>(null);
const [weeklyEasyEnigmaStats, setWeeklyEasyEnigmaStats] = useState<any>(null);
const [weeklyMediumEnigmaStats, setWeeklyMediumEnigmaStats] = useState<any>(null);
const [weeklyHardEnigmaStats, setWeeklyHardEnigmaStats] = useState<any>(null);
const [weeklyOnlineStats, setWeeklyOnlineStats] = useState<any>(null);
// Récupérer les records daily
useEffect(() => { useEffect(() => {
async function fetchDailyMastermindStats() { async function fetchDailyStats() {
try { try {
const result = await ScoreboardService.getDailyMastermindStats(); const resultMM = await ScoreboardService.getDailyMastermindStats();
console.log(result); const resultOL = await ScoreboardService.getDailyOnlineStats();
setDailyMastermindStats(result); console.log(resultMM);
console.log(resultOL);
setDailyMastermindStats(resultMM);
setDailyOnlineStats(resultOL);
} catch (error) {
console.error(error);
}
}
async function fetchWeeklyStats() {
try{
const resultWMM = await ScoreboardService.getWeeklyMastermindStats();
const resultOL = await ScoreboardService.getWeeklyOnlineStats();
console.log(resultWMM);
console.log(resultOL);
setWeeklyMastermindStats(resultWMM);
setWeeklyOnlineStats(resultOL);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
} }
fetchDailyMastermindStats(); fetchDailyStats();
fetchWeeklyStats();
}, []); }, []);
useEffect(() => {
console.log("Updated dailyMastermindStats:", dailyMastermindStats);
}, [dailyMastermindStats]);
return ( return (
// <div className='LeaderBoardiv'> // <div className='LeaderBoardiv'>
@ -153,13 +178,33 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
width='100' width='100'
alt="Person2"/> alt="Person2"/>
<Container fluid> <Container fluid>
{dailyMastermindStats !== null ? (dailyMastermindStats.dailyMastermindStats.map((stats: any, index: number) => ( <Row>MasterMind :</Row>
{dailyMastermindStats !== null ? (dailyMastermindStats.tab.length !== 0 ? dailyMastermindStats.tab.map((stats: any, index: number) => (
<Row key={index}> <Row key={index}>
<Col sm={10}>{stats.pseudo}</Col> <Col sm={10}>{stats.pseudo}</Col>
<Col className='leftRow'>{stats.score}</Col> <Col className='leftRow'>{stats.score}</Col>
</Row> </Row>
)) )) : (
) : ( <Row>
<Col sm={10}>No data</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)}
<hr/>
<Row>Multijoueur :</Row>
{dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{stats.pseudo}</Col>
<Col className='leftRow'>{stats.wins}</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)) : (
<Row> <Row>
<Col sm={10}>No data</Col> <Col sm={10}>No data</Col>
</Row> </Row>
@ -171,6 +216,39 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
height='100' height='100'
width='100' width='100'
alt="Person2"/> alt="Person2"/>
<Container fluid>
<Row>MasterMind :</Row>
{weeklyMastermindStats !== null ? (weeklyMastermindStats.tab.length !== 0 ? weeklyMastermindStats.tab.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{stats.pseudo}</Col>
<Col className='leftRow'>{stats.score}</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)}
<hr/>
<Row>Multijoueur :</Row>
{weeklyOnlineStats !== null ? (weeklyOnlineStats.tab.length !== 0 ? weeklyOnlineStats.tab.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{stats.pseudo}</Col>
<Col className='leftRow'>{stats.wins}</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)}
</Container>
</Tab> </Tab>
</Tabs> </Tabs>

@ -1,6 +1,11 @@
import {ADRESSE_DBSERVER} from '../AdressSetup'; import {ADRESSE_DBSERVER} from '../AdressSetup';
class ScoreboardService { class ScoreboardService {
// ------------------------------ GET ------------------------------
// ----------------------------- DAILY -----------------------------
// ----------------------------- STATS -----------------------------
static async getDailyMastermindStats() { static async getDailyMastermindStats() {
try { try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getDailyMastermind', { const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getDailyMastermind', {
@ -23,6 +28,79 @@ class ScoreboardService {
throw error; throw error;
} }
} }
static async getDailyOnlineStats() {
try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getDailyOnline', {
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;
}
}
// ------------------------------ GET ------------------------------
// ----------------------------- WEEKLY ----------------------------
// ----------------------------- STATS -----------------------------
static async getWeeklyMastermindStats() {
try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getWeeklyMastermind', {
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;
}
}
static async getWeeklyOnlineStats() {
try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getWeeklyOnline', {
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; export default ScoreboardService;
Loading…
Cancel
Save