From b91d9f7da83628b66d0263faf9f0da5d324d7192 Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Tue, 30 Jul 2024 12:24:31 +0700 Subject: [PATCH] fix(SPG-671) Item Bundling - validasi / warning jika item dalam bundling diinactivekan sedangkan masih berelasi, bundling harus di inactivekan dulu atau didelete --- .../managers/batch-delete-item.manager.ts | 23 +++---------------- .../managers/batch-inactive-item.manager.ts | 4 +++- .../usecases/managers/delete-item.manager.ts | 23 +++---------------- .../helpers/validasi-relation.helper.ts | 19 +++++++++++++++ .../managers/inactive-item.manager.ts | 2 ++ 5 files changed, 30 insertions(+), 41 deletions(-) create mode 100644 src/modules/item-related/item/domain/usecases/managers/helpers/validasi-relation.helper.ts diff --git a/src/modules/item-related/item/domain/usecases/managers/batch-delete-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/batch-delete-item.manager.ts index d5182aa..d36aecd 100644 --- a/src/modules/item-related/item/domain/usecases/managers/batch-delete-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/batch-delete-item.manager.ts @@ -7,11 +7,8 @@ import { import { ItemModel } from '../../../data/models/item.model'; import { ItemDeletedEvent } from '../../entities/event/item-deleted.event'; import { BatchResult } from 'src/core/response/domain/ok-response.interface'; -import { - HttpStatus, - Injectable, - UnprocessableEntityException, -} from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; +import { validateRelation } from './helpers/validasi-relation.helper'; @Injectable() export class BatchDeleteItemManager extends BaseBatchDeleteManager { @@ -20,21 +17,7 @@ export class BatchDeleteItemManager extends BaseBatchDeleteManager { } async validateData(data: ItemEntity): Promise { - const haveRelation = await this.dataService.getOneByOptions({ - where: { - bundling_items: { - id: data.id, - }, - }, - }); - - if (haveRelation) { - throw new UnprocessableEntityException({ - statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! this data already connected to bunding item`, - error: 'Unprocessable Entity', - }); - } + await validateRelation(this.dataService, data.id); return; } diff --git a/src/modules/item-related/item/domain/usecases/managers/batch-inactive-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/batch-inactive-item.manager.ts index 19285af..7d74db7 100644 --- a/src/modules/item-related/item/domain/usecases/managers/batch-inactive-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/batch-inactive-item.manager.ts @@ -8,10 +8,12 @@ import { ItemModel } from '../../../data/models/item.model'; import { ItemChangeStatusEvent } from '../../entities/event/item-change-status.event'; import { BatchResult } from 'src/core/response/domain/ok-response.interface'; import { Injectable } from '@nestjs/common'; +import { validateRelation } from './helpers/validasi-relation.helper'; @Injectable() export class BatchInactiveItemManager extends BaseBatchUpdateStatusManager { - validateData(data: ItemEntity): Promise { + async validateData(data: ItemEntity): Promise { + await validateRelation(this.dataService, data.id); return; } diff --git a/src/modules/item-related/item/domain/usecases/managers/delete-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/delete-item.manager.ts index 49b8e83..ea95c6f 100644 --- a/src/modules/item-related/item/domain/usecases/managers/delete-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/delete-item.manager.ts @@ -1,8 +1,4 @@ -import { - HttpStatus, - Injectable, - UnprocessableEntityException, -} from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { BaseDeleteManager } from 'src/core/modules/domain/usecase/managers/base-delete.manager'; import { ItemEntity } from '../../entities/item.entity'; import { @@ -11,6 +7,7 @@ import { } from 'src/core/strings/constants/interface.constants'; import { ItemModel } from '../../../data/models/item.model'; import { ItemDeletedEvent } from '../../entities/event/item-deleted.event'; +import { validateRelation } from './helpers/validasi-relation.helper'; @Injectable() export class DeleteItemManager extends BaseDeleteManager { @@ -19,21 +16,7 @@ export class DeleteItemManager extends BaseDeleteManager { } async validateProcess(): Promise { - const haveRelation = await this.dataService.getOneByOptions({ - where: { - bundling_items: { - id: this.dataId, - }, - }, - }); - - if (haveRelation) { - throw new UnprocessableEntityException({ - statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! this data already connected to bunding item`, - error: 'Unprocessable Entity', - }); - } + await validateRelation(this.dataService, this.dataId); return; } diff --git a/src/modules/item-related/item/domain/usecases/managers/helpers/validasi-relation.helper.ts b/src/modules/item-related/item/domain/usecases/managers/helpers/validasi-relation.helper.ts new file mode 100644 index 0000000..abe97a6 --- /dev/null +++ b/src/modules/item-related/item/domain/usecases/managers/helpers/validasi-relation.helper.ts @@ -0,0 +1,19 @@ +import { HttpStatus, UnprocessableEntityException } from '@nestjs/common'; + +export async function validateRelation(dataService, id) { + const haveRelation = await dataService.getOneByOptions({ + where: { + bundling_items: { + id: id, + }, + }, + }); + + if (haveRelation) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Failed! this data already connected to bunding item`, + error: 'Unprocessable Entity', + }); + } +} diff --git a/src/modules/item-related/item/domain/usecases/managers/inactive-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/inactive-item.manager.ts index aef9e52..7644d03 100644 --- a/src/modules/item-related/item/domain/usecases/managers/inactive-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/inactive-item.manager.ts @@ -7,6 +7,7 @@ import { } from 'src/core/strings/constants/interface.constants'; import { ItemModel } from '../../../data/models/item.model'; import { ItemChangeStatusEvent } from '../../entities/event/item-change-status.event'; +import { validateRelation } from './helpers/validasi-relation.helper'; @Injectable() export class InactiveItemManager extends BaseUpdateStatusManager { @@ -15,6 +16,7 @@ export class InactiveItemManager extends BaseUpdateStatusManager { } async validateProcess(): Promise { + await validateRelation(this.dataService, this.dataId); return; }