Skip to content
Snippets Groups Projects
Commit d71b9f1f authored by Hugo SUBTIL's avatar Hugo SUBTIL
Browse files

Merge branch 'feat/admin-user-deletion' into 'dev'

Feat/admin user deletion

See merge request web-et-numerique/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_server!50
parents b67369c8 39b7cd25
No related branches found
No related tags found
3 merge requests!96release V1.10.0,!55Dev,!50Feat/admin user deletion
import { Body } from '@nestjs/common';
import { Body, Delete, Param } from '@nestjs/common';
import { Controller, Get, Post, UseGuards } from '@nestjs/common';
import { ApiOperation } from '@nestjs/swagger';
import { ApiOperation, ApiParam } from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { StructuresService } from '../structures/services/structures.service';
import { Roles } from '../users/decorators/roles.decorator';
......@@ -67,4 +67,29 @@ export class AdminController {
})
);
}
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles('admin')
@Delete('user/:id')
@ApiParam({ name: 'id', type: String, required: true })
public async deleteUser(@Param() params) {
const user = await this.usersService.deleteOneId(params.id);
user.structuresLink.forEach((structureId) => {
this.usersService.isStructureClaimed(structureId.toString()).then((userFound) => {
if (!userFound) {
this.structuresService.deleteOne(structureId.toString());
}
});
});
return user;
}
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles('admin')
@Post('searchUsers')
public async searchUsers(@Body() searchString: { searchString: string }) {
if (searchString && searchString.searchString.length > 0)
return this.usersService.searchUsers(searchString.searchString);
else return this.usersService.findAll();
}
}
......@@ -9,6 +9,8 @@ import { PasswordResetDto } from './dto/reset-password.dto';
import { UsersService } from './users.service';
import { StructuresService } from '../structures/services/structures.service';
import { TempUserService } from '../temp-user/temp-user.service';
import { RolesGuard } from './guards/roles.guard';
import { Roles } from './decorators/roles.decorator';
@Controller('users')
export class UsersController {
......
......@@ -486,6 +486,14 @@ export class UsersService {
return user.deleteOne();
}
public async deleteOneId(id: string): Promise<User> {
const user = await this.userModel.findOne({ _id: id }).exec();
if (!user) {
throw new HttpException('Invalid user id', HttpStatus.BAD_REQUEST);
}
return user.deleteOne();
}
public async getStructureOwnersMails(structureId: string, emailUser: string): Promise<OwnerDto[]> {
const users = await this.userModel
.find({ structuresLink: Types.ObjectId(structureId), email: { $ne: emailUser } })
......@@ -499,4 +507,10 @@ export class UsersService {
});
return owners;
}
public async searchUsers(searchString: string) {
return this.userModel
.find( {email: new RegExp(searchString, 'i') })
.exec();
}
}
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