Users
Ce document explique le fonctionnement des fichiers liés à la gestion des utilisateurs dans le backend de l'application AlgoForge. Ces fichiers incluent le contrôleur, le service, et les DTOs associés.
1. users.controller.ts
Description
Le fichier users.controller.ts
définit le contrôleur pour les utilisateurs. Il expose les routes HTTP permettant de gérer les utilisateurs (inscription, connexion, récupération, mise à jour, suppression). Ce contrôleur utilise le service UsersService
pour effectuer les opérations métier.
Routes Disponibles
- POST
/register
:- Inscription d'un utilisateur.
- GET
/confirm/:token
:- Confirmation de l'inscription via un token.
- POST
/login
:- Connexion d'un utilisateur.
- GET
/logout
:- Déconnexion d'un utilisateur.
- POST
/recover
:- Récupération du mot de passe.
- GET
/:id
:- Récupérer un utilisateur par son ID.
- PUT
/:id
:- Mettre à jour un utilisateur.
- DELETE
/:id
:- Supprimer un utilisateur.
Fonctionnement
- Initialisation :
- Le contrôleur initialise un routeur Express et applique le middleware
authMiddleware
pour vérifier les droits de l'utilisateur sur certaines routes.
- Le contrôleur initialise un routeur Express et applique le middleware
- Gestion des Routes :
- Chaque route est associée à une méthode asynchrone qui utilise le service
UsersService
pour effectuer les opérations nécessaires.
- Chaque route est associée à une méthode asynchrone qui utilise le service
- Gestion des Réponses :
- Les réponses sont standardisées à l'aide des classes de réponse (
OkRes
,NotFoundRes
, etc.).
- Les réponses sont standardisées à l'aide des classes de réponse (
Exemple de Code
Inscription d'un Utilisateur (POST /register
)
private async register(req: Request, res: Response) {
const { email, password, pseudo } = req.body;
const data = new UserRegisterDTO();
data.pseudo = pseudo;
data.email = email;
data.password = password;
const reponse = await this.usersService.register(data);
return res
.status(reponse.statut)
.json({ message: reponse.message, data: reponse.data });
}
2. users.service.ts
Description
Le fichier users.service.ts
contient la logique métier pour la gestion des utilisateurs. Il interagit avec la base de données et les services externes (comme le service de messagerie) pour effectuer des opérations telles que l'inscription, la connexion, et la suppression d'utilisateurs.
Fonctionnalités Principales
-
Inscription d'un Utilisateur :
register(data: UserRegisterDTO)
:- Valide les données de l'utilisateur.
- Vérifie l'unicité de l'email.
- Hash le mot de passe.
- Crée un utilisateur dans la base de données.
- Génère un token de confirmation et envoie un email.
-
Confirmation de l'Inscription :
confirm(mailToken: string)
:- Décode le token pour récupérer l'ID de l'utilisateur.
- Vérifie que l'utilisateur existe et n'est pas déjà confirmé.
- Met à jour le statut de l'utilisateur comme "vérifié".
-
Connexion d'un Utilisateur :
login(data: UserLoginDTO)
:- Vérifie les données de connexion.
- Authentifie l'utilisateur en comparant le mot de passe hashé.
- Génère un token d'accès et le stocke dans la base de données.
-
Déconnexion d'un Utilisateur :
logout(token: string)
:- Supprime le token d'accès de la base de données.
-
Récupération d'un Utilisateur :
getUser(id: number)
:- Récupère un utilisateur par son ID.
-
Mise à Jour d'un Utilisateur :
updateUser(id: number, data: UserUpdateDTO)
:- Vérifie les droits de l'utilisateur.
- Met à jour les informations de l'utilisateur (pseudo, mot de passe, photo de profil).
-
Suppression d'un Utilisateur :
deleteUser(id: number, requestedUserId: number)
:- Supprime l'utilisateur et toutes ses données associées (tokens, algorithmes, dossiers).
Exemple de Code
Inscription d'un Utilisateur
async register(data: UserRegisterDTO) {
if (!data.email || !data.password || !data.pseudo) {
return new BadRequestRes(Responses.General.Missing_data);
}
const validationErrors = await validateClass(data);
if (validationErrors) {
return new BadRequestRes(
Responses.General.Invalid_data,
validationErrors,
);
}
const userMails = await this.utilisateursRepository.find({
select: { adresseMail: true },
});
if (userMails.some((user) => user.adresseMail === data.email)) {
return new Res(409, Responses.User.Email_already_exists);
}
const hash = hashString(data.password);
const newUser = new Utilisateur();
newUser.adresseMail = data.email;
newUser.mdpHash = hash;
newUser.pseudo = data.pseudo;
newUser.dateInscription = new Date().getTime();
const savedUser = await this.utilisateursRepository.save(newUser);
const mailToken = await createMailToken(savedUser.id);
await this.mailService.sendConfirmationMail(
savedUser.adresseMail,
savedUser,
mailToken,
);
return new CreatedRes(Responses.User.Success.Created, savedUser);
}
3. users.dto.ts
Description
Le fichier users.dto.ts
contient les classes de validation pour les données des utilisateurs. Ces classes sont utilisées pour valider les données reçues dans les requêtes HTTP avant de les traiter.
Classes Disponibles
-
UserRegisterDTO
:- Utilisée pour valider les données lors de l'inscription d'un utilisateur.
- Attributs :
pseudo
: Pseudo de l'utilisateur (entre 3 et 30 caractères).email
: Email de l'utilisateur.password
: Mot de passe de l'utilisateur (entre 8 et 255 caractères).
-
UserLoginDTO
:- Utilisée pour valider les données lors de la connexion d'un utilisateur.
- Attributs :
email
: Email de l'utilisateur.password
: Mot de passe de l'utilisateur.
-
UserUpdateDTO
:- Utilisée pour valider les données lors de la mise à jour d'un utilisateur.
- Attributs :
pseudo
(optionnel) : Nouveau pseudo de l'utilisateur.currentPassword
: Mot de passe actuel de l'utilisateur.newPassword
(optionnel) : Nouveau mot de passe de l'utilisateur.urlPfp
(optionnel) : URL de la photo de profil.requestedUserId
: ID de l'utilisateur effectuant la requête.
Exemple de Code
Classe UserRegisterDTO
export class UserRegisterDTO {
@Length(3, 30)
@IsNotEmpty()
pseudo: string;
@IsEmail()
@IsNotEmpty()
email: string;
@Length(8, 255)
@IsNotEmpty()
password: string;
}