This commit is contained in:
hannathkadher
2024-12-19 11:21:33 +04:00
parent aefe788dd0
commit 5e089f76ac
3 changed files with 72 additions and 17 deletions

View File

@ -7,6 +7,7 @@ import {
SubspaceProductRepository,
SubspaceRepository,
} from '@app/common/modules/space/repositories/subspace.repository';
import { IUpdateSubspaceModelInterface } from '../interfaces';
@CommandHandler(PropogateSubspaceCommand)
export class PropogateSubspaceHandler
@ -24,14 +25,14 @@ export class PropogateSubspaceHandler
async execute(command: PropogateSubspaceCommand): Promise<void> {
try {
const newSubspaceModels = command.param?.new;
const updateSubspaceModels = command.param?.update;
if (!newSubspaceModels || newSubspaceModels.length === 0) {
this.logger.warn('No new subspace models provided.');
if (!newSubspaceModels && !updateSubspaceModels) {
this.logger.warn('No new or updated subspace models provided.');
return;
}
const spaceModelUuid =
newSubspaceModels[0]?.subspaceModel?.spaceModel?.uuid;
const spaceModelUuid = command.param.spaceModelUuid;
if (!spaceModelUuid) {
this.logger.error(
@ -47,7 +48,13 @@ export class PropogateSubspaceHandler
return;
}
await this.processSubspaces(newSubspaceModels, spaces);
if (newSubspaceModels && newSubspaceModels.length > 0) {
await this.processNewSubspaces(newSubspaceModels, spaces);
}
if (updateSubspaceModels && updateSubspaceModels.length > 0) {
await this.updateSubspaces(updateSubspaceModels);
}
} catch (error) {
this.logger.error(
'Error in PropogateSubspaceHandler execution',
@ -56,7 +63,40 @@ export class PropogateSubspaceHandler
}
}
private async processSubspaces(
private async updateSubspaces(models: IUpdateSubspaceModelInterface[]) {
try {
for (const model of models) {
try {
const subspaceModelUuid = model.uuid;
if (model.subspaceName) {
const subspaces = await this.subspaceRepository.find({
where: {
subSpaceModel: {
uuid: subspaceModelUuid,
},
},
});
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,
);
}
}
} catch (error) {
this.logger.error('Error in updateSubspaces method', error.stack);
throw new Error('Failed to update subspaces.');
}
}
private async processNewSubspaces(
newSubspaceModels: any[],
spaces: SpaceEntity[],
) {

View File

@ -15,6 +15,7 @@ export interface ProductModelInterface {
}
export interface IModifySubspaceModelInterface {
spaceModelUuid: string;
new?: AddSubspaceModelInterface[];
update?: IUpdateSubspaceModelInterface[];
delete?: IDeletedSubsaceModelInterface[];

View File

@ -75,9 +75,8 @@ export class SubSpaceModelService {
queryRunner: QueryRunner,
) {
const updateResults: IUpdateSubspaceModelInterface[] = [];
for (const dto of updateDtos) {
try {
for (const dto of updateDtos) {
const subspaceModel = await this.findOne(dto.subspaceUuid);
const updateResult: IUpdateSubspaceModelInterface = {
uuid: dto.subspaceUuid,
@ -94,14 +93,18 @@ export class SubSpaceModelService {
}
updateResults.push(updateResult);
} catch (error) {
console.error(
`SubspaceModel with ${dto.subspaceUuid} not able to update ${error}`,
);
}
}
return updateResults;
} catch (error) {
if (error instanceof HttpException) {
throw error;
}
throw new HttpException(
error.message || 'Failed to update SpaceModels',
HttpStatus.INTERNAL_SERVER_ERROR,
);
}
}
async deleteSubspaceModels(
@ -179,7 +182,9 @@ export class SubSpaceModelService {
spaceModel: SpaceModelEntity,
queryRunner: QueryRunner,
) {
const subspaces: IModifySubspaceModelInterface = {};
const subspaces: IModifySubspaceModelInterface = {
spaceModelUuid: spaceModel.uuid,
};
try {
if (dto.add) {
const addedSubspaces = await this.createSubSpaceModels(
@ -194,11 +199,20 @@ export class SubSpaceModelService {
queryRunner,
);
subspaces.update = updatedSubspaces;
} else if (dto.delete) {
const deletedSubspaces = await this.deleteSubspaceModels(
dto.delete,
queryRunner,
);
subspaces.delete = deletedSubspaces;
}
return subspaces;
} catch (error) {
if (error instanceof HttpException) {
throw error;
}
throw new HttpException(
error.message || 'Failed to update SpaceModel',
error.message || 'Failed to modify SpaceModels',
HttpStatus.INTERNAL_SERVER_ERROR,
);
}