From 5bf3215c6be90096f8f6d4fabf995a2acf617b6e Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:22:26 +0300 Subject: [PATCH] Add CheckUserFloorGuard and implement addUserFloor functionality --- src/floor/controllers/floor.controller.ts | 18 +++++++++++++++++- src/floor/dtos/add.floor.dto.ts | 19 +++++++++++++++++++ src/floor/floor.module.ts | 4 ++++ src/floor/services/floor.service.ts | 22 ++++++++++++++++++++-- 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/floor/controllers/floor.controller.ts b/src/floor/controllers/floor.controller.ts index fd22325..2033918 100644 --- a/src/floor/controllers/floor.controller.ts +++ b/src/floor/controllers/floor.controller.ts @@ -13,10 +13,11 @@ import { } from '@nestjs/common'; import { ApiTags, ApiBearerAuth } from '@nestjs/swagger'; import { JwtAuthGuard } from '../../../libs/common/src/guards/jwt.auth.guard'; -import { AddFloorDto } from '../dtos/add.floor.dto'; +import { AddFloorDto, AddUserFloorDto } from '../dtos/add.floor.dto'; import { GetFloorChildDto } from '../dtos/get.floor.dto'; import { UpdateFloorNameDto } from '../dtos/update.floor.dto'; import { CheckBuildingTypeGuard } from 'src/guards/building.type.guard'; +import { CheckUserFloorGuard } from 'src/guards/user.floor.guard'; @ApiTags('Floor Module') @Controller({ @@ -91,6 +92,21 @@ export class FloorController { } } + @ApiBearerAuth() + @UseGuards(JwtAuthGuard, CheckUserFloorGuard) + @Post('user') + async addUserFloor(@Body() addUserFloorDto: AddUserFloorDto) { + try { + await this.floorService.addUserFloor(addUserFloorDto); + return { message: 'user floor added successfully' }; + } catch (error) { + throw new HttpException( + error.message || 'Internal server error', + error.status || HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } + @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Get('user/:userUuid') diff --git a/src/floor/dtos/add.floor.dto.ts b/src/floor/dtos/add.floor.dto.ts index 9f2de58..3d1655a 100644 --- a/src/floor/dtos/add.floor.dto.ts +++ b/src/floor/dtos/add.floor.dto.ts @@ -21,3 +21,22 @@ export class AddFloorDto { Object.assign(this, dto); } } +export class AddUserFloorDto { + @ApiProperty({ + description: 'floorUuid', + required: true, + }) + @IsString() + @IsNotEmpty() + public floorUuid: string; + @ApiProperty({ + description: 'userUuid', + required: true, + }) + @IsString() + @IsNotEmpty() + public userUuid: string; + constructor(dto: Partial) { + Object.assign(this, dto); + } +} diff --git a/src/floor/floor.module.ts b/src/floor/floor.module.ts index f247fea..71a6c67 100644 --- a/src/floor/floor.module.ts +++ b/src/floor/floor.module.ts @@ -8,6 +8,8 @@ import { SpaceTypeRepositoryModule } from '@app/common/modules/space-type/space. import { SpaceTypeRepository } from '@app/common/modules/space-type/repositories'; import { UserSpaceRepositoryModule } from '@app/common/modules/user-space/user.space.repository.module'; import { UserSpaceRepository } from '@app/common/modules/user-space/repositories'; +import { UserRepositoryModule } from '@app/common/modules/user/user.repository.module'; +import { UserRepository } from '@app/common/modules/user/repositories'; @Module({ imports: [ @@ -15,6 +17,7 @@ import { UserSpaceRepository } from '@app/common/modules/user-space/repositories SpaceRepositoryModule, SpaceTypeRepositoryModule, UserSpaceRepositoryModule, + UserRepositoryModule, ], controllers: [FloorController], providers: [ @@ -22,6 +25,7 @@ import { UserSpaceRepository } from '@app/common/modules/user-space/repositories SpaceRepository, SpaceTypeRepository, UserSpaceRepository, + UserRepository, ], exports: [FloorService], }) diff --git a/src/floor/services/floor.service.ts b/src/floor/services/floor.service.ts index 0cf19da..91de93b 100644 --- a/src/floor/services/floor.service.ts +++ b/src/floor/services/floor.service.ts @@ -7,7 +7,7 @@ import { BadRequestException, } from '@nestjs/common'; import { SpaceRepository } from '@app/common/modules/space/repositories'; -import { AddFloorDto } from '../dtos'; +import { AddFloorDto, AddUserFloorDto } from '../dtos'; import { FloorChildInterface, FloorParentInterface, @@ -231,7 +231,25 @@ export class FloorService { } } } - + async addUserFloor(addUserFloorDto: AddUserFloorDto) { + try { + await this.userSpaceRepository.save({ + user: { uuid: addUserFloorDto.userUuid }, + space: { uuid: addUserFloorDto.floorUuid }, + }); + } catch (err) { + if (err.code === '23505') { + throw new HttpException( + 'User already belongs to this floor', + HttpStatus.BAD_REQUEST, + ); + } + throw new HttpException( + err.message || 'Internal Server Error', + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } async renameFloorByUuid( floorUuid: string, updateFloorDto: UpdateFloorNameDto,