propagate delete subspace model

This commit is contained in:
hannathkadher
2024-12-19 15:48:10 +04:00
parent 5e089f76ac
commit 7f19073ed6
2 changed files with 52 additions and 25 deletions

View File

@ -7,7 +7,10 @@ import {
SubspaceProductRepository,
SubspaceRepository,
} from '@app/common/modules/space/repositories/subspace.repository';
import { IUpdateSubspaceModelInterface } from '../interfaces';
import {
IDeletedSubsaceModelInterface,
IUpdateSubspaceModelInterface,
} from '../interfaces';
@CommandHandler(PropogateSubspaceCommand)
export class PropogateSubspaceHandler
@ -26,6 +29,7 @@ export class PropogateSubspaceHandler
try {
const newSubspaceModels = command.param?.new;
const updateSubspaceModels = command.param?.update;
const deleteSubspaceModels = command.param?.delete;
if (!newSubspaceModels && !updateSubspaceModels) {
this.logger.warn('No new or updated subspace models provided.');
@ -55,6 +59,10 @@ export class PropogateSubspaceHandler
if (updateSubspaceModels && updateSubspaceModels.length > 0) {
await this.updateSubspaces(updateSubspaceModels);
}
if (deleteSubspaceModels && deleteSubspaceModels.length > 0) {
await this.deleteSubspaces(deleteSubspaceModels);
}
} catch (error) {
this.logger.error(
'Error in PropogateSubspaceHandler execution',
@ -63,36 +71,55 @@ export class PropogateSubspaceHandler
}
}
private async updateSubspaces(models: IUpdateSubspaceModelInterface[]) {
private async updateSubspaces(
models: IUpdateSubspaceModelInterface[],
): Promise<void> {
try {
for (const model of models) {
try {
const subspaceModelUuid = model.uuid;
if (model.subspaceName) {
const subspaces = await this.subspaceRepository.find({
where: {
subSpaceModel: {
uuid: subspaceModelUuid,
},
},
});
const updatePromises = [];
if (subspaces.length > 0) {
await this.subspaceRepository.update(subspaces, {
subspaceName: model.subspaceName,
});
}
}
} catch (innerError) {
this.logger.error(
`Error updating subspace model with UUID: ${model.uuid}`,
innerError.stack,
for (const model of models) {
const { uuid: subspaceModelUuid, subspaceName } = model;
if (subspaceName) {
updatePromises.push(
this.subspaceRepository
.createQueryBuilder()
.update()
.set({ subspaceName })
.where('subSpaceModelUuid = :uuid', { uuid: subspaceModelUuid })
.execute(),
);
}
}
await Promise.all(updatePromises);
} catch (error) {
this.logger.error('Error in updateSubspaces method', error.stack);
throw new Error('Failed to update subspaces.');
}
}
private async deleteSubspaces(models: IDeletedSubsaceModelInterface[]) {
try {
const updatePromises = [];
for (const model of models) {
const { uuid: subspaceModelUuid } = model;
if (subspaceModelUuid) {
updatePromises.push(
this.subspaceRepository
.createQueryBuilder()
.update()
.set({ disabled: true })
.where('subSpaceModelUuid = :uuid', { uuid: subspaceModelUuid })
.execute(),
);
}
}
await Promise.all(updatePromises);
} catch (error) {
this.logger.error('Error in delete subspace models', error.stack);
}
}

View File

@ -47,7 +47,7 @@ export class SpaceProductModelService extends BaseProductModelService {
const savedModel = savedProductModels[index];
return this.spaceProductItemModelService.createProdutItemModel(
dto.items,
savedModel, // Pass the saved model
savedModel,
spaceModel,
queryRunner,
);