correctif sur les stats si null, modif navbar, modif temps après insc et login
continuous-integration/drone/push Build is passing Details

pull/97/head^2
Baptiste MARCEL 1 year ago
parent 9f3f3c8a61
commit 80a4bb0743

@ -21,54 +21,71 @@ class SessionController {
} }
// Récupérer les stats mastermind de l'utilisateur // Récupérer les stats mastermind de l'utilisateur
const nbGamesMM = await db.getNbGamesMastermindByUserId(req.session.user.idUser) || 0; let nbGamesMM = await db.getNbGamesMastermindByUserId(req.session.user.idUser);
const bestScoreMM = await db.getBestScoreMastermindByUserId(req.session.user.idUser) || 0; nbGamesMM = nbGamesMM.nbGames || 0;
const avgNbTryMM = await db.getAvgNbTryMastermindByUserId(req.session.user.idUser) || 0; let bestScoreMM = await db.getBestScoreMastermindByUserId(req.session.user.idUser);
req.session.user.mastermindStats = {nbGames: nbGamesMM.nbGames, bestScoreMM = bestScoreMM.bestScore || 0;
bestScore: bestScoreMM.bestScore, let avgNbTryMM = await db.getAvgNbTryMastermindByUserId(req.session.user.idUser);
avgNbTry: avgNbTryMM.avgNbTry}; avgNbTryMM = avgNbTryMM.avgNbTry || 0;
req.session.user.mastermindStats = {nbGames: nbGamesMM,
bestScore: bestScoreMM,
avgNbTry: avgNbTryMM};
// Récupérer les stats enigme facile // Récupérer les stats enigme facile
const nbGamesEF = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE) || 0; let nbGamesEF = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
const nbWinsEF = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE) || 0; nbGamesEF = nbGamesEF.nbGames || 0;
const ratioEF = (nbWinsEF.nbWins / nbGamesEF.nbGames) * 100 || 0; let nbWinsEF = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
const bestTimeEF = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE) || 0; nbWinsEF = nbWinsEF.nbWins || 0;
const avgTimeEF = await db.getAvgTimeEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE) || 0; let ratioEF = (nbWinsEF.nbWins / nbGamesEF.nbGames) * 100 || 0;
let bestTimeEF = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
req.session.user.easyEnigmaStats = {nbGames: nbGamesEF.nbGames, bestTimeEF = bestTimeEF.bestTime || 0;
nbWins: nbWinsEF.nbWins, let avgTimeEF = await db.getAvgTimeEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
avgTimeEF = avgTimeEF.avgTime || 0;
req.session.user.easyEnigmaStats = {nbGames: nbGamesEF,
nbWins: nbWinsEF,
ratio: ratioEF, ratio: ratioEF,
bestTime: bestTimeEF.bestTime, bestTime: bestTimeEF,
avgTime: avgTimeEF.avgTime}; avgTime: avgTimeEF};
// Récupérer les stats enigme moyenne // Récupérer les stats enigme moyenne
const nbGamesEM = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN) || 0; let nbGamesEM = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN);
const bestScoreEM = await db.getBestScoreEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN) || 0; nbGamesEM = nbGamesEM.nbGames || 0;
const avgNbTryEM = await db.getAvgScoreEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN) || 0; let bestScoreEM = await db.getBestScoreEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN);
bestScoreEM = bestScoreEM.bestScore || 0;
let avgNbTryEM = await db.getAvgScoreEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN);
avgNbTryEM = avgNbTryEM.avgScore || 0;
req.session.user.mediumEnigmaStats = {nbGames: nbGamesEM.nbGames, req.session.user.mediumEnigmaStats = {nbGames: nbGamesEM,
bestScore: bestScoreEM.bestScore, bestScore: bestScoreEM,
avgNbTry: avgNbTryEM.avgScore}; avgNbTry: avgNbTryEM};
// Récupérer les stats enigme difficile // Récupérer les stats enigme difficile
const nbGamesED = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE) || 0; let nbGamesED = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
const nbWinsED = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE) || 0; nbGamesED = nbGamesED.nbGames || 0;
const ratioED = (nbWinsED.nbWins / nbGamesED.nbGames) * 100 || 0; let nbWinsED = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
const bestTimeED = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE) || 0; nbWinsED = nbWinsED.nbWins || 0;
const avgTimeED = await db.getAvgTimeEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE) || 0; let ratioED = (nbWinsED.nbWins / nbGamesED.nbGames) * 100 || 0;
let bestTimeED = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
req.session.user.hardEnigmaStats = {nbGames: nbGamesED.nbGames, bestTimeED = bestTimeED.bestTime || 0;
nbWins: nbWinsED.nbWins, let avgTimeED = await db.getAvgTimeEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
avgTimeED = avgTimeED.avgTime || 0;
req.session.user.hardEnigmaStats = {nbGames: nbGamesED,
nbWins: nbWinsED,
ratio: ratioED, ratio: ratioED,
bestTime: bestTimeED.bestTime, bestTime: bestTimeED,
avgTime: avgTimeED.avgTime}; avgTime: avgTimeED};
// Récupérer les stats en ligne de l'utilisateur // Récupérer les stats en ligne de l'utilisateur
const nbGamesOL = await db.getNbGamesOnlineByUserId(req.session.user.idUser) || 0; let nbGamesOL = await db.getNbGamesOnlineByUserId(req.session.user.idUser);
const nbWinsOL = await db.getNbWinsOnlineByUserId(req.session.user.idUser) || 0; nbGamesOL = nbGamesOL.nbGames || 0;
const ratioOL = (nbWinsOL.nbWins / nbGamesOL.nbGames) * 100 || 0; let nbWinsOL = await db.getNbWinsOnlineByUserId(req.session.user.idUser);
req.session.user.onlineStats = {nbGames: nbGamesOL.nbGames, nbWinsOL = nbWinsOL.nbWins || 0;
nbWins: nbWinsOL.nbWins, let ratioOL = (nbWinsOL.nbWins / nbGamesOL.nbGames) * 100 || 0;
req.session.user.onlineStats = {nbGames: nbGamesOL,
nbWins: nbWinsOL,
ratio: ratioOL}; ratio: ratioOL};

@ -9,7 +9,7 @@ import { AuthProvider } from './Contexts/AuthContext';
import Home from './Pages/Home'; import Home from './Pages/Home';
import Login from './Pages/LoginForm'; import Login from './Pages/LoginForm';
import SignUp from './Pages/SignUpForm'; import SignUp from './Pages/SignUpForm';
import Play from './Pages/Play'; import NewPlay from './Pages/NewPlay';
import Profile from './Pages/Profile'; import Profile from './Pages/Profile';
import Lobby from './Pages/Lobby'; import Lobby from './Pages/Lobby';
import InGame from './Pages/InGame'; import InGame from './Pages/InGame';
@ -22,9 +22,6 @@ import Lobbies from './Pages/Lobbies';
/* Component */ /* Component */
import AppNavbar from './Components/NavBar'; import AppNavbar from './Components/NavBar';
/* service */
import SessionService from './services/SessionService';
/* nav */ /* nav */
import { BrowserRouter, Route, Routes, useLocation } from "react-router-dom"; import { BrowserRouter, Route, Routes, useLocation } from "react-router-dom";
@ -44,7 +41,6 @@ import messagesEn from './Translations/en.json';
/* Gestion d' erreur */ /* Gestion d' erreur */
import ErrorBoundary from './Error/ErrorBoundary'; import ErrorBoundary from './Error/ErrorBoundary';
import ErrorPage from './Error/ErrorPage'; import ErrorPage from './Error/ErrorPage';
import NewPlay from './Pages/NewPlay';
const messages = { const messages = {
fr: messagesFr, fr: messagesFr,
@ -77,10 +73,10 @@ function App() {
<BrowserRouter> <BrowserRouter>
{hasNavbarVisible && <AppNavbar changeLocale={changeLocale} />} {hasNavbarVisible && <AppNavbar changeLocale={changeLocale} />}
<Routes> <Routes>
<Route path="/" element={<Home />} /> <Route path="/" element={<NewPlay/>} />
<Route path="/login" element={<Login />} /> <Route path="/login" element={<Login />} />
<Route path="/signup" element={<SignUp />} /> <Route path="/signup" element={<SignUp />} />
<Route path="/play" element={<NewPlay/>} /> <Route path="/presentation" element={<Home />} />
<Route path="/lobby" element={<Lobby/>} /> <Route path="/lobby" element={<Lobby/>} />
<Route path="/endgame" element={<EndGame/>} /> <Route path="/endgame" element={<EndGame/>} />
<Route path="/game" element={<InGame locale={locale} changeLocale={changeLocale}/>}/> <Route path="/game" element={<InGame locale={locale} changeLocale={changeLocale}/>}/>

@ -32,6 +32,7 @@ function AppNavbar({changeLocale}) {
const navigate = useNavigate(); const navigate = useNavigate();
function navigateToProfile(){ function navigateToProfile(){
navigate("/profile") navigate("/profile")
} }
@ -49,12 +50,15 @@ function AppNavbar({changeLocale}) {
<Navbar.Toggle aria-controls="basic-navbar-nav" /> <Navbar.Toggle aria-controls="basic-navbar-nav" />
<Navbar.Collapse id="basic-navbar-nav"> <Navbar.Collapse id="basic-navbar-nav">
<Nav className="me-auto"> <Nav className="me-auto">
<NavDropdown title={<span style={{ color: theme.colors.text }}><FormattedMessage id="play" /></span>} className="navbar-title" id="basic-nav-dropdown"> <Nav.Link href="/" style={{ color: theme.colors.text }}>
<NavDropdown.Item href="play"><FormattedMessage id="play_solo" /> </NavDropdown.Item> Jouer
<NavDropdown.Divider /> </Nav.Link>
<NavDropdown.Item href="play"><FormattedMessage id="create_room" /> </NavDropdown.Item> <Nav.Link href="/presentation" style={{ color: theme.colors.text }}>
<NavDropdown.Item href="play"><FormattedMessage id="join" /> </NavDropdown.Item> Présentation
</NavDropdown> </Nav.Link>
<Nav.Link href="/info" style={{ color: theme.colors.text }}>
Info
</Nav.Link>
</Nav> </Nav>
<div className='leftdiv'> <div className='leftdiv'>
<Nav className="ml-auto navbar-title-dd"> <Nav className="ml-auto navbar-title-dd">

@ -28,6 +28,8 @@ import User from '../model/User';
const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => { const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
const theme=useTheme(); const theme=useTheme();
console.log(Player);
return ( return (
// <div className='LeaderBoardiv'> // <div className='LeaderBoardiv'>
<div className='LeaderBoardiv'> <div className='LeaderBoardiv'>
@ -48,7 +50,7 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row> </Row>
<Row> <Row>
<Col sm={10}>Moyenne d'essai :</Col> <Col sm={10}>Moyenne d'essai :</Col>
<Col className='leftRow'>{Player !== null ? Player.mastermindStats.avgNbTry.toFixed(2) : "0"}</Col> <Col className='leftRow'>{Player !== null ? Player.mastermindStats.avgNbTry : "0"}</Col>
</Row> </Row>
<hr/> <hr/>
<Row>Stats en Enigme facile :</Row> <Row>Stats en Enigme facile :</Row>
@ -62,7 +64,7 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row> </Row>
<Row> <Row>
<Col sm={10}>Ratio V/D :</Col> <Col sm={10}>Ratio V/D :</Col>
<Col className='leftRow'>{Player !== null ? Player.easyEnigmaStats.ratio.toFixed(2) + "%" : "0"}</Col> <Col className='leftRow'>{Player !== null ? Player.easyEnigmaStats.ratio.toFixed(2) + "%" : "00.0%"}</Col>
</Row> </Row>
<Row> <Row>
<Col sm={10}>Meilleur temps :</Col> <Col sm={10}>Meilleur temps :</Col>
@ -98,7 +100,7 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row> </Row>
<Row> <Row>
<Col sm={10}>Ratio V/D :</Col> <Col sm={10}>Ratio V/D :</Col>
<Col className='leftRow'>{Player !== null ? Player.hardEnigmaStats.ratio.toFixed(2) + "%" : "0"}</Col> <Col className='leftRow'>{Player !== null ? Player.hardEnigmaStats.ratio.toFixed(2) + "%" : "00.0%"}</Col>
</Row> </Row>
<Row> <Row>
<Col sm={10}>Meilleur temps :</Col> <Col sm={10}>Meilleur temps :</Col>

@ -80,12 +80,13 @@ function Lobbies() {
useEffect(() => { useEffect(() => {
socket.on("request lobbies", (map) => { socket.on("request lobbies", (map) => {
console.log("wesh")
const jsonMap = JSON.parse(map) const jsonMap = JSON.parse(map)
const tmpTab: LobbyDataProps[]=[] const tmpTab: LobbyDataProps[]=[]
for(const item of jsonMap){ for(const item of jsonMap){
tmpTab.push(new LobbyDataProps(item.key, JSONParser.JSONToPlayer(item.value.tab[0]), item.value.tab.length, item.value.started)) tmpTab.push(new LobbyDataProps(item.key, JSONParser.JSONToPlayer(item.value.tab[0]), item.value.tab.length, item.value.started))
} }
setLobbyData(tmpTab) setLobbyData(tmpTab)
}) })
}, []) }, [])

@ -178,9 +178,10 @@ function Lobby() {
for (const p of tab.tab){ for (const p of tab.tab){
tmpTab.push(JSONParser.JSONToPlayer(p)) tmpTab.push(JSONParser.JSONToPlayer(p))
} }
console.log(tmpTab) console.log(tmpTab);
setPlayersData(tmpTab) setPlayersData(tmpTab);
})
});
socket.on("room full", () => { socket.on("room full", () => {
//TODO POP UP pour quand la room est pleine //TODO POP UP pour quand la room est pleine

@ -18,8 +18,7 @@ const SignIn = () => {
try { try {
const data = { const data = {
pseudo: (event.target as any).pseudo.value, pseudo: (event.target as any).pseudo.value,
password: (event.target as any).password.value, password: (event.target as any).password.value
remember: (event.target as any).remember.checked
}; };
const validation = await AuthService.validateSignIn(data); const validation = await AuthService.validateSignIn(data);
@ -31,12 +30,12 @@ const SignIn = () => {
const result = await AuthService.signIn(data); const result = await AuthService.signIn(data);
// console.log(result); console.log(result);
setShowConfirmation(true); setShowConfirmation(true);
setTimeout(async () => { setTimeout(async () => {
await login(); await login();
navigate('/play'); // 3 secondes avant de rediriger vers la page de connexion navigate('/');
}, 1250); }, 1250);
} }
} catch (error: any) { } catch (error: any) {
@ -73,19 +72,6 @@ const SignIn = () => {
placeholder="Entrez votre mot de passe ici" placeholder="Entrez votre mot de passe ici"
/> />
</div> </div>
<div className="mb-3">
<div className="custom-control custom-checkbox">
<input
type="checkbox"
name='remember'
className="custom-control-input"
id="customCheck1"
/>
<label className="custom-control-label" htmlFor="customCheck1">
Se souvenir de moi
</label>
</div>
</div>
<div className="d-grid"> <div className="d-grid">
<button type="submit" className="btn btn-primary"> <button type="submit" className="btn btn-primary">
Soumettre <AiOutlineSend/> Soumettre <AiOutlineSend/>
@ -104,7 +90,7 @@ const SignIn = () => {
{showConfirmation && ( {showConfirmation && (
<div className="alert alert-success" role="alert"> <div className="alert alert-success" role="alert">
Connexion réussie ! Vous serez redirigé vers votre profil dans 3 secondes. Connexion réussie ! Vous serez redirigé vers votre profil.
</div> </div>
)} )}
</div> </div>

@ -40,7 +40,7 @@ function NewPlay() {
const theme=useTheme() const theme=useTheme()
const {isLoggedIn, login, user, setUserData, manager } = useAuth(); const {isLoggedIn, login, user, setUserData, manager } = useAuth();
const {setDailyEnigmeData} = useGame() const {setDailyEnigmeData, setIndicesData, setPersonData, setPersonNetworkData } = useGame()
const target = useRef(null); const target = useRef(null);
@ -52,57 +52,7 @@ function NewPlay() {
} }
} }
useEffect(() => { useEffect(() => {
const fetchUserInformation = async () => {
try {
const sessionData = await SessionService.getSession();
// Vérifie si il y a une session
if (sessionData.user) {
// Il y a une session on récupère les infos du joueur
const updatedPlayer: User = new User(socket.id, sessionData.user.pseudo, sessionData.user.profilePicture, {
nbGames: sessionData.user.soloStats.nbGames,
bestScore: sessionData.user.soloStats.bestScore,
avgNbTry: sessionData.user.soloStats.avgNbTry,
},
{
nbGames: sessionData.user.onlineStats.nbGames,
nbWins: sessionData.user.onlineStats.nbWins,
ratio: sessionData.user.onlineStats.ratio,
})
login();
setUserData(updatedPlayer);
} else {
// Pas de session on génère un guest random
const guestPlayer: User = new User(socket.id, 'Guest_' + Math.floor(Math.random() * 1000000), '',
{
nbGames: 0,
bestScore: 0,
avgNbTry: 0,
},
{
nbGames: 0,
nbWins: 0,
ratio: 0,
})
setUserData(guestPlayer);
}
} catch (error) {
console.error(error);
}
};
fetchUserInformation();
}, [isLoggedIn]);
const { setIndicesData, setPersonData, setPersonNetworkData } = useGame();
useEffect(() => {
if (user == null){ if (user == null){
manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{ manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{
if (user!=null){ if (user!=null){

@ -101,7 +101,7 @@ const SignUp = () => {
{showConfirmation && ( {showConfirmation && (
<div className="alert alert-success" role="alert"> <div className="alert alert-success" role="alert">
Inscription réussie ! Vous serez redirigé vers la page de connexion dans 3 secondes. Inscription réussie ! Vous serez redirigé vers la page de connexion.
</div> </div>
)} )}
</div> </div>

Loading…
Cancel
Save