From 31fc17fd400bd737b65ff7b67d7a6cfec93e0744 Mon Sep 17 00:00:00 2001 From: sdraris Date: Mon, 15 Sep 2025 11:54:51 +0200 Subject: [PATCH] added status change --- src/routes/user/user.controller.ts | 18 +++++++++++++++--- src/routes/user/user.service.ts | 12 +++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/routes/user/user.controller.ts b/src/routes/user/user.controller.ts index 85c10e0..beb1c69 100644 --- a/src/routes/user/user.controller.ts +++ b/src/routes/user/user.controller.ts @@ -1,5 +1,5 @@ import { Body, Controller, Delete, Get, Param, Patch, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiOperation, ApiParam, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger'; import { AuthGuard } from 'src/common/guards/auth.guard'; import { Roles } from 'src/common/decorators/roles.decorator'; import { User } from 'src/common/decorators/user.decorator'; @@ -13,7 +13,7 @@ import { UpdateUserDto } from './dto/update_user.dto'; @UseGuards(AuthGuard) @Controller('users') export class UserController { - constructor(private readonly userService: UserService) {} + constructor(private readonly userService: UserService) { } // Création d'un utilisateur (réservée aux super admins) @Post() @@ -56,9 +56,21 @@ export class UserController { return this.userService.updateUser(id, dto, currentUser); } + @Patch(':id/valider') + @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) + @ApiOperation({ summary: 'Valider un compte utilisateur' }) + @ApiResponse({ status: 200, description: 'Compte validé avec succès' }) + validerUtilisateur( + @Param('id') id: string, + @User() currentUser: Users + ) { + return this.userService.validateUser(id, currentUser); + } + + // Supprimer un utilisateur (super_admin et gestionnaire) @Delete(':id') - @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE) + @Roles(RoleType.SUPER_ADMIN, RoleType.GESTIONNAIRE, RoleType.ADMINISTRATEUR) @ApiOperation({ summary: 'Supprimer un utilisateur' }) @ApiParam({ name: 'id', description: "UUID de l'utilisateur" }) remove(@Param('id') id: string) { diff --git a/src/routes/user/user.service.ts b/src/routes/user/user.service.ts index 562952c..30beb74 100644 --- a/src/routes/user/user.service.ts +++ b/src/routes/user/user.service.ts @@ -1,6 +1,6 @@ import { ForbiddenException, Injectable, NotFoundException } from "@nestjs/common"; import { InjectRepository } from "@nestjs/typeorm"; -import { RoleType, Users } from "src/entities/users.entity"; +import { RoleType, StatutUtilisateurType, Users } from "src/entities/users.entity"; import { Repository } from "typeorm"; import { CreateUserDto } from "./dto/create_user.dto"; import { UpdateUserDto } from "./dto/update_user.dto"; @@ -102,6 +102,16 @@ export class UserService { return this.usersRepository.save(user); } + async validateUser(user_id: string, currentUser: Users): 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); + } + async remove(id: string): Promise { const result = await this.usersRepository.delete(id); if (result.affected === 0) {