diff --git a/src/routes/user/user.service.ts b/src/routes/user/user.service.ts index f2b79c8..f235324 100644 --- a/src/routes/user/user.service.ts +++ b/src/routes/user/user.service.ts @@ -43,7 +43,9 @@ export class UserService { prenom: dto.prenom, nom: dto.nom, role: dto.role, - statut: dto.statut, + statut: currentUser?.role === RoleType.SUPER_ADMIN + ? dto.statut + : StatutUtilisateurType.EN_ATTENTE, genre: dto.genre, telephone: dto.telephone, ville: dto.ville, @@ -128,10 +130,29 @@ export class UserService { return savedUser; } + async suspendUser(user_id: string, currentUser: Users, comment?: string): Promise { + if (![RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR, RoleType.GESTIONNAIRE].includes(currentUser.role)) { + throw new ForbiddenException('Accès réservé aux super admins, administrateurs et gestionnaires'); + } + const user = await this.usersRepository.findOne({ where: { id: user_id } }); + if (!user) throw new NotFoundException('Utilisateur introuvable'); + user.statut = StatutUtilisateurType.SUSPENDU; + const savedUser = await this.usersRepository.save(user); + + const suspend = this.validationRepository.create({ + user: savedUser, + type: 'suspension_compte', + status: StatutValidationType.VALIDE, + validated_by: currentUser, + comment + }) + await this.validationRepository.save(suspend); + return savedUser; + } async remove(id: string): Promise { const result = await this.usersRepository.delete(id); if (result.affected === 0) { throw new NotFoundException('Utilisateur introuvable'); } } -} +} \ No newline at end of file