From c78eeff7e6abbe0059fb6beec65fc20b5c15fa0b Mon Sep 17 00:00:00 2001 From: hannathkadher Date: Fri, 20 Dec 2024 14:16:23 +0400 Subject: [PATCH] update product model --- .../update-product-model.dto.ts | 4 +- .../interfaces/update-subspace.interface.ts | 4 + .../subspace-product-item-model.service.ts | 2 +- .../subspace-product-model.service.ts | 79 +++++++++++++++++-- 4 files changed, 81 insertions(+), 8 deletions(-) diff --git a/src/space-model/dtos/product-model-dtos/update-product-model.dto.ts b/src/space-model/dtos/product-model-dtos/update-product-model.dto.ts index 60e7baf..224330e 100644 --- a/src/space-model/dtos/product-model-dtos/update-product-model.dto.ts +++ b/src/space-model/dtos/product-model-dtos/update-product-model.dto.ts @@ -12,7 +12,7 @@ import { ProductItemModelModificationDto } from '../product-item-model-dtos'; export class UpdateProductModelDto extends BaseProductModelDto { @ApiProperty({ - description: 'Number of products in the model', + description: 'Number of products to be modified in the model', example: 3, }) @IsNotEmpty() @@ -27,5 +27,5 @@ export class UpdateProductModelDto extends BaseProductModelDto { @ArrayNotEmpty() @ValidateNested({ each: true }) @Type(() => ProductItemModelModificationDto) - items: ProductItemModelModificationDto[]; + items: ProductItemModelModificationDto; } diff --git a/src/space-model/interfaces/update-subspace.interface.ts b/src/space-model/interfaces/update-subspace.interface.ts index 05982a4..7433c2d 100644 --- a/src/space-model/interfaces/update-subspace.interface.ts +++ b/src/space-model/interfaces/update-subspace.interface.ts @@ -35,3 +35,7 @@ export interface IUpdateSubspaceModelInterface { export interface IDeletedSubsaceModelInterface { uuid: string; } + +export interface IModifiedProductModelsInterface { + add?: ProductModelInterface[]; +} diff --git a/src/space-model/services/subspace/subspace-product-item-model.service.ts b/src/space-model/services/subspace/subspace-product-item-model.service.ts index cdd0688..27fc2b9 100644 --- a/src/space-model/services/subspace/subspace-product-item-model.service.ts +++ b/src/space-model/services/subspace/subspace-product-item-model.service.ts @@ -159,7 +159,7 @@ export class SubspaceProductItemModelService extends BaseProductItemService { } return productItemModels; } catch (error) { - this.handleException(error, 'Failed to modify SpaceModels.'); + this.handleException(error, 'Failed to modify Product Item Models.'); } } diff --git a/src/space-model/services/subspace/subspace-product-model.service.ts b/src/space-model/services/subspace/subspace-product-model.service.ts index 4e145bc..9743aca 100644 --- a/src/space-model/services/subspace/subspace-product-model.service.ts +++ b/src/space-model/services/subspace/subspace-product-model.service.ts @@ -1,14 +1,24 @@ import { SpaceModelEntity, SubspaceModelEntity, + SubspaceProductModelEntity, SubspaceProductModelRepository, } from '@app/common/modules/space-model'; -import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; -import { SubspaceProductItemModelService } from './subspace-product-item-model.service'; -import { CreateProductModelDto } from '../../dtos'; import { QueryRunner } from 'typeorm'; +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; + +import { SubspaceProductItemModelService } from './subspace-product-item-model.service'; +import { + CreateProductModelDto, + ProductModelModificationDto, + UpdateProductModelDto, +} from '../../dtos'; import { BaseProductModelService } from '../../common'; import { ProductService } from 'src/product/services'; +import { + IModifiedProductModelsInterface, + ProductModelInterface, +} from '../../interfaces'; @Injectable() export class SubspaceProductModelService extends BaseProductModelService { @@ -25,7 +35,7 @@ export class SubspaceProductModelService extends BaseProductModelService { spaceModel: SpaceModelEntity, subspaceModel: SubspaceModelEntity, queryRunner: QueryRunner, - ) { + ): Promise { try { if (!spaceProductModelDtos?.length) return; @@ -59,7 +69,7 @@ export class SubspaceProductModelService extends BaseProductModelService { return { productModel: savedModel, productItemModels, - }; + } as ProductModelInterface; }), ); return newProductModels; @@ -74,4 +84,63 @@ export class SubspaceProductModelService extends BaseProductModelService { ); } } + + async updateSubspaceProductModels(dtos: UpdateProductModelDto[]) { + try { + for (const dto of dtos) { + await this.findOne(dto.productModelUuid); + const newCount = dto.productCount; + if ( + dto.items.add.length + + dto.items.delete.length + + dto.items.delete.length !== + newCount + ) { + throw new HttpException( + `Invalid list of items`, + HttpStatus.BAD_REQUEST, + ); + } + } + } catch (error) {} + } + + async modifySubspaceProductModels( + dto: ProductModelModificationDto, + spaceModel: SpaceModelEntity, + subspaceModel: SubspaceModelEntity, + queryRunner: QueryRunner, + ) { + const productItemModels: IModifiedProductModelsInterface = {}; + try { + productItemModels.add = await this.createSubspaceProductModels( + dto.add, + spaceModel, + subspaceModel, + queryRunner, + ); + } catch (error) { + if (error instanceof HttpException) { + throw error; + } + throw new HttpException( + 'Failed to modify Subspace product model', + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + } + + async findOne(uuid: string): Promise { + const productModel = await this.subpaceProductModelRepository.findOne({ + where: { + uuid, + }, + }); + if (!productModel) + throw new HttpException( + `Subspace Product model with uuid ${uuid} not found`, + HttpStatus.NOT_FOUND, + ); + return productModel; + } }