diff --git a/backend/src/modules/users/applications/update.user.application.ts b/backend/src/modules/users/applications/update.user.application.ts index 30304ac9f..b59567960 100644 --- a/backend/src/modules/users/applications/update.user.application.ts +++ b/backend/src/modules/users/applications/update.user.application.ts @@ -1,4 +1,5 @@ import { Inject, Injectable } from '@nestjs/common'; +import RequestWithUser from 'src/libs/interfaces/requestWithUser.interface'; import UpdateUserDto from '../dto/update.user.dto'; import { UpdateUserApplication } from '../interfaces/applications/update.user.service.interface'; import { UpdateUserService } from '../interfaces/services/update.user.service.interface'; @@ -23,7 +24,7 @@ export class UpdateUserApplicationImpl implements UpdateUserApplication { return this.updateUserService.checkEmail(token); } - updateSuperAdmin(user: UpdateUserDto) { - return this.updateUserService.updateSuperAdmin(user); + updateSuperAdmin(user: UpdateUserDto, requestUser: RequestWithUser) { + return this.updateUserService.updateSuperAdmin(user, requestUser); } } diff --git a/backend/src/modules/users/controller/users.controller.ts b/backend/src/modules/users/controller/users.controller.ts index 64ae9ac2e..c59c1e52f 100644 --- a/backend/src/modules/users/controller/users.controller.ts +++ b/backend/src/modules/users/controller/users.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, Inject, Put, UseGuards } from '@nestjs/common'; +import { Body, Controller, Get, Inject, Put, Req, UseGuards } from '@nestjs/common'; import { ApiBadRequestResponse, ApiBearerAuth, @@ -25,6 +25,7 @@ import { SuperAdminGuard } from 'src/libs/guards/superAdmin.guard'; import { ForbiddenResponse } from '../../../libs/swagger/errors/forbidden.swagger'; import { NotFoundResponse } from '../../../libs/swagger/errors/not-found.swagger'; import { UpdateSuperAdminSwagger } from '../swagger/update.superadmin.swagger'; +import RequestWithUser from 'src/libs/interfaces/requestWithUser.interface'; @ApiBearerAuth('access-token') @ApiTags('Users') @@ -112,7 +113,7 @@ export default class UsersController { }) @UseGuards(SuperAdminGuard) @Put('/sadmin') - updateUserSuperAdmin(@Body() userData: UpdateUserDto) { - return this.updateUserApp.updateSuperAdmin(userData); + updateUserSuperAdmin(@Req() request: RequestWithUser, @Body() userData: UpdateUserDto) { + return this.updateUserApp.updateSuperAdmin(userData, request); } } diff --git a/backend/src/modules/users/interfaces/applications/update.user.service.interface.ts b/backend/src/modules/users/interfaces/applications/update.user.service.interface.ts index 95cc7f619..1617b1a50 100644 --- a/backend/src/modules/users/interfaces/applications/update.user.service.interface.ts +++ b/backend/src/modules/users/interfaces/applications/update.user.service.interface.ts @@ -1,6 +1,7 @@ import { LeanDocument } from 'mongoose'; import UpdateUserDto from '../../dto/update.user.dto'; import User, { UserDocument } from '../../entities/user.schema'; +import RequestWithUser from 'src/libs/interfaces/requestWithUser.interface'; export interface UpdateUserApplication { setCurrentRefreshToken( @@ -16,5 +17,8 @@ export interface UpdateUserApplication { checkEmail(token: string): Promise; - updateSuperAdmin(user: UpdateUserDto): Promise>; + updateSuperAdmin( + user: UpdateUserDto, + requestUser: RequestWithUser + ): Promise>; } diff --git a/backend/src/modules/users/interfaces/services/update.user.service.interface.ts b/backend/src/modules/users/interfaces/services/update.user.service.interface.ts index 9d24f8e50..0cd22256b 100644 --- a/backend/src/modules/users/interfaces/services/update.user.service.interface.ts +++ b/backend/src/modules/users/interfaces/services/update.user.service.interface.ts @@ -1,6 +1,7 @@ import { LeanDocument } from 'mongoose'; import UpdateUserDto from '../../dto/update.user.dto'; import User, { UserDocument } from '../../entities/user.schema'; +import RequestWithUser from 'src/libs/interfaces/requestWithUser.interface'; export interface UpdateUserService { setCurrentRefreshToken(refreshToken: string, userId: string): Promise; @@ -13,5 +14,8 @@ export interface UpdateUserService { checkEmail(token: string): Promise; - updateSuperAdmin(user: UpdateUserDto): Promise>; + updateSuperAdmin( + user: UpdateUserDto, + requestUser: RequestWithUser + ): Promise>; } diff --git a/backend/src/modules/users/services/update.user.service.ts b/backend/src/modules/users/services/update.user.service.ts index b2c62c5f9..5e00aa52b 100644 --- a/backend/src/modules/users/services/update.user.service.ts +++ b/backend/src/modules/users/services/update.user.service.ts @@ -11,6 +11,7 @@ import { TYPES } from '../interfaces/types'; import { UserRepositoryInterface } from '../repository/user.repository.interface'; import User, { UserDocument } from '../entities/user.schema'; import { UPDATE_FAILED } from 'src/libs/exceptions/messages'; +import RequestWithUser from 'src/libs/interfaces/requestWithUser.interface'; @Injectable() export default class updateUserServiceImpl implements UpdateUserService { @@ -60,11 +61,16 @@ export default class updateUserServiceImpl implements UpdateUserService { } } - async updateSuperAdmin(user: UpdateUserDto) { - const userToUpdate = await this.userRepository.updateSuperAdmin(user._id, user.isSAdmin); + async updateSuperAdmin(user: UpdateUserDto, requestUser: RequestWithUser) { + if (requestUser.user._id.toString() === user._id) { + throw new BadRequestException(UPDATE_FAILED); + } + const userUpdated = await this.userRepository.updateSuperAdmin(user._id, user.isSAdmin); - if (!userToUpdate) throw new BadRequestException(UPDATE_FAILED); + if (!userUpdated) { + throw new BadRequestException(UPDATE_FAILED); + } - return userToUpdate; + return userUpdated; } } diff --git a/frontend/src/components/Users/UsersList/partials/CardUser/CardBody.tsx b/frontend/src/components/Users/UsersList/partials/CardUser/CardBody.tsx index 357d1482d..3e7e31ac8 100644 --- a/frontend/src/components/Users/UsersList/partials/CardUser/CardBody.tsx +++ b/frontend/src/components/Users/UsersList/partials/CardUser/CardBody.tsx @@ -48,15 +48,7 @@ const CardBody = React.memo(({ userWithTeams }) => { return 'no teams'; }; - let teamsSeparatedByComma: string[] = []; - if (teamsNames) { - teamsSeparatedByComma = teamsNames?.map((team, index) => { - if (index !== teamsNames.length - 1) { - return team.concat(', '); - } - return team; - }); - } + const teamsSeparatedByComma = teamsNames?.join(', ') || ''; return (