Merge pull request 'GPUsername' (#83) from GPUsername into master

Reviewed-on: #83
pull/84/head
Pierre FERREIRA 1 year ago
commit 34711e2fa4

@ -0,0 +1,7 @@
const ADRESSE_WEBSERVER = "http://localhost:3002"
const ADRESSE_DBSERVER = "http://localhost:3003"
const ADRESSE_WEBSITE = ""
export {ADRESSE_DBSERVER, ADRESSE_WEBSERVER, ADRESSE_WEBSITE}

@ -295,6 +295,12 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
}); });
} }
socket.on("reset graph", () => {
console.log("reset graph")
initialOptions.physics.enabled = true
network.setOptions(initialOptions)
})
if (!solo){ if (!solo){
socket.on("asked all", (id) =>{ socket.on("asked all", (id) =>{
const pers = personNetwork.getPersons().find((p) => p.getId() == id) const pers = personNetwork.getPersons().find((p) => p.getId() == id)
@ -317,11 +323,6 @@ const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleS
}); });
}) })
socket.on("reset graph", () => {
initialOptions.physics.enabled = true
network.setOptions(initialOptions)
})
socket.on("node checked",(id, works, askedIndex, newPlayerIndex, socketId) => { socket.on("node checked",(id, works, askedIndex, newPlayerIndex, socketId) => {
const node = nodes.get().find((n) => id == n.id) const node = nodes.get().find((n) => id == n.id)
if (node!=undefined){ if (node!=undefined){

@ -25,7 +25,7 @@ const PlayerList: React.FC<PlayerListProps> = ({ players, playerTouched, setPlay
{ {
//@ts-ignore //@ts-ignore
players.map((player, index) => ( players.map((player, index) => (
player.id!=socket.id && <PersonStatus img={Person} state={Person} key={index} name={player.pseudo + " " + colorToEmoji(positionToColor(index), true)} playerTouched={playerTouched} setPlayerTouched={setPlayerTouched} index={index} showCircle={true}/> player.id!=socket.id && <PersonStatus img={player.profilePicture} state={Person} key={index} name={player.pseudo + " " + colorToEmoji(positionToColor(index), true)} playerTouched={playerTouched} setPlayerTouched={setPlayerTouched} index={index} showCircle={true}/>
)) ))
} }
</div> </div>

@ -38,9 +38,9 @@ const ProfilePDP = () => {
)} )}
<div className="parent"> <div className="parent">
<div className="file-upload"> <div className="file-upload">
<img src={dl} alt="upload" width='25px' height='25px'/> <img src={dl} alt="upload" width='35px' height='35px'/>
{/* <h6>Cliquer ici pour ajouter une image</h6> */} {/* <h6>Cliquer ici pour ajouter une image</h6> */}
<p>Taille recommandée : 100px</p> {/* <p>Taille recommandée : 100px</p> */}
<input type="file" accept="image/*" onChange={handleFileChange}/> <input type="file" accept="image/*" onChange={handleFileChange}/>
</div> </div>
</div> </div>

@ -0,0 +1,14 @@
async function loadImageAsync(url: string): Promise<string> {
try {
const response = await fetch(url);
const blob = await response.blob();
// Faire quelque chose avec le blob, par exemple, créer une URL blob
const blobUrl = URL.createObjectURL(blob);
return blobUrl
} catch (error) {
throw new Error("Erreur lors du chargement de l'image :");
}
}
export {loadImageAsync}

@ -7,6 +7,9 @@ import { useTheme } from '../Style/ThemeContext';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import ButtonImgNav from '../Components/ButtonImgNav'; import ButtonImgNav from '../Components/ButtonImgNav';
import defaultImg from "../res/img/Person.png"
import {loadImageAsync} from "../ImageHelper"
// @ts-ignore // @ts-ignore
function Home() { function Home() {
@ -18,11 +21,16 @@ function Home() {
if (user == null){ if (user == null){
manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{ manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{
if (user!=null){ if (user!=null){
setUserData(user)
if (loggedIn){ if (loggedIn){
login() login()
setUserData(user)
}
else{
loadImageAsync(defaultImg).then((blob) => {
user.profilePicture=blob
setUserData(user)
})
} }
console.log('isLoggedIn : ', isLoggedIn);
} }
}) })
} }

@ -1,4 +1,6 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
/* Style */
import './Lobby.css'; import './Lobby.css';
import { useTheme } from '../Style/ThemeContext'; import { useTheme } from '../Style/ThemeContext';
@ -8,25 +10,37 @@ import PersonImg from '../res/img/Person.png';
import param from '../res/icon/param.png'; import param from '../res/icon/param.png';
import cible from '../res/icon/cible.png'; import cible from '../res/icon/cible.png';
import defaultImg from "../res/img/Person.png"
/* Component */ /* Component */
import ButtonImgNav from '../Components/ButtonImgNav'; import ButtonImgNav from '../Components/ButtonImgNav';
import { io } from 'socket.io-client'; import { io } from 'socket.io-client';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
/* Context */
import { useGame } from '../Contexts/GameContext';
import { useAuth } from '../Contexts/AuthContext';
/* Model */
import PersonNetwork from '../model/PersonsNetwork'; import PersonNetwork from '../model/PersonsNetwork';
import Person from '../model/Person'; import Person from '../model/Person';
import GameCreator from '../model/GameCreator'; import GameCreator from '../model/GameCreator';
import { useGame } from '../Contexts/GameContext';
import JSONParser from '../JSONParser';
import Indice from '../model/Indices/Indice'; import Indice from '../model/Indices/Indice';
import { useNavigate } from 'react-router-dom'; import JSONParser from '../JSONParser';
import { socket } from "../SocketConfig";
import { random } from 'lodash';
import Player from '../model/Player'; import Player from '../model/Player';
import EasyBot from '../model/EasyBot'; import EasyBot from '../model/EasyBot';
import Bot from '../model/Bot'; import Bot from '../model/Bot';
import User from '../model/User'; import User from '../model/User';
import { useAuth } from '../Contexts/AuthContext'; import {loadImageAsync} from "../ImageHelper"
/* nav */
import { useNavigate } from 'react-router-dom';
/* serv */
import { socket } from "../SocketConfig";
import SessionService from '../services/SessionService'; import SessionService from '../services/SessionService';
import { random } from 'lodash';
let gameStarted = false let gameStarted = false
@ -48,6 +62,8 @@ function Lobby() {
socket.emit("lobby joined", room, new EasyBot("botId" + Math.floor(Math.random() * 1000), "Bot" + Math.floor(Math.random() * 100), "").toJson()) socket.emit("lobby joined", room, new EasyBot("botId" + Math.floor(Math.random() * 1000), "Bot" + Math.floor(Math.random() * 100), "").toJson())
} }
useEffect(() => { useEffect(() => {
if (first){ if (first){
first=false first=false
@ -55,9 +71,15 @@ function Lobby() {
if (user == null){ if (user == null){
manager.userService.fetchUserInformation().then(([u, loggedIn]) => { manager.userService.fetchUserInformation().then(([u, loggedIn]) => {
if (u!=null){ if (u!=null){
setUserData(u)
if (loggedIn){ if (loggedIn){
login() login()
setUserData(u)
}
else{
loadImageAsync(defaultImg).then((blob) => {
u.profilePicture=blob
setUserData(u)
})
} }
socket.emit("lobby joined", room, u.toJson()) socket.emit("lobby joined", room, u.toJson())
} }
@ -108,6 +130,7 @@ function Lobby() {
for (const p of tab){ for (const p of tab){
tmpTab.push(JSONParser.JSONToPlayer(p)) tmpTab.push(JSONParser.JSONToPlayer(p))
} }
console.log(tmpTab)
setPlayersData(tmpTab) setPlayersData(tmpTab)
}) })

@ -11,8 +11,6 @@ import { useTheme } from '../Style/ThemeContext';
import ButtonImgNav from "../Components/ButtonImgNav"; import ButtonImgNav from "../Components/ButtonImgNav";
/* Img */ /* Img */
import Person from '../res/img/Person.png';
/* Icon */ /* Icon */
import { socket } from '../SocketConfig'; import { socket } from '../SocketConfig';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
@ -20,18 +18,21 @@ import GameCreator from '../model/GameCreator';
import { useGame } from '../Contexts/GameContext'; import { useGame } from '../Contexts/GameContext';
import ScoreBoard from '../Components/ScoreBoard'; import ScoreBoard from '../Components/ScoreBoard';
import defaultImg from "../res/img/Person.png"
/* Types */ /* Types */
import User from '../model/User'; import User from '../model/User';
import EnigmeDuJourCreator from '../model/EnigmeDuJourCreator'; import EnigmeDuJourCreator from '../model/EnigmeDuJourCreator';
import Stub from '../model/Stub'; import Stub from '../model/Stub';
import SessionService from '../services/SessionService'; import SessionService from '../services/SessionService';
import { loadImageAsync } from '../ImageHelper';
function Play() { function Play() {
let first = true let first = true
const theme=useTheme() const theme=useTheme()
const {isLoggedIn, login, user, setUserData } = useAuth(); const {isLoggedIn, login, user, setUserData, manager } = useAuth();
const {setDailyEnigmeData} = useGame() const {setDailyEnigmeData} = useGame()
useEffect(() => { useEffect(() => {
@ -81,6 +82,26 @@ function Play() {
const { setIndicesData, setPersonData, setPersonNetworkData } = useGame(); const { setIndicesData, setPersonData, setPersonNetworkData } = useGame();
useEffect(() => {
if (user == null){
manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{
if (user!=null){
if (loggedIn){
login()
setUserData(user)
}
else{
loadImageAsync(defaultImg).then((blob) => {
user.profilePicture=blob
setUserData(user)
})
}
}
})
}
}, [isLoggedIn]);
const [room, setRoom] = useState(null); const [room, setRoom] = useState(null);
const navigate = useNavigate(); const navigate = useNavigate();
@ -146,7 +167,7 @@ function Play() {
{/* <button className='ButtonNav'> {/* <button className='ButtonNav'>
Param Param
</button> */} </button> */}
<ButtonImgNav dest='/signup' img={Person} text="Gestion du compte"/> {/* <ButtonImgNav dest='/signup' img={defaultImg} text="Gestion du compte"/> */}
</div> </div>
<div className="MidContainer"> <div className="MidContainer">
<div> <div>

@ -1,5 +1,6 @@
.mainContainer{ .mainContainer{
display: flex; display: flex;
/* flex-direction: column; */
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin: 50px; margin: 50px;
@ -20,6 +21,8 @@
min-height: 250px; min-height: 250px;
} }
/*Lpart*/
.imgContainer{ .imgContainer{
border: 5px solid black; border: 5px solid black;
border-radius: 50px; border-radius: 50px;
@ -28,6 +31,60 @@
/*Rpart*/
.Rpart{
min-width: 40%;
min-height: 250px;
margin: 20px;
padding: 20px;
background-color: white;
border: solid 1px whitesmoke;
border-radius: 15px;
}
.username-display{
display: flex;
}
.editbutton{
border-color: white;
background-color: white;
border: none;
margin-left: 15px;
height: 25px;
width: 25px;
}
.inputpseudo{
display: 'flex';
justify-content: 'flex-start';
align-items: 'center';
flex-direction: 'row';
width: 20vw;
padding: 5;
border:none;
border-bottom: solid 2px gray;
border-radius: 5;
font-size: 40px;
}
.bottom{
display: flex;
flex-direction: column;
justify-content: end;
align-items: end;
height: 100px;
}
/*File upload*/ /*File upload*/
.parent { .parent {
/* width: 250px; */ /* width: 250px; */
@ -43,8 +100,9 @@
/* padding: 1.5rem; */ /* padding: 1.5rem; */
position: relative; position: relative;
cursor: pointer; cursor: pointer;
max-width: 100px; width: 100px;
max-height: 50px; height: 50px;
} }
.file-upload p { .file-upload p {
font-size: 0.5rem; font-size: 0.5rem;

@ -1,30 +1,193 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import ProfilePDP from '../Components/ProfilePDP'; import ProfilePDP from '../Components/ProfilePDP';
import './Profile.css'
import SessionService from '../services/SessionService'; import SessionService from '../services/SessionService';
import { PlayerProps } from '../types/Player'; import { PlayerProps } from '../types/Player';
import { update } from 'lodash'; import { delay, update } from 'lodash';
import User from '../model/User';
import { socket } from '../SocketConfig'; import { socket } from '../SocketConfig';
import AuthService from '../services/AuthService';
/* Style */
import './Profile.css'
import Edit from "../res/icon/edit-pen.png"
import Coche from '../res/icon/coche.png'
import Cancel from '../res/icon/cancel.png'
/* Model */
import User from '../model/User';
/* Context */
import { useAuth } from '../Contexts/AuthContext'; import { useAuth } from '../Contexts/AuthContext';
/* Boostrap */
import Button from 'react-bootstrap/Button';
import Alert from 'react-bootstrap/Alert';
import Modal from 'react-bootstrap/Modal';
import Form from 'react-bootstrap/Form';
import { useNavigate } from 'react-router-dom';
//@ts-ignore //@ts-ignore
const Profile = () => { const Profile = () => {
const navigate = useNavigate();
//let player; //let player;
const {user} = useAuth() const {user, logout} = useAuth()
// let pseudoNotNull;
// if(user?.pseudo != null){
// pseudoNotNull = user.pseudo;
// }
const [editingUsername, setEditingUsername] = useState(false);
const [newUsername, setNewUsername] = useState(user?.pseudo);
//@ts-ignore
const onUsernameChange = (newUsername) => {
if(user?.pseudo != null){
SessionService.UpdatePseudo(user.pseudo, newUsername)
user.pseudo = newUsername;
}
}
const handleUsernameChange = () => {
// Maj du pseudo
onUsernameChange(newUsername);
// Désactiver le mode d'édition
setEditingUsername(false);
};
//* Gestion Modal de suppression :
const [showDeleteModal, setShowDeleteModal] = useState(false);
const handleShowDeleteModal = () => {
setShowDeleteModal(true);
};
const handleCloseDeleteModal = () => {
setShowDeleteModal(false);
};
//* Confirmation avec la phrase :
const [confirmationPhrase, setConfirmationPhrase] = useState('');
const [showWrong, setShowWrong] = useState(false);
//@ts-ignore
const handleConfirmationPhraseChange = (e) => {
setConfirmationPhrase(e.target.value);
};
const handleDeleteAccount = () => {
// Verification de la phrase
if (confirmationPhrase.toLowerCase() === 'supprimer mon compte') {
console.log('Compte supprimé !');
console.log(user);
if(user!= null){
const pseudo = user.pseudo;
AuthService.delAccount(pseudo);
AuthService.logout();
logout();
}
else{
console.error("l'utilisateur ne peut pas être null")
}
handleCloseDeleteModal();
navigate("/play")
} else {
console.error('Phrase de confirmation incorrecte.');
setShowWrong(true);
setTimeout(async () => {
setShowWrong(false);
}, 3000);
}
};
//! useeffect pour l'instant, il faudra voir pour changer la facons de prendre une session
return ( return (
<>
<center><h1>Mon Compte</h1></center>
<div className='mainContainer'> <div className='mainContainer'>
<ProfilePDP/> <div>
<h1> {user?.pseudo} </h1> <ProfilePDP/>
</div>
<div className='Rpart'>
{editingUsername ? (
<div className='username-edit'>
<input
type='text'
className='inputpseudo'
value={newUsername}
onChange={(e) => setNewUsername(e.target.value)}
/>
<button className='editbutton' onClick={handleUsernameChange}>
<img src={Coche} alt='edit' width='25' height='25'/>
</button>
<button className='editbutton' onClick={() => setEditingUsername(false)}>
<img src={Cancel} alt='edit' width='25' height='25'/>
</button>
</div>
) : (
<div className='username-display'>
<h1>{user?.pseudo}</h1>
<button className='editbutton' onClick={() => setEditingUsername(true)}>
<img src={Edit} alt='edit' width='25' height='25'/>
</button>
</div>
)
}
<hr/>
{!editingUsername ? (
<Button variant="secondary">Modifier le mot de passe</Button>
) : (
<Alert key='info' variant='info' style={{width:'100%'}}>
Vous êtes en mode "édition".
</Alert>
)}
<div className='bottom'>
<>
<Button variant="danger" onClick={handleShowDeleteModal}>Supprimer</Button>
<Modal show={showDeleteModal} onHide={handleCloseDeleteModal}>
<Modal.Header closeButton>
<Modal.Title>Confirmation de suppression</Modal.Title>
</Modal.Header>
<Modal.Body>
<p>
Pour confirmer la suppression de votre compte, veuillez
entrer la phrase : "supprimer mon compte".
</p>
<Form.Control
type='text'
placeholder='Entrez la phrase de confirmation'
value={confirmationPhrase}
onChange={handleConfirmationPhraseChange}
/>
{
showWrong &&
<Alert key='infomodel' variant='danger' style={{width:'100%'}}>
La phrase de confirmation est incorrecte.
</Alert>
}
</Modal.Body>
<Modal.Footer>
<Button variant='secondary' onClick={handleCloseDeleteModal}>
Annuler
</Button>
<Button variant='danger' onClick={handleDeleteAccount}>Supprimer mon compte</Button>
</Modal.Footer>
</Modal>
</>
</div>
</div>
</div> </div>
</>
); );
}; };

@ -1,5 +1,5 @@
import { io } from "socket.io-client"; import { io } from "socket.io-client";
import { ADRESSE_WEBSERVER } from "./adressConfig"; import { ADRESSE_WEBSERVER } from "./AdressConfig";
const socket = io(ADRESSE_WEBSERVER); const socket = io(ADRESSE_WEBSERVER);

@ -2,6 +2,6 @@ const ADRESSE_WEBSERVER = "http://localhost:3002"
const ADRESSE_DBSERVER = "http://localhost:3003" const ADRESSE_DBSERVER = "http://localhost:3003"
const ADRESSE_WEBSITE = "http://localhost:3000" const ADRESSE_WEBSITE = ""
export {ADRESSE_DBSERVER, ADRESSE_WEBSERVER, ADRESSE_WEBSITE} export {ADRESSE_DBSERVER, ADRESSE_WEBSERVER, ADRESSE_WEBSITE}

@ -1,16 +1,12 @@
import Player from "./Player"; import Player from "./Player";
import defaultpdp from "../res/img/Person.png" import defaultImg from "../res/img/Person.png"
class User extends Player{ class User extends Player{
public soloStats: any public soloStats: any
public onlineStats: any public onlineStats: any
constructor(id: string, pseudo: string, profilePicture: string, soloStats: any, onlineStats: any){ constructor(id: string, pseudo: string, profilePicture: string, soloStats: any, onlineStats: any){
if (profilePicture == ""){ super(id, pseudo, profilePicture || defaultImg)
profilePicture = defaultpdp
}
super(id, pseudo, profilePicture)
this.soloStats=soloStats this.soloStats=soloStats
this.onlineStats=onlineStats this.onlineStats=onlineStats
} }
@ -20,6 +16,7 @@ class User extends Player{
return { return {
type: "User", type: "User",
id: this.id, id: this.id,
profilePicture: this.profilePicture,
pseudo: this.pseudo, pseudo: this.pseudo,
soloStats: this.soloStats, soloStats: this.soloStats,
onlineStats: this.onlineStats onlineStats: this.onlineStats

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

@ -5,7 +5,7 @@ const bcrypt = require('bcrypt');
const sqlite3 = require('sqlite3'); const sqlite3 = require('sqlite3');
class AuthController { class AuthController {
static async signUp(req, res) { static async signUp(req, res) {
const databaseService = new DatabaseService(); const databaseService = new DatabaseService();
const pseudo = req.body.pseudo; const pseudo = req.body.pseudo;
const date = new Date(); const date = new Date();
@ -98,17 +98,40 @@ class AuthController {
const hour = date.getHours(); const hour = date.getHours();
const minutes = date.getMinutes(); const minutes = date.getMinutes();
// Détruire la session pour déconnecter l'utilisateur // Détruire la session pour déconnecter l'utilisateur
req.session.destroy((err) => { req.session.destroy((err) => {
if (err) { if (err) {
console.error(err); console.error(err);
res.status(500).json({ error: 'Erreur lors de la déconnexion.' }); res.status(500).json({ error: 'Erreur lors de la déconnexion.' });
} else { } else {
console.log("[" + hour + ":" + minutes + "] " + pseudo + " have been disconnected."); console.log("[" + hour + ":" + minutes + "] " + pseudo + " have been disconnected.");
res.status(200).json({ message: 'Déconnexion réussie' }); 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();
}
}
} }
module.exports = AuthController; module.exports = AuthController;

@ -111,6 +111,36 @@ class SessionController {
await db.disconnect(); 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();
}
}
} }
module.exports = SessionController; module.exports = SessionController;

@ -7,9 +7,11 @@ const SessionController = require('../controllers/SessionController');
router.post('/auth/signup', AuthController.signUp); router.post('/auth/signup', AuthController.signUp);
router.post('/auth/signin', AuthController.signIn); router.post('/auth/signin', AuthController.signIn);
router.delete('/auth/logout', AuthController.logout) router.delete('/auth/logout', AuthController.logout)
router.delete('/auth/delAccount', AuthController.delAccount)
// Routes pour les sessions // Routes pour les sessions
router.get('/session', SessionController.getUserInformation); router.get('/session', SessionController.getUserInformation);
router.put('/session/updatePseudo', SessionController.UpdatePseudo);
router.put('/session/updateSoloStats', SessionController.updateSoloStats); router.put('/session/updateSoloStats', SessionController.updateSoloStats);
router.put('/session/updateOnlineStats', SessionController.updateOnlineStats); router.put('/session/updateOnlineStats', SessionController.updateOnlineStats);

@ -1,5 +1,6 @@
const sqlite3 = require('sqlite3'); const sqlite3 = require('sqlite3');
const path = require('path'); const path = require('path');
const { rejects } = require('assert');
class DatabaseService { class DatabaseService {
constructor(){ constructor(){
@ -173,6 +174,58 @@ class DatabaseService {
}); });
}); });
} }
async deleteUser(userId){
return new Promise((resolve, reject) => {
this.client.run('DELETE FROM users WHERE idUser=?', userId, (err, result) => {
if(err){
reject(err);
}
else{
resolve(result);
}
});
});
}
async deleteSoloStat(userId){
return new Promise((resolve, reject) => {
this.client.run('DELETE FROM solo_stats WHERE idUser=?', userId, (err, result) => {
if(err){
reject(err);
}
else{
resolve(result);
}
});
});
}
async deleteOnlineStat(userId){
return new Promise((resolve, reject) => {
this.client.run('DELETE FROM online_stats WHERE idUser=?', userId, (err, result) => {
if(err){
reject(err);
}
else{
resolve(result);
}
});
});
}
async updatePseudo(userId, newPseudo){
return new Promise((resolve, reject) => {
this.client.run('UPDATE users SET pseudo = ? WHERE idUser = ?', newPseudo, userId, (err, result) => {
if(err){
reject(err);
}
else{
resolve(result);
}
});
});
}
} }
module.exports = DatabaseService; module.exports = DatabaseService;

@ -1,5 +1,7 @@
import { ADRESSE_DBSERVER } from '../adressConfig';
import VerificationService from './VerificationService'; import VerificationService from './VerificationService';
import {ADRESSE_DBSERVER} from "../AdressConfig"
import User from '../model/User';
class AuthService{ class AuthService{
// Méthode pour vérifier les données de connexion // Méthode pour vérifier les données de connexion
@ -82,6 +84,30 @@ class AuthService{
throw error; throw error;
} }
} }
static async delAccount(pseudo: string){
try {
const response = await fetch(ADRESSE_DBSERVER + '/auth/delAccount', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ pseudo }),
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 AuthService; export default AuthService;

@ -1,4 +1,4 @@
import { ADRESSE_DBSERVER } from "../adressConfig"; import {ADRESSE_DBSERVER} from "../AdressConfig"
class SessionService { class SessionService {
static async getSession() { static async getSession() {
@ -83,7 +83,34 @@ class SessionService {
throw error; throw error;
} }
} }
}
export default SessionService; static async UpdatePseudo(pseudo : string, newPseudo : string) {
console.log("pseudo : " + pseudo + " newpseudo : " + newPseudo)
try {
const response = await fetch(ADRESSE_DBSERVER + '/session/updatePseudo', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
pseudo,
newPseudo
}),
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 SessionService;

Loading…
Cancel
Save