diff --git a/src/unit/controllers/unit.controller.ts b/src/unit/controllers/unit.controller.ts index f36a510..245dd85 100644 --- a/src/unit/controllers/unit.controller.ts +++ b/src/unit/controllers/unit.controller.ts @@ -10,11 +10,12 @@ import { Put, Query, UseGuards, + ValidationPipe, } from '@nestjs/common'; import { ApiTags, ApiBearerAuth } from '@nestjs/swagger'; import { JwtAuthGuard } from '../../../libs/common/src/guards/jwt.auth.guard'; import { AddUnitDto } from '../dtos/add.unit.dto'; -import { GetUnitChildDto } from '../dtos/get.unit.dto'; +import { GetUnitByUserIdDto, GetUnitChildDto } from '../dtos/get.unit.dto'; import { UpdateUnitNameDto } from '../dtos/update.unit.dto'; import { CheckFloorTypeGuard } from 'src/guards/floor.type.guard'; @@ -88,6 +89,20 @@ export class UnitController { } } + @ApiBearerAuth() + @UseGuards(JwtAuthGuard) + @Get() + async getUnitsByUserId(@Query(ValidationPipe) dto: GetUnitByUserIdDto) { + try { + return await this.unitService.getUnitsByUserId(dto.userUuid); + } catch (error) { + throw new HttpException( + error.message || 'Internal server error', + error.status || HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } + @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Put('rename/:unitUuid') diff --git a/src/unit/dtos/get.unit.dto.ts b/src/unit/dtos/get.unit.dto.ts index b96147b..82837aa 100644 --- a/src/unit/dtos/get.unit.dto.ts +++ b/src/unit/dtos/get.unit.dto.ts @@ -49,3 +49,12 @@ export class GetUnitChildDto { }) public includeSubSpaces: boolean = false; } +export class GetUnitByUserIdDto { + @ApiProperty({ + description: 'userUuid', + required: true, + }) + @IsString() + @IsNotEmpty() + public userUuid: string; +} diff --git a/src/unit/interface/unit.interface.ts b/src/unit/interface/unit.interface.ts index 8502a86..39fac9a 100644 --- a/src/unit/interface/unit.interface.ts +++ b/src/unit/interface/unit.interface.ts @@ -24,3 +24,8 @@ export interface RenameUnitByUuidInterface { name: string; type: string; } +export interface GetUnitByUserUuidInterface { + uuid: string; + name: string; + type: string; +} diff --git a/src/unit/services/unit.service.ts b/src/unit/services/unit.service.ts index e84bc0f..27bebbc 100644 --- a/src/unit/services/unit.service.ts +++ b/src/unit/services/unit.service.ts @@ -13,15 +13,18 @@ import { UnitParentInterface, GetUnitByUuidInterface, RenameUnitByUuidInterface, + GetUnitByUserUuidInterface, } from '../interface/unit.interface'; import { SpaceEntity } from '@app/common/modules/space/entities'; import { UpdateUnitNameDto } from '../dtos/update.unit.dto'; +import { UserSpaceRepository } from '@app/common/modules/user-space/repositories'; @Injectable() export class UnitService { constructor( private readonly spaceRepository: SpaceRepository, private readonly spaceTypeRepository: SpaceTypeRepository, + private readonly userSpaceRepository: UserSpaceRepository, ) {} async addUnit(addUnitDto: AddUnitDto) { @@ -195,7 +198,36 @@ export class UnitService { } } } + async getUnitsByUserId( + userUuid: string, + ): Promise { + try { + const units = await this.userSpaceRepository.find({ + relations: ['space', 'space.spaceType'], + where: { + user: { uuid: userUuid }, + space: { spaceType: { type: 'unit' } }, + }, + }); + if (units.length === 0) { + throw new HttpException('this user has no units', HttpStatus.NOT_FOUND); + } + const spaces = units.map((unit) => ({ + uuid: unit.space.uuid, + name: unit.space.spaceName, + type: unit.space.spaceType.type, + })); + + return spaces; + } catch (err) { + if (err instanceof HttpException) { + throw err; + } else { + throw new HttpException('user not found', HttpStatus.NOT_FOUND); + } + } + } async renameUnitByUuid( unitUuid: string, updateUnitNameDto: UpdateUnitNameDto, diff --git a/src/unit/unit.module.ts b/src/unit/unit.module.ts index eaf571f..2f0234e 100644 --- a/src/unit/unit.module.ts +++ b/src/unit/unit.module.ts @@ -6,11 +6,23 @@ import { SpaceRepositoryModule } from '@app/common/modules/space/space.repositor import { SpaceRepository } from '@app/common/modules/space/repositories'; import { SpaceTypeRepositoryModule } from '@app/common/modules/space-type/space.type.repository.module'; 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'; @Module({ - imports: [ConfigModule, SpaceRepositoryModule, SpaceTypeRepositoryModule], + imports: [ + ConfigModule, + SpaceRepositoryModule, + SpaceTypeRepositoryModule, + UserSpaceRepositoryModule, + ], controllers: [UnitController], - providers: [UnitService, SpaceRepository, SpaceTypeRepository], + providers: [ + UnitService, + SpaceRepository, + SpaceTypeRepository, + UserSpaceRepository, + ], exports: [UnitService], }) export class UnitModule {}