finished return the last three parents

This commit is contained in:
faris Aljohari
2025-03-19 00:50:24 +03:00
parent ec851eda9d
commit 1a313c103d
4 changed files with 65 additions and 1 deletions

View File

@ -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],
})

View File

@ -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],
})

View File

@ -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;
}

View File

@ -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);