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/src/server/controllers/AuthController.js

169 lines
5.8 KiB

const UserService = require('../services/UserService');
const DatabaseService = require('../services/DatabaseService');
const bcrypt = require('bcrypt');
const sqlite3 = require('sqlite3');
class AuthController {
static async signUp(req, res) {
const databaseService = new DatabaseService();
const pseudo = req.body.pseudo;
const date = new Date();
const hour = date.getHours();
const minutes = date.getMinutes();
try {
await databaseService.connect();
// Vérifier que le pseudo n'existe pas déjà
const verif = await databaseService.getUserByPseudo(pseudo);
if (verif) {
res.status(400).json({ error: 'Le pseudo est déjà utilisé.' });
return;
}
// Créer un nouvel utilisateur
const currentUser = await UserService.createUser(req.body);
const insertedUser = await databaseService.insertUser(currentUser);
const user = await databaseService.getUserByPseudo(pseudo);
// Initialiser les stats de l'utilisateur
await databaseService.initSoloStats(user.idUser);
await databaseService.initOnlineStats(user.idUser);
const soloStats = await databaseService.getSoloStatsByUserId(user.idUser);
const onlineStats = await databaseService.getOnlineStatsByUserId(user.idUser);
await databaseService.updateUserIDStats(user.idUser, soloStats.idSoloStats, onlineStats.idOnlineStats);
console.log("[" + hour + ":" + minutes + "] " + user.pseudo + " have been registered.");
res.status(201).json({ message: 'Inscription réussie', user: insertedUser});
}
catch (error) {
// Gérer les erreurs
console.error(error);
res.status(500).json({ error: 'Erreur lors de l\'inscription.' });
}
finally {
await databaseService.disconnect();
}
}
static async signIn(req, res) {
const databaseService = new DatabaseService();
const date = new Date();
const hour = date.getHours();
const minutes = date.getMinutes();
try{
await databaseService.connect();
// Vérifier que le pseudo existe
const pseudo = req.body.pseudo;
const user = await databaseService.getUserByPseudo(pseudo);
if (!user) {
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
return;
}
// Vérifier que le mot de passe est correct
const password = req.body.password;
const validPassword = await bcrypt.compare(password, user.password);
if (!validPassword) {
res.status(400).json({ error: 'Le mot de passe est incorrect.' });
return;
}
// Stocker l'utilisateur dans la session)
req.session.user = user;
// Envoyer une réponse réussie
console.log("[" + hour + ":" + minutes + "] " + user.pseudo + " have been connected.");
res.status(200).json({ message: 'Connexion réussie', user: user });
}
catch(error){
// Gérer les erreurs
console.error(error);
res.status(500).json({ error: 'Erreur lors de la connexion.' });
}
finally{
await databaseService.disconnect();
}
}
static async logout(req, res) {
const pseudo = req.session.user.pseudo;
const date = new Date();
const hour = date.getHours();
const minutes = date.getMinutes();
// Détruire la session pour déconnecter l'utilisateur
req.session.destroy((err) => {
if (err) {
console.error(err);
res.status(500).json({ error: 'Erreur lors de la déconnexion.' });
} else {
console.log("[" + hour + ":" + minutes + "] " + pseudo + " have been disconnected.");
res.status(200).json({ message: 'Déconnexion réussie' });
}
});
}
static async delAccount(req, res){
const db = new DatabaseService();
try{
await db.connect();
const user = await db.getUserByPseudo(req.body.pseudo);
if(!user){
res.status(400).json({ error: 'Le pseudo n\'existe pas.' });
return;
}
await db.deleteSoloStat(user.idUser);
await db.deleteOnlineStat(user.idUser);
await db.deleteUser(user.idUser);
}
catch(error){
console.error(error);
res.status(500).json({ error: 'Erreur lors de la supression du compte.' });
}
finally{
db.disconnect();
}
}
static async UpdateMDP(req, res){
console.log("UpdateMDP");
// 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();
// }
}
}
module.exports = AuthController;