feat(#25): API GET /users/pending - liste comptes en attente

- UserController: endpoint GET /users/pending (rôles SUPER_ADMIN, ADMINISTRATEUR, GESTIONNAIRE)
- UserService: findPendingUsers(role?) avec filtre statut EN_ATTENTE
- GestionnairesService: retrait date_consentement_photo (non présent dans DTO)

Made-with: Cursor
This commit is contained in:
MARTIN Julien 2026-02-26 10:37:22 +01:00
parent e8c6665a06
commit 8b83702bd2
3 changed files with 20 additions and 8 deletions

View File

@ -91,13 +91,7 @@ export class GestionnairesService {
gestionnaire.password = await bcrypt.hash(dto.password, salt); gestionnaire.password = await bcrypt.hash(dto.password, salt);
} }
if (dto.date_consentement_photo !== undefined) { const { password, ...rest } = dto;
gestionnaire.date_consentement_photo = dto.date_consentement_photo
? new Date(dto.date_consentement_photo)
: undefined;
}
const { password, date_consentement_photo, ...rest } = dto;
Object.entries(rest).forEach(([key, value]) => { Object.entries(rest).forEach(([key, value]) => {
if (value !== undefined) { if (value !== undefined) {
(gestionnaire as any)[key] = value; (gestionnaire as any)[key] = value;

View File

@ -1,4 +1,4 @@
import { Body, Controller, Delete, Get, Param, Patch, Post, UseGuards } from '@nestjs/common'; import { Body, Controller, Delete, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger'; import { ApiBearerAuth, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger';
import { AuthGuard } from 'src/common/guards/auth.guard'; import { AuthGuard } from 'src/common/guards/auth.guard';
import { Roles } from 'src/common/decorators/roles.decorator'; import { Roles } from 'src/common/decorators/roles.decorator';
@ -38,6 +38,16 @@ export class UserController {
return this.userService.createUser(dto, currentUser); return this.userService.createUser(dto, currentUser);
} }
// Lister les utilisateurs en attente de validation
@Get('pending')
@Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR, RoleType.GESTIONNAIRE)
@ApiOperation({ summary: 'Lister les utilisateurs en attente de validation' })
findPendingUsers(
@Query('role') role?: RoleType
) {
return this.userService.findPendingUsers(role);
}
// Lister tous les utilisateurs (super_admin uniquement) // Lister tous les utilisateurs (super_admin uniquement)
@Get() @Get()
@Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR) @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR)

View File

@ -132,6 +132,14 @@ export class UserService {
return this.usersRepository.save(entity); return this.usersRepository.save(entity);
} }
async findPendingUsers(role?: RoleType): Promise<Users[]> {
const where: any = { statut: StatutUtilisateurType.EN_ATTENTE };
if (role) {
where.role = role;
}
return this.usersRepository.find({ where });
}
async findAll(): Promise<Users[]> { async findAll(): Promise<Users[]> {
return this.usersRepository.find(); return this.usersRepository.find();
} }