From 3afdd4922bbf205aab4ffdc51fa91c0bfab7262a Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:22:38 +0300 Subject: [PATCH] Add AddUserRoomDto and endpoint to add user to room --- src/room/controllers/room.controller.ts | 18 ++++++++++++++++-- src/room/dtos/add.room.dto.ts | 19 +++++++++++++++++++ src/room/room.module.ts | 4 ++++ src/room/services/room.service.ts | 22 ++++++++++++++++++++-- 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/room/controllers/room.controller.ts b/src/room/controllers/room.controller.ts index dee131f..054bedf 100644 --- a/src/room/controllers/room.controller.ts +++ b/src/room/controllers/room.controller.ts @@ -12,9 +12,10 @@ import { } from '@nestjs/common'; import { ApiTags, ApiBearerAuth } from '@nestjs/swagger'; import { JwtAuthGuard } from '../../../libs/common/src/guards/jwt.auth.guard'; -import { AddRoomDto } from '../dtos/add.room.dto'; +import { AddRoomDto, AddUserRoomDto } from '../dtos/add.room.dto'; import { UpdateRoomNameDto } from '../dtos/update.room.dto'; import { CheckUnitTypeGuard } from 'src/guards/unit.type.guard'; +import { CheckUserRoomGuard } from 'src/guards/user.room.guard'; @ApiTags('Room Module') @Controller({ @@ -68,7 +69,20 @@ export class RoomController { ); } } - + @ApiBearerAuth() + @UseGuards(JwtAuthGuard, CheckUserRoomGuard) + @Post('user') + async addUserRoom(@Body() addUserRoomDto: AddUserRoomDto) { + try { + await this.roomService.addUserRoom(addUserRoomDto); + return { message: 'user room 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/room/dtos/add.room.dto.ts b/src/room/dtos/add.room.dto.ts index 69425b1..2718a29 100644 --- a/src/room/dtos/add.room.dto.ts +++ b/src/room/dtos/add.room.dto.ts @@ -21,3 +21,22 @@ export class AddRoomDto { Object.assign(this, dto); } } +export class AddUserRoomDto { + @ApiProperty({ + description: 'roomUuid', + required: true, + }) + @IsString() + @IsNotEmpty() + public roomUuid: string; + @ApiProperty({ + description: 'userUuid', + required: true, + }) + @IsString() + @IsNotEmpty() + public userUuid: string; + constructor(dto: Partial) { + Object.assign(this, dto); + } +} diff --git a/src/room/room.module.ts b/src/room/room.module.ts index d83d6fb..2d6d98c 100644 --- a/src/room/room.module.ts +++ b/src/room/room.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: [RoomController], providers: [ @@ -22,6 +25,7 @@ import { UserSpaceRepository } from '@app/common/modules/user-space/repositories SpaceRepository, SpaceTypeRepository, UserSpaceRepository, + UserRepository, ], exports: [RoomService], }) diff --git a/src/room/services/room.service.ts b/src/room/services/room.service.ts index 7b0b7f5..4771c25 100644 --- a/src/room/services/room.service.ts +++ b/src/room/services/room.service.ts @@ -6,7 +6,7 @@ import { BadRequestException, } from '@nestjs/common'; import { SpaceRepository } from '@app/common/modules/space/repositories'; -import { AddRoomDto } from '../dtos'; +import { AddRoomDto, AddUserRoomDto } from '../dtos'; import { RoomParentInterface, GetRoomByUuidInterface, @@ -137,7 +137,25 @@ export class RoomService { } } } - + async addUserRoom(addUserRoomDto: AddUserRoomDto) { + try { + await this.userSpaceRepository.save({ + user: { uuid: addUserRoomDto.userUuid }, + space: { uuid: addUserRoomDto.roomUuid }, + }); + } catch (err) { + if (err.code === '23505') { + throw new HttpException( + 'User already belongs to this room', + HttpStatus.BAD_REQUEST, + ); + } + throw new HttpException( + err.message || 'Internal Server Error', + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } async renameRoomByUuid( roomUuid: string, updateRoomNameDto: UpdateRoomNameDto,