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, SubspaceProductRepository,
SubspaceRepository, SubspaceRepository,
} from '@app/common/modules/space/repositories/subspace.repository'; } from '@app/common/modules/space/repositories/subspace.repository';
import { IUpdateSubspaceModelInterface } from '../interfaces';
@CommandHandler(PropogateSubspaceCommand) @CommandHandler(PropogateSubspaceCommand)
export class PropogateSubspaceHandler export class PropogateSubspaceHandler
@ -24,14 +25,14 @@ export class PropogateSubspaceHandler
async execute(command: PropogateSubspaceCommand): Promise<void> { async execute(command: PropogateSubspaceCommand): Promise<void> {
try { try {
const newSubspaceModels = command.param?.new; const newSubspaceModels = command.param?.new;
const updateSubspaceModels = command.param?.update;
if (!newSubspaceModels || newSubspaceModels.length === 0) { if (!newSubspaceModels && !updateSubspaceModels) {
this.logger.warn('No new subspace models provided.'); this.logger.warn('No new or updated subspace models provided.');
return; return;
} }
const spaceModelUuid = const spaceModelUuid = command.param.spaceModelUuid;
newSubspaceModels[0]?.subspaceModel?.spaceModel?.uuid;
if (!spaceModelUuid) { if (!spaceModelUuid) {
this.logger.error( this.logger.error(
@ -47,7 +48,13 @@ export class PropogateSubspaceHandler
return; 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) { } catch (error) {
this.logger.error( this.logger.error(
'Error in PropogateSubspaceHandler execution', '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[], newSubspaceModels: any[],
spaces: SpaceEntity[], spaces: SpaceEntity[],
) { ) {

View File

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

View File

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