Correctif apporté pour le fonctionnement du temps lors d'une partie
continuous-integration/drone/push Build is failing Details

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

@ -22,7 +22,26 @@ class SessionController {
} }
catch(error){ catch(error){
console.error(error); console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' }); res.status(500).json({ error: 'Erreur lors de la récupération des stats dailyMastermind.' });
}
finally{
await db.disconnect();
}
}
static async getDailyEasyEnigma(req, res){
const db = new DatabaseService();
try{
await db.connect();
const dailyEasyEnigmaStats = await db.getDailyEnigmaStats(ENIGME_FACILE);
res.status(200).json({ tab : dailyEasyEnigmaStats });
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération des stats dailyEasyEnigma.' });
} }
finally{ finally{
await db.disconnect(); await db.disconnect();
@ -41,7 +60,7 @@ class SessionController {
} }
catch(error){ catch(error){
console.error(error); console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' }); res.status(500).json({ error: 'Erreur lors de la récupération des stats dailyOnline' });
} }
finally{ finally{
await db.disconnect(); await db.disconnect();
@ -64,7 +83,26 @@ class SessionController {
} }
catch(error){ catch(error){
console.error(error); console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' }); res.status(500).json({ error: 'Erreur lors de la récupération des stats weeklyMastermind.' });
}
finally{
await db.disconnect();
}
}
static async getWeeklyEasyEnigma(req, res){
const db = new DatabaseService();
try{
await db.connect();
const weeklyEasyEnigmaStats = await db.getWeeklyEnigmaStats(ENIGME_FACILE);
res.status(200).json({ tab : weeklyEasyEnigmaStats });
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération des stats weeklyEasyEnigma.' });
} }
finally{ finally{
await db.disconnect(); await db.disconnect();
@ -83,7 +121,7 @@ class SessionController {
} }
catch(error){ catch(error){
console.error(error); console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération du scoreboard.' }); res.status(500).json({ error: 'Erreur lors de la récupération des stats weeklyOnline' });
} }
finally{ finally{
await db.disconnect(); await db.disconnect();

@ -23,9 +23,12 @@ router.put('/session/updatePseudo', SessionController.UpdatePseudo);
// Routes pour le daily scoreboard // Routes pour le daily scoreboard
router.get('/scoreboard/getDailyMastermind', ScoreboardController.getDailyMastermind); router.get('/scoreboard/getDailyMastermind', ScoreboardController.getDailyMastermind);
router.get('/scoreboard/getDailyEasyEnigma', ScoreboardController.getDailyEasyEnigma);
router.get('/scoreboard/getDailyOnline', ScoreboardController.getDailyOnline); router.get('/scoreboard/getDailyOnline', ScoreboardController.getDailyOnline);
// Routes pour le weekly scoreboard // Routes pour le weekly scoreboard
router.get('/scoreboard/getWeeklyMastermind', ScoreboardController.getWeeklyMastermind); router.get('/scoreboard/getWeeklyMastermind', ScoreboardController.getWeeklyMastermind);
router.get('/scoreboard/getWeeklyEasyEnigma', ScoreboardController.getWeeklyEasyEnigma);
router.get('/scoreboard/getWeeklyOnline', ScoreboardController.getWeeklyOnline); router.get('/scoreboard/getWeeklyOnline', ScoreboardController.getWeeklyOnline);

@ -152,6 +152,25 @@ class DatabaseService {
}); });
} }
async getDailyEnigmaStats(enigmaLevel) {
return new Promise((resolve, reject) => {
const currentDate = new Date().toISOString().slice(0, 10);
this.client.all(
'SELECT pseudo, time FROM users INNER JOIN games ON users.idUser = games.idUser WHERE gameType = ? AND SUBSTR(playedDate, 1, 10) = ? ORDER BY time DESC LIMIT 10',
enigmaLevel,
currentDate,
(err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
}
);
});
}
async getDailyOnlineStats() { async getDailyOnlineStats() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const currentDate = new Date().toISOString().slice(0, 10); const currentDate = new Date().toISOString().slice(0, 10);
@ -197,6 +216,28 @@ class DatabaseService {
}); });
} }
async getWeeklyEnigmaStats(enigmaLevel) {
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, time FROM users INNER JOIN games ON users.idUser = games.idUser WHERE gameType = ? AND SUBSTR(playedDate, 1, 10) BETWEEN ? AND ? ORDER BY time DESC LIMIT 10',
enigmaLevel,
firstDayOfWeek,
currentDate,
(err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
}
);
});
}
async getWeeklyOnlineStats() { async getWeeklyOnlineStats() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const currentDate = new Date().toISOString().slice(0, 10); const currentDate = new Date().toISOString().slice(0, 10);

@ -66,6 +66,8 @@ let firstPlayer = 0
let cptBug = 0 let cptBug = 0
let cptUseEffect = 0 let cptUseEffect = 0
let testPlayers: Player[] = [] let testPlayers: Player[] = []
let testTemps = 0
let testFirst = false
const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleShowTurnBar, handleTurnBarTextChange, playerTouched, setPlayerTouched, changecptTour, solo, isDaily, isEasy, addToHistory, showLast, setNetwork, setNetworkEnigme, setPlayerIndex, askedWrong, setAskedWrong, importToPdf, setImportToPdf}) => { const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleShowTurnBar, handleTurnBarTextChange, playerTouched, setPlayerTouched, changecptTour, solo, isDaily, isEasy, addToHistory, showLast, setNetwork, setNetworkEnigme, setPlayerIndex, askedWrong, setAskedWrong, importToPdf, setImportToPdf}) => {
@ -75,7 +77,7 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
let initMtn = 0 let initMtn = 0
const {isLoggedIn, user, manager} = useAuth(); const {isLoggedIn, user, manager} = useAuth();
const { indices, indice, person, personNetwork, setNodeIdData, players, setPlayersData, askedPersons, setActualPlayerIndexData, room, actualPlayerIndex, turnPlayerIndex, setTurnPlayerIndexData, setWinnerData, dailyEnigme, setNbCoupData, settempsData, setNetworkDataData, setSeedData, nodesC} = useGame(); const { indices, indice, person, personNetwork, setNodeIdData, players, setPlayersData, askedPersons, setActualPlayerIndexData, room, actualPlayerIndex, turnPlayerIndex, setTurnPlayerIndexData, setWinnerData, dailyEnigme, setNbCoupData, settempsData, setNetworkDataData, setSeedData, nodesC, temps} = useGame();
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
const navigate = useNavigate(); const navigate = useNavigate();
@ -84,10 +86,16 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
const [elapsedTime, setElapsedTime] = useState(0); const [elapsedTime, setElapsedTime] = useState(0);
useEffect(() => { useEffect(() => {
if (testFirst){
testTemps = 0
endgame = false
testFirst = false
}
// Démarrez le timer au montage du composant // Démarrez le timer au montage du composant
const intervalId = setInterval(() => { const intervalId = setInterval(() => {
setElapsedTime((prevElapsedTime) => prevElapsedTime + 0.5); setElapsedTime((prevElapsedTime) => prevElapsedTime + 0.5);
settempsData(elapsedTime) settempsData(elapsedTime)
testTemps += 0.5
cptBug ++ cptBug ++
if (cptBug > 10){ if (cptBug > 10){
@ -99,6 +107,7 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
// Vérifiez si la durée est écoulée, puis arrêtez le timer // Vérifiez si la durée est écoulée, puis arrêtez le timer
if (endgame) { if (endgame) {
clearInterval(intervalId); clearInterval(intervalId);
testTemps = 0
} }
}, 500); }, 500);
@ -762,7 +771,7 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
setLastIndex(-1) setLastIndex(-1)
setPlayerTouched(-1) setPlayerTouched(-1)
setWinnerData(winner) setWinnerData(winner)
setElapsedTime(0)
first = true first = true
cptHistory = 0 cptHistory = 0
@ -779,10 +788,10 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
// console.log("nbGames: " + user.onlineStats.nbGames + " nbWins: " + user.onlineStats.nbWins); // console.log("nbGames: " + user.onlineStats.nbGames + " nbWins: " + user.onlineStats.nbWins);
if(winner.id === currentPlayer.id){ if(winner.id === currentPlayer.id){
// Ajouter une victoire // Ajouter une victoire
manager.userService.addOnlineStats(user.pseudo, 1, elapsedTime); manager.userService.addOnlineStats(user.pseudo, 1, testTemps - 0.5);
} }
else{ else{
manager.userService.addOnlineStats(user.pseudo, 0, elapsedTime); manager.userService.addOnlineStats(user.pseudo, 0, testTemps - 0.5);
} }
} }
else{ else{
@ -795,6 +804,7 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
console.log(e); console.log(e);
} }
finally{ finally{
setElapsedTime(0)
socket.off("end game") socket.off("end game")
socket.off("asked all") socket.off("asked all")
socket.off("opacity activated") socket.off("opacity activated")
@ -970,6 +980,7 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
if (person != undefined){ if (person != undefined){
let index =0 let index =0
let works = true let works = true
const statsTime = elapsedTime;
for (const i of indices){ for (const i of indices){
const tester = IndiceTesterFactory.Create(i) const tester = IndiceTesterFactory.Create(i)
const test = tester.Works(person) const test = tester.Works(person)
@ -990,26 +1001,25 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
} }
cptTour ++; cptTour ++;
setNbCoupData(cptTour) setNbCoupData(cptTour)
setElapsedTime(0)
endgame = true
try{ try{
console.log("time: " + testTemps)
if(user && isLoggedIn){ if(user && isLoggedIn){
if(solo){ if(solo){
if(isDaily){ if(isDaily){
// TODO: verif difficulté et add les stats // TODO: verif difficulté et add les stats
// TODO: verif pour facile et difficile, si réussi en one shot ou non // TODO: verif pour facile et difficile, si réussi en one shot ou non
if(isEasy){ if(isEasy){
manager.userService.addEasyEnigmaStats(user.pseudo, 1, elapsedTime); manager.userService.addEasyEnigmaStats(user.pseudo, 1, testTemps - 0.5);
} }
else{ else{
manager.userService.addHardEnigmaStats(user.pseudo, 1, elapsedTime); manager.userService.addHardEnigmaStats(user.pseudo, 1, testTemps - 0.5);
} }
} }
else{ else{
// add stats mastermind // add stats mastermind
if(user && user.mastermindStats){ if(user && user.mastermindStats){
manager.userService.addMastermindStats(user.pseudo, cptTour, elapsedTime); manager.userService.addMastermindStats(user.pseudo, cptTour, testTemps - 0.5);
} }
} }
} }
@ -1018,7 +1028,9 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
catch(error){ catch(error){
console.log(error); console.log(error);
} }
testFirst = true
setElapsedTime(0)
endgame = true
navigate("/endgame?solo=true&daily=" + isDaily) navigate("/endgame?solo=true&daily=" + isDaily)
} }

@ -49,10 +49,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
try { try {
const resultMM = await ScoreboardService.getDailyMastermindStats(); const resultMM = await ScoreboardService.getDailyMastermindStats();
const resultOL = await ScoreboardService.getDailyOnlineStats(); const resultOL = await ScoreboardService.getDailyOnlineStats();
console.log(resultMM); const resultEF = await ScoreboardService.getDailyEasyEnigmaStats();
console.log(resultOL);
console.log(resultEF);
setDailyMastermindStats(resultMM); setDailyMastermindStats(resultMM);
setDailyOnlineStats(resultOL); setDailyOnlineStats(resultOL);
setDailyEasyEnigmaStats(resultEF);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
@ -60,12 +63,15 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
async function fetchWeeklyStats() { async function fetchWeeklyStats() {
try{ try{
const resultWMM = await ScoreboardService.getWeeklyMastermindStats(); const resultMM = await ScoreboardService.getWeeklyMastermindStats();
const resultOL = await ScoreboardService.getWeeklyOnlineStats(); const resultOL = await ScoreboardService.getWeeklyOnlineStats();
console.log(resultWMM); const resultEF = await ScoreboardService.getWeeklyEasyEnigmaStats();
console.log(resultOL);
setWeeklyMastermindStats(resultWMM); console.log(resultEF);
setWeeklyMastermindStats(resultMM);
setWeeklyOnlineStats(resultOL); setWeeklyOnlineStats(resultOL);
setWeeklyEasyEnigmaStats(resultEF);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
@ -193,7 +199,9 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
<Col sm={10}>No data</Col> <Col sm={10}>No data</Col>
</Row> </Row>
)} )}
<hr/> <hr/>
<Row>Multijoueur :</Row> <Row>Multijoueur :</Row>
{dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => ( {dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => (
<Row key={index}> <Row key={index}>
@ -209,6 +217,27 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
<Col sm={10}>No data</Col> <Col sm={10}>No data</Col>
</Row> </Row>
)} )}
<hr/>
<Row>Enigme facile :</Row>
{dailyEasyEnigmaStats !== null ? (dailyEasyEnigmaStats.tab.length !== 0 ? dailyEasyEnigmaStats.tab.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{stats.pseudo}</Col>
<Col className='leftRow'>{stats.time}</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)}
<hr/>
</Container> </Container>
</Tab> </Tab>
<Tab eventKey="weekly" title="Weekly"> <Tab eventKey="weekly" title="Weekly">
@ -248,6 +277,26 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
<Col sm={10}>No data</Col> <Col sm={10}>No data</Col>
</Row> </Row>
)} )}
<hr/>
<Row>Enigme facile :</Row>
{weeklyEasyEnigmaStats !== null ? (weeklyEasyEnigmaStats.tab.length !== 0 ? weeklyEasyEnigmaStats.tab.map((stats: any, index: number) => (
<Row key={index}>
<Col sm={10}>{stats.pseudo}</Col>
<Col className='leftRow'>{stats.time}</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)) : (
<Row>
<Col sm={10}>No data</Col>
</Row>
)}
<hr/>
</Container> </Container>
</Tab> </Tab>
</Tabs> </Tabs>
@ -258,4 +307,4 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
); );
} }
export default ScoreBoard; export default ScoreBoard;

@ -29,6 +29,29 @@ class ScoreboardService {
} }
} }
static async getDailyEasyEnigmaStats() {
try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getDailyEasyEnigma', {
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 getDailyOnlineStats() { static async getDailyOnlineStats() {
try { try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getDailyOnline', { const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getDailyOnline', {
@ -79,6 +102,29 @@ class ScoreboardService {
} }
} }
static async getWeeklyEasyEnigmaStats() {
try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getWeeklyEasyEnigma', {
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() { static async getWeeklyOnlineStats() {
try { try {
const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getWeeklyOnline', { const response = await fetch(ADRESSE_DBSERVER + '/scoreboard/getWeeklyOnline', {

Loading…
Cancel
Save