diff --git a/src/community/community.module.ts b/src/community/community.module.ts index d57d377..81bef0d 100644 --- a/src/community/community.module.ts +++ b/src/community/community.module.ts @@ -46,6 +46,16 @@ import { NewTagRepository } from '@app/common/modules/tag/repositories/tag-repos import { ProductRepository } from '@app/common/modules/product/repositories'; import { SpaceModelProductAllocationService } from 'src/space-model/services/space-model-product-allocation.service'; import { SubspaceModelProductAllocationService } from 'src/space-model/services/subspace/subspace-model-product-allocation.service'; +import { DeviceService } from 'src/device/services'; +import { SceneDeviceRepository } from '@app/common/modules/scene-device/repositories'; +import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service'; +import { SceneService } from 'src/scene/services'; +import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories'; +import { + SceneIconRepository, + SceneRepository, +} from '@app/common/modules/scene/repositories'; +import { AutomationRepository } from '@app/common/modules/automation/repositories'; @Module({ imports: [ConfigModule, SpaceRepositoryModule, UserRepositoryModule], @@ -84,6 +94,14 @@ import { SubspaceModelProductAllocationService } from 'src/space-model/services/ SubspaceModelProductAllocationService, SpaceModelProductAllocationRepoitory, SubspaceModelProductAllocationRepoitory, + DeviceService, + SceneDeviceRepository, + DeviceStatusFirebaseService, + SceneService, + DeviceStatusLogRepository, + SceneIconRepository, + SceneRepository, + AutomationRepository, ], exports: [CommunityService, SpacePermissionService], }) diff --git a/src/invite-user/invite-user.module.ts b/src/invite-user/invite-user.module.ts index 4eed818..4ce83d4 100644 --- a/src/invite-user/invite-user.module.ts +++ b/src/invite-user/invite-user.module.ts @@ -66,6 +66,16 @@ import { NewTagRepository } from '@app/common/modules/tag/repositories/tag-repos import { ProductRepository } from '@app/common/modules/product/repositories'; import { SpaceModelProductAllocationService } from 'src/space-model/services/space-model-product-allocation.service'; import { SubspaceModelProductAllocationService } from 'src/space-model/services/subspace/subspace-model-product-allocation.service'; +import { DeviceService } from 'src/device/services'; +import { SceneDeviceRepository } from '@app/common/modules/scene-device/repositories'; +import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service'; +import { SceneService } from 'src/scene/services'; +import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories'; +import { + SceneIconRepository, + SceneRepository, +} from '@app/common/modules/scene/repositories'; +import { AutomationRepository } from '@app/common/modules/automation/repositories'; @Module({ imports: [ConfigModule, InviteUserRepositoryModule, CommunityModule], @@ -122,6 +132,14 @@ import { SubspaceModelProductAllocationService } from 'src/space-model/services/ SubspaceModelProductAllocationService, SpaceModelProductAllocationRepoitory, SubspaceModelProductAllocationRepoitory, + DeviceService, + SceneDeviceRepository, + DeviceStatusFirebaseService, + SceneService, + DeviceStatusLogRepository, + SceneIconRepository, + SceneRepository, + AutomationRepository, ], exports: [InviteUserService], }) diff --git a/src/space/dtos/space.parents.dto.ts b/src/space/dtos/space.parents.dto.ts new file mode 100644 index 0000000..6858f55 --- /dev/null +++ b/src/space/dtos/space.parents.dto.ts @@ -0,0 +1,7 @@ +import { SpaceEntity } from '@app/common/modules/space/entities/space.entity'; +import { Expose } from 'class-transformer'; + +export class SpaceWithParentsDto extends SpaceEntity { + @Expose() + lastThreeParents: string; +} diff --git a/src/space/services/space.service.ts b/src/space/services/space.service.ts index 682292c..5a03ce2 100644 --- a/src/space/services/space.service.ts +++ b/src/space/services/space.service.ts @@ -36,6 +36,8 @@ import { SpaceEntity } from '@app/common/modules/space/entities/space.entity'; import { ProcessTagDto } from 'src/tags/dtos'; import { SpaceProductAllocationService } from './space-product-allocation.service'; import { SubspaceEntity } from '@app/common/modules/space/entities/subspace/subspace.entity'; +import { DeviceService } from 'src/device/services'; +import { SpaceWithParentsDto } from '../dtos/space.parents.dto'; @Injectable() export class SpaceService { constructor( @@ -47,6 +49,7 @@ export class SpaceService { private readonly validationService: ValidationService, private readonly newTagService: NewTagService, private readonly spaceModelService: SpaceModelService, + private readonly deviceService: DeviceService, private commandBus: CommandBus, private readonly spaceProductAllocationService: SpaceProductAllocationService, ) {} @@ -235,7 +238,25 @@ export class SpaceService { queryBuilder.innerJoin('space.devices', 'devices'); } - const spaces = await queryBuilder.getMany(); + let spaces = await queryBuilder.getMany(); + + if (onlyWithDevices) { + spaces = await Promise.all( + spaces.map(async (space) => { + const spaceHierarchy = + await this.deviceService.getParentHierarchy(space); + const parentHierarchy = spaceHierarchy + .slice(0, 3) + .map((space) => space.spaceName) + .join(' - '); + + return { + ...space, + lastThreeParents: parentHierarchy, + } as SpaceWithParentsDto; + }), + ); + } const transformedSpaces = spaces.map(this.transformSpace); const spaceHierarchy = this.buildSpaceHierarchy(transformedSpaces);