return new SubspaceModels onn space update

This commit is contained in:
hannathkadher
2024-12-18 16:21:17 +04:00
parent 85aa64ac36
commit 23d3cd620c
5 changed files with 86 additions and 21 deletions

View File

@ -1,6 +1,20 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsOptional, IsString } from 'class-validator';
import { IsArray, IsOptional, IsString, ValidateNested } from 'class-validator';
import { CreateSubspaceModelDto } from './create-subspace-model.dto';
import { Type } from 'class-transformer';
export class UpdateSubspaceModelDto {
@ApiProperty({
description: 'List of subspaces to add',
type: [CreateSubspaceModelDto],
required: false,
})
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => CreateSubspaceModelDto)
add?: CreateSubspaceModelDto[];
}
export class UpdateSpaceModelDto {
@ApiProperty({
description: 'Updated name of the space model',
@ -9,4 +23,7 @@ export class UpdateSpaceModelDto {
@IsOptional()
@IsString()
modelName?: string;
@IsOptional()
subspaceModels?: UpdateSubspaceModelDto;
}

View File

@ -146,6 +146,15 @@ export class SpaceModelService {
await queryRunner.manager.save(spaceModel);
if (dto.subspaceModels) {
const updatedSubspaces =
await this.subSpaceModelService.updateSubSpaceModels(
dto.subspaceModels,
spaceModel,
queryRunner,
);
}
await queryRunner.commitTransaction();
return new SuccessResponseDto({

View File

@ -3,7 +3,7 @@ import {
SubspaceModelRepository,
} from '@app/common/modules/space-model';
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { CreateSubspaceModelDto } from '../../dtos';
import { CreateSubspaceModelDto, UpdateSubspaceModelDto } from '../../dtos';
import { QueryRunner } from 'typeorm';
import { SubspaceProductModelService } from './subspace-product-model.service';
@ -29,19 +29,25 @@ export class SubSpaceModelService {
}),
);
await queryRunner.manager.save(subspaces);
const newSubspaces = await queryRunner.manager.save(subspaces);
await Promise.all(
subSpaceModelDtos.map((dto, index) => {
const subspaceModel = subspaces[index];
return this.subSpaceProducetModelService.createSubspaceProductModels(
const addedSubspaces = await Promise.all(
subSpaceModelDtos.map(async (dto, index) => {
const subspaceModel = newSubspaces[index];
const productModels =
await this.subSpaceProducetModelService.createSubspaceProductModels(
dto.spaceProductModels,
spaceModel,
subspaceModel,
queryRunner,
);
return {
subspaceModel,
productModels,
};
}),
);
return addedSubspaces;
} catch (error) {
if (error instanceof HttpException) {
throw error;
@ -61,7 +67,6 @@ export class SubSpaceModelService {
HttpStatus.BAD_REQUEST,
);
}
const incomingNames = subSpaceModelDtos.map((dto) => dto.subspaceName);
this.validateName(incomingNames);
}
@ -85,4 +90,28 @@ export class SubSpaceModelService {
);
}
}
async updateSubSpaceModels(
dto: UpdateSubspaceModelDto,
spaceModel: SpaceModelEntity,
queryRunner: QueryRunner,
) {
const subspaces: { new?: any } = {};
try {
if (dto.add) {
const addedSubspaces = await this.createSubSpaceModels(
dto.add,
spaceModel,
queryRunner,
);
subspaces.new = addedSubspaces;
}
return subspaces;
} catch (error) {
throw new HttpException(
error.message || 'Failed to update SpaceModel',
HttpStatus.INTERNAL_SERVER_ERROR,
);
}
}
}

View File

@ -2,6 +2,7 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { QueryRunner } from 'typeorm';
import {
SpaceModelEntity,
SubspaceProductItemModelEntity,
SubspaceProductItemModelRepository,
SubspaceProductModelEntity,
} from '@app/common/modules/space-model';
@ -21,7 +22,7 @@ export class SubspaceProductItemModelService extends BaseProductItemService {
subspaceProductModel: SubspaceProductModelEntity,
spaceModel: SpaceModelEntity,
queryRunner: QueryRunner,
) {
): Promise<SubspaceProductItemModelEntity[]> {
if (!subspaceProductModel) {
throw new HttpException(
'The spaceProductModel parameter is required but was not provided.',
@ -38,6 +39,7 @@ export class SubspaceProductItemModelService extends BaseProductItemService {
);
await queryRunner.manager.save(productItems);
return productItems;
} catch (error) {
if (error instanceof HttpException) {
throw error;

View File

@ -27,6 +27,8 @@ export class SubspaceProductModelService extends BaseProductModelService {
queryRunner: QueryRunner,
) {
try {
if (!spaceProductModelDtos?.length) return;
const productModels = await Promise.all(
spaceProductModelDtos.map(async (dto) => {
this.validateProductCount(dto);
@ -44,17 +46,23 @@ export class SubspaceProductModelService extends BaseProductModelService {
const savedProductModels = await queryRunner.manager.save(productModels);
await Promise.all(
spaceProductModelDtos.map((dto, index) => {
const newProductModels = await Promise.all(
spaceProductModelDtos.map(async (dto, index) => {
const savedModel = savedProductModels[index];
return this.subspaceProductItemModelService.createProdutItemModel(
const productItemModels =
await this.subspaceProductItemModelService.createProdutItemModel(
dto.items,
savedModel, // Pass the saved model
savedModel,
spaceModel,
queryRunner,
);
return {
productModel: savedModel,
productItemModels,
};
}),
);
return newProductModels;
} catch (error) {
if (error instanceof HttpException) {
throw error;