fixing propagation

This commit is contained in:
hannathkadher
2025-03-07 23:01:38 +04:00
parent 226781e53f
commit 1220ee395d
12 changed files with 236 additions and 68 deletions

View File

@ -104,7 +104,7 @@ export class PropogateUpdateSpaceModelHandler
for (const space of spaces) {
await this.subSpaceService.createSubSpaceFromModel(
subspaceModels,
space,
[space],
queryRunner,
);
}

View File

@ -16,6 +16,7 @@ import { ProductEntity } from '@app/common/modules/product/entities';
import { SpaceRepository } from '@app/common/modules/space';
import { SpaceProductAllocationService } from 'src/space/services/space-product-allocation.service';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
import { ProjectEntity } from '@app/common/modules/project/entities';
@Injectable()
export class SpaceModelProductAllocationService {
@ -141,7 +142,7 @@ export class SpaceModelProductAllocationService {
async updateProductAllocations(
dtos: ModifyTagModelDto[],
projectUuid: string,
project: ProjectEntity,
spaceModel: SpaceModelEntity,
queryRunner: QueryRunner,
modifySubspaceModels?: ModifySubspaceModelDto[],
@ -161,7 +162,7 @@ export class SpaceModelProductAllocationService {
const processedTags = await this.tagService.processTags(
addTagDtos,
projectUuid,
project.uuid,
queryRunner,
);
const addTagUuidMap = new Map<string, ModifyTagModelDto>();
@ -192,13 +193,19 @@ export class SpaceModelProductAllocationService {
await Promise.all([
this.processAddActions(
filteredDtos,
projectUuid,
project.uuid,
spaceModel,
queryRunner,
modifySubspaceModels,
spaces,
),
this.processDeleteActions(filteredDtos, queryRunner, spaceModel),
this.processDeleteActions(
filteredDtos,
queryRunner,
spaceModel,
project,
spaces,
),
]);
} catch (error) {
throw this.handleError(error, 'Error while updating product allocations');
@ -304,6 +311,8 @@ export class SpaceModelProductAllocationService {
dtos: ModifyTagModelDto[],
queryRunner: QueryRunner,
spaceModel: SpaceModelEntity,
project: ProjectEntity,
spaces?: SpaceEntity[],
): Promise<SpaceModelProductAllocationEntity[]> {
try {
if (!dtos || dtos.length === 0) {
@ -325,7 +334,11 @@ export class SpaceModelProductAllocationService {
uuid: spaceModel.uuid,
},
},
relations: ['tags'],
relations: [
'tags',
'inheritedSpaceAllocations',
'inheritedSpaceAllocations.tags',
],
},
);
@ -365,6 +378,14 @@ export class SpaceModelProductAllocationService {
);
}
await this.spaceProductAllocationService.propagateDeleteToInheritedAllocations(
queryRunner,
allocationsToUpdate,
tagUuidsToDelete,
project,
spaces,
);
await queryRunner.manager
.createQueryBuilder()
.delete()

View File

@ -189,7 +189,7 @@ export class SpaceModelService {
async update(dto: UpdateSpaceModelDto, param: SpaceModelParam) {
const queryRunner = this.dataSource.createQueryRunner();
await this.validateProject(param.projectUuid);
const project = await this.validateProject(param.projectUuid);
const spaceModel = await this.validateSpaceModel(
param.spaceModelUuid,
param.projectUuid,
@ -227,7 +227,7 @@ export class SpaceModelService {
if (dto.tags) {
await this.spaceModelProductAllocationService.updateProductAllocations(
dto.tags,
param.projectUuid,
project,
spaceModel,
queryRunner,
dto.subspaceModels,

View File

@ -14,6 +14,8 @@ import { ProcessTagDto } from 'src/tags/dtos';
import { TagService } from 'src/tags/services';
import { SubspaceModelProductAllocationService } from './subspace-model-product-allocation.service';
import { ISingleSubspaceModel } from 'src/space-model/interfaces';
import { SpaceEntity } from '@app/common/modules/space/entities/space.entity';
import { SubSpaceService } from 'src/space/services/subspace';
@Injectable()
export class SubSpaceModelService {
@ -21,6 +23,7 @@ export class SubSpaceModelService {
private readonly subspaceModelRepository: SubspaceModelRepository,
private readonly tagService: TagService,
private readonly productAllocationService: SubspaceModelProductAllocationService,
private readonly subspaceService: SubSpaceService,
) {}
async createModels(
@ -74,6 +77,7 @@ export class SubSpaceModelService {
dtos: ModifySubspaceModelDto[],
spaceModel: SpaceModelEntity,
queryRunner: QueryRunner,
spaces?: SpaceEntity[],
): Promise<ISingleSubspaceModel[]> {
if (!dtos.length) return [];
@ -89,6 +93,14 @@ export class SubSpaceModelService {
const savedSubspaces = await queryRunner.manager.save(subspaceEntities);
if (spaces) {
await this.subspaceService.createSubSpaceFromModel(
savedSubspaces,
spaces,
queryRunner,
);
}
return savedSubspaces.map((subspace, index) => ({
subspaceModel: subspace,
action: ModifyAction.ADD,
@ -102,6 +114,7 @@ export class SubSpaceModelService {
queryRunner: QueryRunner,
projectUuid: string,
spaceTagUpdateDtos?: ModifyTagModelDto[],
spaces?: SpaceEntity[],
) {
try {
if (!dtos || dtos.length === 0) {
@ -125,6 +138,7 @@ export class SubSpaceModelService {
addDtos,
spaceModel,
queryRunner,
spaces,
);
const combineModels = [...addedModels, ...updatedModels];

View File

@ -46,6 +46,16 @@ import { SpaceModelProductAllocationService } from './services/space-model-produ
import { SubspaceModelProductAllocationService } from './services/subspace/subspace-model-product-allocation.service';
import { SpaceProductAllocationService } from 'src/space/services/space-product-allocation.service';
import { SubspaceProductAllocationService } from 'src/space/services/subspace/subspace-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';
const CommandHandlers = [
PropogateUpdateSpaceModelHandler,
@ -80,6 +90,14 @@ const CommandHandlers = [
SpaceLinkRepository,
InviteSpaceRepository,
NewTagService,
DeviceService,
DeviceStatusFirebaseService,
DeviceStatusLogRepository,
SceneService,
SceneIconRepository,
SceneDeviceRepository,
SceneRepository,
AutomationRepository,
SpaceModelProductAllocationRepoitory,
SubspaceModelProductAllocationRepoitory,
NewTagRepository,
@ -90,6 +108,7 @@ const CommandHandlers = [
SubspaceProductAllocationService,
SpaceProductAllocationRepository,
SubspaceProductAllocationRepository,
SubSpaceService,
],
exports: [CqrsModule, SpaceModelService],
})