diff --git a/src/building/building.module.ts b/src/building/building.module.ts index 5507453..80391fe 100644 --- a/src/building/building.module.ts +++ b/src/building/building.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 { UserRepository } from '@app/common/modules/user/repositories'; +import { UserRepositoryModule } from '@app/common/modules/user/user.repository.module'; @Module({ imports: [ @@ -15,6 +17,7 @@ import { UserSpaceRepository } from '@app/common/modules/user-space/repositories SpaceRepositoryModule, SpaceTypeRepositoryModule, UserSpaceRepositoryModule, + UserRepositoryModule, ], controllers: [BuildingController], providers: [ @@ -22,6 +25,7 @@ import { UserSpaceRepository } from '@app/common/modules/user-space/repositories SpaceRepository, SpaceTypeRepository, UserSpaceRepository, + UserRepository, ], exports: [BuildingService], }) diff --git a/src/building/controllers/building.controller.ts b/src/building/controllers/building.controller.ts index bac6d18..8517ee1 100644 --- a/src/building/controllers/building.controller.ts +++ b/src/building/controllers/building.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 { AddBuildingDto } from '../dtos/add.building.dto'; +import { AddBuildingDto, AddUserBuildingDto } from '../dtos/add.building.dto'; import { GetBuildingChildDto } from '../dtos/get.building.dto'; import { UpdateBuildingNameDto } from '../dtos/update.building.dto'; import { CheckCommunityTypeGuard } from 'src/guards/community.type.guard'; +import { CheckUserBuildingGuard } from 'src/guards/user.building.guard'; @ApiTags('Building Module') @Controller({ @@ -92,7 +93,20 @@ export class BuildingController { ); } } - + @ApiBearerAuth() + @UseGuards(JwtAuthGuard, CheckUserBuildingGuard) + @Post('user') + async addUserBuilding(@Body() addUserBuildingDto: AddUserBuildingDto) { + try { + await this.buildingService.addUserBuilding(addUserBuildingDto); + return { message: 'user building 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/building/dtos/add.building.dto.ts b/src/building/dtos/add.building.dto.ts index e9268c0..5d79231 100644 --- a/src/building/dtos/add.building.dto.ts +++ b/src/building/dtos/add.building.dto.ts @@ -21,3 +21,22 @@ export class AddBuildingDto { Object.assign(this, dto); } } +export class AddUserBuildingDto { + @ApiProperty({ + description: 'buildingUuid', + required: true, + }) + @IsString() + @IsNotEmpty() + public buildingUuid: string; + @ApiProperty({ + description: 'userUuid', + required: true, + }) + @IsString() + @IsNotEmpty() + public userUuid: string; + constructor(dto: Partial) { + Object.assign(this, dto); + } +} diff --git a/src/building/services/building.service.ts b/src/building/services/building.service.ts index 726697b..fcb803b 100644 --- a/src/building/services/building.service.ts +++ b/src/building/services/building.service.ts @@ -7,7 +7,7 @@ import { BadRequestException, } from '@nestjs/common'; import { SpaceRepository } from '@app/common/modules/space/repositories'; -import { AddBuildingDto } from '../dtos'; +import { AddBuildingDto, AddUserBuildingDto } from '../dtos'; import { BuildingChildInterface, BuildingParentInterface, @@ -246,7 +246,25 @@ export class BuildingService { } } } - + async addUserBuilding(addUserBuildingDto: AddUserBuildingDto) { + try { + await this.userSpaceRepository.save({ + user: { uuid: addUserBuildingDto.userUuid }, + space: { uuid: addUserBuildingDto.buildingUuid }, + }); + } catch (err) { + if (err.code === '23505') { + throw new HttpException( + 'User already belongs to this building', + HttpStatus.BAD_REQUEST, + ); + } + throw new HttpException( + err.message || 'Internal Server Error', + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } async renameBuildingByUuid( buildingUuid: string, updateBuildingNameDto: UpdateBuildingNameDto,