diff --git a/src/structures/structures.module.ts b/src/structures/structures.module.ts index 0ec48d708808d0a1a3fdf495a037c99ba14bb9cf..51ec4d11ca7c6d9640944f69b156cfaac87f1aa3 100644 --- a/src/structures/structures.module.ts +++ b/src/structures/structures.module.ts @@ -1,4 +1,4 @@ -import { HttpModule, Module } from '@nestjs/common'; +import { forwardRef, HttpModule, Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { TempUserModule } from '../temp-user/temp-user.module'; import { MailerModule } from '../mailer/mailer.module'; @@ -19,7 +19,7 @@ import { StructureType, StructureTypeSchema } from './structure-type/structure-t ]), HttpModule, MailerModule, - UsersModule, + forwardRef(() => UsersModule), TempUserModule, ], controllers: [StructuresController, StructureTypeController], diff --git a/src/users/users.controller.ts b/src/users/users.controller.ts index a16fca1915a89d913e885dd7772e321040f75ff9..2add23768502333ed2facb29b8e65badfe9b0293 100644 --- a/src/users/users.controller.ts +++ b/src/users/users.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, Param, Post, Query, Request, UseGuards } from '@nestjs/common'; +import { Body, Controller, Delete, Get, Param, Post, Query, Req, Request, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { PasswordChangeDto } from './dto/change-password.dto'; @@ -7,11 +7,15 @@ import { CreateUserDto } from './dto/create-user.dto'; import { PasswordResetApplyDto } from './dto/reset-password-apply.dto'; import { PasswordResetDto } from './dto/reset-password.dto'; import { UsersService } from './users.service'; +import { StructuresService } from '../structures/services/structures.service'; +import { Types } from 'mongoose'; +import { AuthService } from '../auth/auth.service'; +import { JwtService } from '@nestjs/jwt'; import { TempUserService } from '../temp-user/temp-user.service'; @Controller('users') export class UsersController { - constructor(private usersService: UsersService, private tempUserService: TempUserService) {} + constructor(private usersService: UsersService, private structureService: StructuresService, private tempUserService: TempUserService) {} @UseGuards(JwtAuthGuard) @ApiBearerAuth('JWT') @@ -97,4 +101,18 @@ export class UsersController { public async verifyUserExist(@Request() req, @Body() email: { newMail: string }) { return this.usersService.verifyUserExist(email.newMail); } + + @Delete() + @UseGuards(JwtAuthGuard) + public async delete(@Req() req) { + const user = await this.usersService.deleteOne(req.user.email); + user.structuresLink.forEach((structureId) => { + this.usersService.isStructureClaimed(structureId.toHexString()).then((userFound) => { + if (!userFound) { + this.structureService.deleteOne(structureId.toHexString()); + } + }); + }); + return user; + } } diff --git a/src/users/users.module.ts b/src/users/users.module.ts index 2741bbd41a798f060a82c203249b9064dabbaa9b..6a481a9e123a681074b40daac020f3b9244c2d65 100644 --- a/src/users/users.module.ts +++ b/src/users/users.module.ts @@ -1,15 +1,16 @@ -import { HttpModule, Module } from '@nestjs/common'; +import { forwardRef, HttpModule, Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { UsersService } from './users.service'; import { UsersController } from './users.controller'; import { User, UserSchema } from './schemas/user.schema'; import { MailerModule } from '../mailer/mailer.module'; +import { StructuresModule } from '../structures/structures.module'; import { TempUserModule } from '../temp-user/temp-user.module'; - @Module({ imports: [ MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), MailerModule, + forwardRef(() => StructuresModule), HttpModule, TempUserModule, ], diff --git a/src/users/users.service.ts b/src/users/users.service.ts index 9cc810695a5c9ec26007d68a0bad7f4b9f3269e5..e9bf74b9b9ae7a5d53491e7f2394d0e4a79b8f52 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -471,6 +471,14 @@ export class UsersService { return user ? true : false; } + public async deleteOne(email: string): Promise<User> { + const user = await this.findOne(email); + if (!user) { + throw new HttpException('Invalid user email', HttpStatus.BAD_REQUEST); + } + return user.deleteOne(); + } + public async getStructureOwnersMails(structureId: string, emailUser: string): Promise<string[]> { const users = await this.userModel .find({ structuresLink: Types.ObjectId(structureId), email: { $ne: emailUser } })