From fd8b7cc45e6aa6d561e7a5596100e2c3e5637e2e Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 26 Jun 2025 18:14:26 +0700 Subject: [PATCH] fix: update validation logic in item managers to use 'not in' for time_group_id checks and enhance relation handling --- .../validation/validate-relation.helper.ts | 5 ++++- .../usecases/managers/active-item.manager.ts | 18 +++++++++++++++++- .../usecases/managers/update-item.manager.ts | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/core/helpers/validation/validate-relation.helper.ts b/src/core/helpers/validation/validate-relation.helper.ts index 2f9ed67..b9bc728 100644 --- a/src/core/helpers/validation/validate-relation.helper.ts +++ b/src/core/helpers/validation/validate-relation.helper.ts @@ -71,6 +71,7 @@ export class ValidateRelationHelper { } mappingValidator(column, operator, value) { + const candidates = Array.isArray(value) ? value : [value]; switch (operator) { case '!=': return column != value; @@ -79,9 +80,11 @@ export class ValidateRelationHelper { return column == value; case 'in': - const candidates = Array.isArray(value) ? value : [value]; return candidates.includes(column); + case 'not in': + return !candidates.includes(column); + default: return column == value; } diff --git a/src/modules/item-related/item/domain/usecases/managers/active-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/active-item.manager.ts index 59da47d..fd6b90d 100644 --- a/src/modules/item-related/item/domain/usecases/managers/active-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/active-item.manager.ts @@ -32,7 +32,13 @@ export class ActiveItemManager extends BaseUpdateStatusManager { } get validateRelations(): validateRelations[] { - return [ + const timeGroupId = this.data.time_group_id ?? this.data.time_group?.id; + const relation = + this.data.bundling_items?.length > 0 + ? 'bundling_items' + : 'bundling_parents'; + + const validateRelations: validateRelations[] = [ { relation: 'tenant', singleQuery: ['status', '!=', STATUS.ACTIVE], @@ -44,6 +50,16 @@ export class ActiveItemManager extends BaseUpdateStatusManager { message: `Gagal! Terdapat item yang belum aktif`, }, ]; + + if (timeGroupId != null) { + validateRelations.push({ + relation: relation, + singleQuery: ['time_group_id', 'not in', [timeGroupId, null]], + message: `Gagal Update! Time group item dan bundling item tidak sama`, + }); + } + + return validateRelations; } get entityTarget(): any { diff --git a/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts index ebab591..c8bcb70 100644 --- a/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts @@ -50,7 +50,7 @@ export class UpdateItemManager extends BaseUpdateManager { ? [ { relation: relation, - singleQuery: ['time_group_id', 'in', [timeGroupId, null]], + singleQuery: ['time_group_id', 'not in', [timeGroupId, null]], message: `Gagal Update! Time group item dan bundling item tidak sama`, }, ]