Skip to content
Snippets Groups Projects
Commit 5d93f2f0 authored by Jérémie BRISON's avatar Jérémie BRISON Committed by Hugo SUBTIL
Browse files

feat(user) : can delete an account + delete structure if no owners

parent ac18ce82
No related branches found
No related tags found
2 merge requests!38Recette,!37Dev
import { HttpModule, Module } from '@nestjs/common'; import { forwardRef, HttpModule, Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose'; import { MongooseModule } from '@nestjs/mongoose';
import { TempUserModule } from '../temp-user/temp-user.module'; import { TempUserModule } from '../temp-user/temp-user.module';
import { MailerModule } from '../mailer/mailer.module'; import { MailerModule } from '../mailer/mailer.module';
...@@ -19,7 +19,7 @@ import { StructureType, StructureTypeSchema } from './structure-type/structure-t ...@@ -19,7 +19,7 @@ import { StructureType, StructureTypeSchema } from './structure-type/structure-t
]), ]),
HttpModule, HttpModule,
MailerModule, MailerModule,
UsersModule, forwardRef(() => UsersModule),
TempUserModule, TempUserModule,
], ],
controllers: [StructuresController, StructureTypeController], controllers: [StructuresController, StructureTypeController],
......
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 { ApiBearerAuth, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { PasswordChangeDto } from './dto/change-password.dto'; import { PasswordChangeDto } from './dto/change-password.dto';
...@@ -7,11 +7,15 @@ import { CreateUserDto } from './dto/create-user.dto'; ...@@ -7,11 +7,15 @@ import { CreateUserDto } from './dto/create-user.dto';
import { PasswordResetApplyDto } from './dto/reset-password-apply.dto'; import { PasswordResetApplyDto } from './dto/reset-password-apply.dto';
import { PasswordResetDto } from './dto/reset-password.dto'; import { PasswordResetDto } from './dto/reset-password.dto';
import { UsersService } from './users.service'; 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'; import { TempUserService } from '../temp-user/temp-user.service';
@Controller('users') @Controller('users')
export class UsersController { export class UsersController {
constructor(private usersService: UsersService, private tempUserService: TempUserService) {} constructor(private usersService: UsersService, private structureService: StructuresService, private tempUserService: TempUserService) {}
@UseGuards(JwtAuthGuard) @UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT') @ApiBearerAuth('JWT')
...@@ -97,4 +101,18 @@ export class UsersController { ...@@ -97,4 +101,18 @@ export class UsersController {
public async verifyUserExist(@Request() req, @Body() email: { newMail: string }) { public async verifyUserExist(@Request() req, @Body() email: { newMail: string }) {
return this.usersService.verifyUserExist(email.newMail); 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;
}
} }
import { HttpModule, Module } from '@nestjs/common'; import { forwardRef, HttpModule, Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose'; import { MongooseModule } from '@nestjs/mongoose';
import { UsersService } from './users.service'; import { UsersService } from './users.service';
import { UsersController } from './users.controller'; import { UsersController } from './users.controller';
import { User, UserSchema } from './schemas/user.schema'; import { User, UserSchema } from './schemas/user.schema';
import { MailerModule } from '../mailer/mailer.module'; import { MailerModule } from '../mailer/mailer.module';
import { StructuresModule } from '../structures/structures.module';
import { TempUserModule } from '../temp-user/temp-user.module'; import { TempUserModule } from '../temp-user/temp-user.module';
@Module({ @Module({
imports: [ imports: [
MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
MailerModule, MailerModule,
forwardRef(() => StructuresModule),
HttpModule, HttpModule,
TempUserModule, TempUserModule,
], ],
......
...@@ -471,6 +471,14 @@ export class UsersService { ...@@ -471,6 +471,14 @@ export class UsersService {
return user ? true : false; 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[]> { public async getStructureOwnersMails(structureId: string, emailUser: string): Promise<string[]> {
const users = await this.userModel const users = await this.userModel
.find({ structuresLink: Types.ObjectId(structureId), email: { $ne: emailUser } }) .find({ structuresLink: Types.ObjectId(structureId), email: { $ne: emailUser } })
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment