fix issues

This commit is contained in:
hannathkadher
2025-03-12 01:36:10 +04:00
parent 67a78dbdfd
commit 1ce2f3c3cc
7 changed files with 122 additions and 78 deletions

View File

@ -13,8 +13,7 @@ import {
SubspaceModelProductAllocationRepoitory, SubspaceModelProductAllocationRepoitory,
TagModel, TagModel,
} from '@app/common/modules/space-model'; } from '@app/common/modules/space-model';
import { DataSource, In, QueryRunner } from 'typeorm'; import { In, QueryRunner } from 'typeorm';
import { SubSpaceService } from 'src/space/services';
import { TagService } from 'src/space/services/tag'; import { TagService } from 'src/space/services/tag';
import { import {
ISingleSubspaceModel, ISingleSubspaceModel,
@ -30,8 +29,6 @@ export class PropogateUpdateSpaceModelHandler
constructor( constructor(
private readonly spaceRepository: SpaceRepository, private readonly spaceRepository: SpaceRepository,
private readonly subspaceRepository: SubspaceRepository, private readonly subspaceRepository: SubspaceRepository,
private readonly dataSource: DataSource,
private readonly subSpaceService: SubSpaceService,
private readonly tagService: TagService, private readonly tagService: TagService,
private readonly subspaceModelProductRepository: SubspaceModelProductAllocationRepoitory, private readonly subspaceModelProductRepository: SubspaceModelProductAllocationRepoitory,
private readonly subspaceProductRepository: SubspaceProductAllocationRepository, private readonly subspaceProductRepository: SubspaceProductAllocationRepository,
@ -111,7 +108,9 @@ export class PropogateUpdateSpaceModelHandler
], ],
}); });
if (!subspaces.length) return; if (!subspaces.length) {
return;
}
const allocationUuidsToRemove = subspaces.flatMap((subspace) => const allocationUuidsToRemove = subspaces.flatMap((subspace) =>
subspace.productAllocations.map((allocation) => allocation.uuid), subspace.productAllocations.map((allocation) => allocation.uuid),
@ -127,7 +126,10 @@ export class PropogateUpdateSpaceModelHandler
); );
const relocatedAllocations = subspaceModel.relocatedAllocations || []; const relocatedAllocations = subspaceModel.relocatedAllocations || [];
if (!relocatedAllocations.length) return;
if (!relocatedAllocations.length) {
return;
}
for (const space of spaces) { for (const space of spaces) {
for (const { allocation, tags = [] } of relocatedAllocations) { for (const { allocation, tags = [] } of relocatedAllocations) {

View File

@ -440,11 +440,12 @@ export class SpaceModelService {
queryRunner?: QueryRunner, // Make queryRunner optional queryRunner?: QueryRunner, // Make queryRunner optional
): Promise<void> { ): Promise<void> {
try { try {
space.spaceModel = spaceModel;
if (queryRunner) { if (queryRunner) {
await queryRunner.manager.save(SpaceEntity, space); await queryRunner.manager.update(SpaceEntity, space.uuid, {
spaceModel,
});
} else { } else {
await this.spaceRepository.save(space); await this.spaceRepository.update(space.uuid, { spaceModel });
} }
const spaceProductAllocations = spaceModel.productAllocations.map( const spaceProductAllocations = spaceModel.productAllocations.map(
(modelAllocation) => (modelAllocation) =>

View File

@ -281,7 +281,7 @@ export class SubspaceModelProductAllocationService {
queryRunner: QueryRunner, queryRunner: QueryRunner,
spaceModel: SpaceModelEntity, spaceModel: SpaceModelEntity,
spaceTagUpdateDtos?: ModifyTagModelDto[], spaceTagUpdateDtos?: ModifyTagModelDto[],
) { ): Promise<IUpdatedAllocations[]> {
const spaceAllocationToExclude: SpaceModelProductAllocationEntity[] = []; const spaceAllocationToExclude: SpaceModelProductAllocationEntity[] = [];
const updatedAllocations: IUpdatedAllocations[] = []; const updatedAllocations: IUpdatedAllocations[] = [];

View File

@ -145,6 +145,7 @@ export class SubSpaceModelService {
); );
const combineModels = [...createdSubspaces, ...updatedSubspaces]; const combineModels = [...createdSubspaces, ...updatedSubspaces];
const updatedAllocations =
await this.productAllocationService.updateAllocations( await this.productAllocationService.updateAllocations(
combineModels, combineModels,
projectUuid, projectUuid,

View File

@ -177,17 +177,36 @@ export class ValidationService {
} }
async validateSpaceModel(spaceModelUuid: string): Promise<SpaceModelEntity> { async validateSpaceModel(spaceModelUuid: string): Promise<SpaceModelEntity> {
const spaceModel = await this.spaceModelRepository.findOne({ const queryBuilder = this.spaceModelRepository
where: { uuid: spaceModelUuid }, .createQueryBuilder('spaceModel')
relations: [ .leftJoinAndSelect(
'spaceModel.subspaceModels',
'subspaceModels', 'subspaceModels',
'subspaceModels.disabled = :disabled',
{ disabled: false },
)
.leftJoinAndSelect(
'subspaceModels.productAllocations', 'subspaceModels.productAllocations',
'subspaceModels.productAllocations.tags', 'subspaceProductAllocations',
'subspaceModels.productAllocations.product', )
.leftJoinAndSelect(
'subspaceProductAllocations.tags',
'subspaceAllocationTags',
)
.leftJoinAndSelect(
'subspaceProductAllocations.product',
'subspaceAllocationProduct',
)
.leftJoinAndSelect('spaceModel.productAllocations', 'productAllocations')
.leftJoinAndSelect(
'productAllocations.product', 'productAllocations.product',
'productAllocations.tags', 'productAllocationProduct',
], )
}); .leftJoinAndSelect('productAllocations.tags', 'productAllocationTags')
.andWhere('spaceModel.disabled = :disabled', { disabled: false })
.where('spaceModel.uuid = :uuid', { uuid: spaceModelUuid });
const spaceModel = await queryBuilder.getOne();
if (!spaceModel) { if (!spaceModel) {
throw new HttpException( throw new HttpException(

View File

@ -427,6 +427,8 @@ export class SpaceService {
const { communityUuid, spaceUuid, projectUuid } = params; const { communityUuid, spaceUuid, projectUuid } = params;
const queryRunner = this.dataSource.createQueryRunner(); const queryRunner = this.dataSource.createQueryRunner();
const hasSubspace = updateSpaceDto.subspace?.length > 0;
const hasTags = updateSpaceDto.tags?.length > 0;
try { try {
await queryRunner.connect(); await queryRunner.connect();
@ -450,11 +452,19 @@ export class SpaceService {
} }
if (space.spaceModel && !updateSpaceDto.spaceModelUuid) { if (space.spaceModel && !updateSpaceDto.spaceModelUuid) {
space.spaceModel = null; await queryRunner.manager.update(SpaceEntity, space.uuid, {
spaceModel: null,
});
await this.unlinkSpaceFromModel(space, queryRunner); await this.unlinkSpaceFromModel(space, queryRunner);
} }
this.updateSpaceProperties(space, updateSpaceDto); await this.updateSpaceProperties(space, updateSpaceDto, queryRunner);
if (hasSubspace || hasTags) {
await queryRunner.manager.update(SpaceEntity, space.uuid, {
spaceModel: null,
});
}
if (updateSpaceDto.spaceModelUuid) { if (updateSpaceDto.spaceModelUuid) {
const spaceModel = await this.validationService.validateSpaceModel( const spaceModel = await this.validationService.validateSpaceModel(
@ -478,6 +488,7 @@ export class SpaceService {
project, project,
queryRunner, queryRunner,
); );
await this.spaceModelService.linkToSpace( await this.spaceModelService.linkToSpace(
space, space,
spaceModel, spaceModel,
@ -485,14 +496,9 @@ export class SpaceService {
); );
} }
} }
const hasSubspace = updateSpaceDto.subspace?.length > 0;
if (hasSubspace) { if (hasSubspace) {
space.spaceModel = null;
await this.subSpaceService.unlinkModels(space.subspaces, queryRunner); await this.subSpaceService.unlinkModels(space.subspaces, queryRunner);
} }
await queryRunner.manager.save(space);
if (hasSubspace) { if (hasSubspace) {
await this.subSpaceService.modifySubSpace( await this.subSpaceService.modifySubSpace(
@ -513,6 +519,7 @@ export class SpaceService {
updateSpaceDto.subspace, updateSpaceDto.subspace,
); );
} }
await queryRunner.commitTransaction(); await queryRunner.commitTransaction();
return new SuccessResponseDto({ return new SuccessResponseDto({
@ -560,16 +567,23 @@ export class SpaceService {
} }
} }
private updateSpaceProperties( private async updateSpaceProperties(
space: SpaceEntity, space: SpaceEntity,
updateSpaceDto: UpdateSpaceDto, updateSpaceDto: UpdateSpaceDto,
): void { queryRunner: QueryRunner,
): Promise<void> {
const { spaceName, x, y, icon } = updateSpaceDto; const { spaceName, x, y, icon } = updateSpaceDto;
if (spaceName) space.spaceName = spaceName; const updateFields: Partial<SpaceEntity> = {};
if (x) space.x = x;
if (y) space.y = y; if (spaceName) updateFields.spaceName = spaceName;
if (icon) space.icon = icon; if (x !== undefined) updateFields.x = x;
if (y !== undefined) updateFields.y = y;
if (icon) updateFields.icon = icon;
if (Object.keys(updateFields).length > 0) {
await queryRunner.manager.update(SpaceEntity, space.uuid, updateFields);
}
} }
async getSpacesHierarchyForSpace( async getSpacesHierarchyForSpace(

View File

@ -327,6 +327,7 @@ export class SubSpaceService {
if (!subspaceDtos || subspaceDtos.length === 0) { if (!subspaceDtos || subspaceDtos.length === 0) {
return; return;
} }
try {
const addedSubspaces = []; const addedSubspaces = [];
const updatedSubspaces = []; const updatedSubspaces = [];
@ -374,6 +375,12 @@ export class SubSpaceService {
spaceTagUpdateDtos, spaceTagUpdateDtos,
); );
} }
} catch (error) {
throw new HttpException(
`An error occurred while modifying subspaces: ${error.message}`,
HttpStatus.INTERNAL_SERVER_ERROR,
);
}
} }
async unlinkModels( async unlinkModels(