From ccb9213a6ca712fede78ad836bbadc6be9ca6ef7 Mon Sep 17 00:00:00 2001 From: Pierre Ecarlat <pecarlat@grandlyon.com> Date: Thu, 20 Mar 2025 10:33:34 +0100 Subject: [PATCH 1/2] fixed tempUsers return type --- src/temp-user/temp-user.controller.ts | 25 ++++++++++++++++++++++--- src/temp-user/temp-user.interface.ts | 8 ++++++++ src/temp-user/temp-user.module.ts | 10 ++++++++-- src/temp-user/temp-user.schema.ts | 4 +--- src/temp-user/temp-user.service.ts | 10 +--------- 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/temp-user/temp-user.controller.ts b/src/temp-user/temp-user.controller.ts index 166a6777a..e2bff6525 100644 --- a/src/temp-user/temp-user.controller.ts +++ b/src/temp-user/temp-user.controller.ts @@ -2,15 +2,34 @@ import { Controller, Get, HttpException, HttpStatus, Param } from '@nestjs/commo import { ApiParam, ApiTags } from '@nestjs/swagger'; import { TempUser } from './temp-user.schema'; import { TempUserService } from './temp-user.service'; +import { StructuresService } from '../structures/services/structures.service'; +import { ITempUser, TempUserWithStructures } from './temp-user.interface'; @ApiTags('temp-user') @Controller('temp-user') export class TempUserController { - constructor(private readonly tempUserService: TempUserService) {} + constructor( + private readonly tempUserService: TempUserService, + private readonly structuresService: StructuresService + ) {} @Get() - public async findAll(): Promise<TempUser[]> { - return await this.tempUserService.findAll(); + public async findAll(): Promise<TempUserWithStructures[]> { + return await this.tempUserService.findAll().then(async (users: ITempUser[]) => { + return Promise.all( + users.map(async (user) => { + return { + email: user.email, + structures: await Promise.all( + user.structuresLink.map(async (id) => { + return this.structuresService.findOne(id.toHexString()); + }) + ), + updatedAt: user.updatedAt ? user.updatedAt.toLocaleDateString('fr-FR') : '', + }; + }) + ); + }); } @Get(':id') diff --git a/src/temp-user/temp-user.interface.ts b/src/temp-user/temp-user.interface.ts index 67eb0e734..51c298f32 100644 --- a/src/temp-user/temp-user.interface.ts +++ b/src/temp-user/temp-user.interface.ts @@ -1,6 +1,14 @@ import { Document, Types } from 'mongoose'; +import { Structure } from '../structures/schemas/structure.schema'; export interface ITempUser extends Document { email: string; structuresLink?: Types.ObjectId[]; + updatedAt: Date; +} + +export interface TempUserWithStructures { + email: string; + structures: Structure[]; + updatedAt: string; } diff --git a/src/temp-user/temp-user.module.ts b/src/temp-user/temp-user.module.ts index f5a171a92..ef3a806f9 100644 --- a/src/temp-user/temp-user.module.ts +++ b/src/temp-user/temp-user.module.ts @@ -1,13 +1,19 @@ import { HttpModule } from '@nestjs/axios'; -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { TempUser, TempUserSchema } from './temp-user.schema'; import { TempUserService } from './temp-user.service'; import { TempUserController } from './temp-user.controller'; import { MailerModule } from '../mailer/mailer.module'; +import { StructuresModule } from '../structures/structures.module'; @Module({ - imports: [MongooseModule.forFeature([{ name: TempUser.name, schema: TempUserSchema }]), HttpModule, MailerModule], + imports: [ + MongooseModule.forFeature([{ name: TempUser.name, schema: TempUserSchema }]), + HttpModule, + MailerModule, + forwardRef(() => StructuresModule), + ], providers: [TempUserService], exports: [TempUserService], controllers: [TempUserController], diff --git a/src/temp-user/temp-user.schema.ts b/src/temp-user/temp-user.schema.ts index a58db8d0b..c246eb6b9 100644 --- a/src/temp-user/temp-user.schema.ts +++ b/src/temp-user/temp-user.schema.ts @@ -1,7 +1,5 @@ import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; -import { Document, Types } from 'mongoose'; - -export type TempUserDocument = TempUser & Document; +import { Types } from 'mongoose'; @Schema({ timestamps: true }) export class TempUser { diff --git a/src/temp-user/temp-user.service.ts b/src/temp-user/temp-user.service.ts index 6dd2fb91d..5702b0c89 100644 --- a/src/temp-user/temp-user.service.ts +++ b/src/temp-user/temp-user.service.ts @@ -31,15 +31,7 @@ export class TempUserService { public async findAll(): Promise<ITempUser[]> { this.logger.debug('findAll'); try { - const tempUsers = await this.tempUserModel - .find() - .populate({ - path: 'structuresLink', - select: 'structureName', - }) - .exec(); - - return tempUsers; + return await this.tempUserModel.find().exec(); } catch (error) { throw new HttpException('An error occurred while fetching temp users.', HttpStatus.INTERNAL_SERVER_ERROR); } -- GitLab From 4320140f4cf9918a96bd741294a03b0292779f40 Mon Sep 17 00:00:00 2001 From: Pierre Ecarlat <pecarlat@grandlyon.com> Date: Thu, 20 Mar 2025 11:10:52 +0100 Subject: [PATCH 2/2] fixed test --- src/temp-user/temp-user.controller.spec.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/temp-user/temp-user.controller.spec.ts b/src/temp-user/temp-user.controller.spec.ts index 82aa0e68d..d4a69b9d7 100644 --- a/src/temp-user/temp-user.controller.spec.ts +++ b/src/temp-user/temp-user.controller.spec.ts @@ -4,6 +4,7 @@ import { Test } from '@nestjs/testing'; import { MailerModule } from '../mailer/mailer.module'; import { TempUserController } from './temp-user.controller'; import { TempUserService } from './temp-user.service'; +import { StructuresService } from '../structures/services/structures.service'; describe('TempUserService', () => { let tempUserController: TempUserController; @@ -13,10 +14,15 @@ describe('TempUserService', () => { findAll: jest.fn(), }; + const structureServiceMock = {}; + beforeEach(async () => { const module = await Test.createTestingModule({ imports: [HttpModule, MailerModule], - providers: [{ provide: TempUserService, useValue: mockTempUserService }], + providers: [ + { provide: TempUserService, useValue: mockTempUserService }, + { provide: StructuresService, useValue: structureServiceMock }, + ], controllers: [TempUserController], }).compile(); @@ -29,6 +35,7 @@ describe('TempUserService', () => { describe('findAll', () => { it('should get all temporary users', async () => { + mockTempUserService.findAll.mockResolvedValue([]); await tempUserController.findAll(); expect(mockTempUserService.findAll).toHaveBeenCalled(); }); -- GitLab