diff --git a/src/routes/user/user.controller.ts b/src/routes/user/user.controller.ts index beb1c69..215d3c9 100644 --- a/src/routes/user/user.controller.ts +++ b/src/routes/user/user.controller.ts @@ -57,14 +57,18 @@ export class UserController { } @Patch(':id/valider') - @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) + @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE, RoleType.ADMINISTRATEUR) @ApiOperation({ summary: 'Valider un compte utilisateur' }) + @ApiParam({ name: 'id', description: "UUID de l'utilisateur" }) + @ApiResponse({ status: 400, description: 'ID invalide' }) + @ApiResponse({ status: 403, description: 'Accès refusé' }) @ApiResponse({ status: 200, description: 'Compte validé avec succès' }) validerUtilisateur( @Param('id') id: string, - @User() currentUser: Users + @User() currentUser: Users, + @Body('comment') comment?: string, ) { - return this.userService.validateUser(id, currentUser); + return this.userService.validateUser(id, currentUser, comment); } diff --git a/src/routes/user/user.service.ts b/src/routes/user/user.service.ts index 30beb74..f2b79c8 100644 --- a/src/routes/user/user.service.ts +++ b/src/routes/user/user.service.ts @@ -5,12 +5,16 @@ import { Repository } from "typeorm"; import { CreateUserDto } from "./dto/create_user.dto"; import { UpdateUserDto } from "./dto/update_user.dto"; import * as bcrypt from 'bcrypt'; +import { StatutValidationType, Validation } from "src/entities/validations.entity"; @Injectable() export class UserService { constructor( @InjectRepository(Users) - private readonly usersRepository: Repository + private readonly usersRepository: Repository, + + @InjectRepository(Validation) + private readonly validationRepository: Repository ) { } // Création utilisateur @@ -102,14 +106,26 @@ export class UserService { return this.usersRepository.save(user); } - async validateUser(user_id: string, currentUser: Users): Promise { + async validateUser(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.ACTIF; - return this.usersRepository.save(user); + const savedUser = await this.usersRepository.save(user); + + const validation = this.validationRepository.create({ + user: savedUser, + type: 'validation_compte', + status: StatutValidationType.VALIDE, + validated_by: currentUser, + comment + + }); + await this.validationRepository.save(validation); + return savedUser; } async remove(id: string): Promise {