You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cryptid/cryptide_project/server/api/controllers/SessionController.js

268 lines
10 KiB

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 getUserInformation(req, res) {
const db = new DatabaseService();
const date = new Date();
const hour = date.getHours();
const minutes = date.getMinutes();
try{
await db.connect();
if (!req.session.user) {
res.status(200).json({ error: "true", message: 'User not found' });
return;
}
// Récupérer les stats mastermind de l'utilisateur
let nbGamesMM = await db.getNbGamesMastermindByUserId(req.session.user.idUser);
nbGamesMM = nbGamesMM.nbGames || 0;
let bestScoreMM = await db.getBestScoreMastermindByUserId(req.session.user.idUser);
bestScoreMM = bestScoreMM.bestScore || 0;
let avgNbTryMM= await db.getAvgNbTryMastermindByUserId(req.session.user.idUser);
avgNbTryMM = avgNbTryMM.avgNbTry || 0;
req.session.user.mastermindStats = {nbGames: nbGamesMM,
bestScore: bestScoreMM,
avgNbTry: avgNbTryMM};
// Récupérer les stats enigme facile
let nbGamesEF = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
nbGamesEF = nbGamesEF.nbGames || 0;
let nbWinsEF = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
nbWinsEF = nbWinsEF.nbWins || 0;
let ratioEF = 0;
if (nbWinsEF.nbWins > 0){
ratioEF = (nbWinsEF.nbWins / nbGamesEF.nbGames) * 100;
}
let bestTimeEF = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_FACILE);
bestTimeEF = bestTimeEF.bestTime || 0;
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,
bestTime: bestTimeEF,
avgTime: avgTimeEF};
// Récupérer les stats enigme moyenne
let nbGamesEM = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_MOYEN);
nbGamesEM = nbGamesEM.nbGames || 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,
bestScore: bestScoreEM,
avgNbTry: avgNbTryEM};
// Récupérer les stats enigme difficile
let nbGamesED = await db.getNbGamesEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
nbGamesED = nbGamesED.nbGames || 0;
let nbWinsED = await db.getNbWinsEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
nbWinsED = nbWinsED.nbWins || 0;
let ratioED = 0;
if (nbWinsED.nbWins > 0){
ratioED = (nbWinsED.nbWins / nbGamesED.nbGames) * 100;
}
let bestTimeED = await db.getBestTimeEnigmeByUserId(req.session.user.idUser, ENIGME_DIFFICILE);
bestTimeED = bestTimeED.bestTime || 0;
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,
bestTime: bestTimeED,
avgTime: avgTimeED};
// Récupérer les stats en ligne de l'utilisateur
let nbGamesOL = await db.getNbGamesOnlineByUserId(req.session.user.idUser);
nbGamesOL = nbGamesOL.nbGames || 0;
let nbWinsOL = await db.getNbWinsOnlineByUserId(req.session.user.idUser);
nbWinsOL = nbWinsOL.nbWins || 0;
let ratioOL = 0
if (nbWinsOL.nbWins > 0){
ratioOL = (nbWinsOL.nbWins / nbGamesOL.nbGames) * 100;
}
req.session.user.onlineStats = {nbGames: nbGamesOL,
nbWins: nbWinsOL,
ratio: ratioOL};
res.status(200).json({ user: req.session.user });
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la récupération de l\'utilisateur.' });
}
finally{
await db.disconnect();
}
}
static async UpdatePseudo(req, res){
const db = new DatabaseService();
try{
await db.connect();
const user = await db.getUserByPseudo(req.body.pseudo);
console.log("utilisateur" + user.idUser + " pseudo" + user.pseudo)
if (!user) {
res.status(200).json({ error: "true", message: 'User not found' });
return;
}
await db.updatePseudo(user.idUser, req.body.newPseudo); //* update
const updatedUser = await db.getUserByPseudo(req.body.newPseudo);
console.log("updaetdutilisateur" + updatedUser.idUser + " pseudo" + updatedUser.pseudo)
req.session.user.pseudo = updatedUser.pseudo;
console.log("req.session.user.pseudo" + req.session.user.pseudo)
res.status(200).json({ user: req.session.user }); //verif rep
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la modification du pseudo de l\'utilisateur.' });
}
finally{
await db.disconnect();
}
}
static async addMastermindStats(req, res){
const db = new DatabaseService();
console.log(req.body)
try{
await db.connect();
const user = await db.getUserByPseudo(req.body.pseudo);
if (!user) {
res.status(200).json({ error: "true", message: 'User not found' });
return;
}
console.log(user)
await db.addMastermindStats(user.idUser, req.body.score, req.body.time);
res.status(200).json({ user: req.session.user }); //verif rep
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la modification des stats mastermind de l\'utilisateur.' });
}
finally{
await db.disconnect();
}
}
static async addEasyEnigmaStats(req, res){
const db = new DatabaseService();
try{
await db.connect();
const user = await db.getUserByPseudo(req.body.pseudo);
if (!user) {
res.status(200).json({ error: "true", message: 'User not found' });
return;
}
await db.addEasyEnigmaStats(user.idUser, ENIGME_FACILE, req.body.win, req.body.time);
res.status(200).json({ user: req.session.user }); //verif rep
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la modification des stats de l\'énigme facile de l\'utilisateur.' });
}
finally{
await db.disconnect();
}
}
static async addMediumEnigmaStats(req, res){
const db = new DatabaseService();
try{
await db.connect();
const user = await db.getUserByPseudo(req.body.pseudo);
if (!user) {
res.status(200).json({ error: "true", message: 'User not found' });
return;
}
await db.addMediumEnigmaStats(user.idUser, ENIGME_MOYEN, req.body.score, req.body.time);
res.status(200).json({ user: req.session.user }); //verif rep
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la modification des stats de l\'énigme moyenne de l\'utilisateur.' });
}
finally{
await db.disconnect();
}
}
static async addHardEnigmaStats(req, res){
const db = new DatabaseService();
try{
await db.connect();
const user = await db.getUserByPseudo(req.body.pseudo);
if (!user) {
res.status(200).json({ error: "true", message: 'User not found' });
return;
}
await db.addHardEnigmaStats(user.idUser, ENIGME_DIFFICILE, req.body.win, req.body.time);
res.status(200).json({ user: req.session.user }); //verif rep
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la modification des stats de l\'énigme difficile de l\'utilisateur.' });
}
finally{
await db.disconnect();
}
}
static async addOnlineStats(req, res){
const db = new DatabaseService();
try{
await db.connect();
const user = await db.getUserByPseudo(req.body.pseudo);
if (!user) {
res.status(200).json({ error: "true", message: 'User not found' });
return;
}
await db.addOnlineStats(user.idUser, req.body.win, req.body.time);
res.status(200).json({ user: req.session.user }); //verif rep
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la modification des stats en ligne de l\'utilisateur.' });
}
finally{
await db.disconnect();
}
}
}
module.exports = SessionController;