From 4febc4e5027c1c6a771e0ffae9db30014e9f8735 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Mon, 7 Apr 2025 13:35:02 +0200 Subject: [PATCH] refactor(nestjs): transaction locking --- .../Branches/integrations/ValidateBranchExistance.ts | 2 +- packages/server/src/modules/Metable/MetableStore.ts | 2 +- .../TransactionsLocking/dtos/TransactionsLocking.dto.ts | 5 +++++ .../guards/PurchasesTransactionLockingGuard.ts | 4 ++-- .../guards/SalesTransactionLockingGuard.ts | 4 ++-- .../TransactionsLocking/guards/TransactionsLockingGuard.ts | 5 ++--- .../TransactionsLocking/types/TransactionsLocking.types.ts | 2 -- packages/server/src/modules/Warehouses/Warehouse.types.ts | 7 ------- packages/server/test/transactions-locking.e2e-spec.ts | 1 + 9 files changed, 14 insertions(+), 18 deletions(-) diff --git a/packages/server/src/modules/Branches/integrations/ValidateBranchExistance.ts b/packages/server/src/modules/Branches/integrations/ValidateBranchExistance.ts index e5540eba3..af5ce0a01 100644 --- a/packages/server/src/modules/Branches/integrations/ValidateBranchExistance.ts +++ b/packages/server/src/modules/Branches/integrations/ValidateBranchExistance.ts @@ -22,7 +22,7 @@ export class ValidateBranchExistance { public validateTransactionBranchWhenActive = async ( branchId: number | null, ) => { - const isActive = this.branchesSettings.isMultiBranchesActive(); + const isActive = await this.branchesSettings.isMultiBranchesActive(); // Can't continue if the multi-warehouses feature is inactive. if (!isActive) return; diff --git a/packages/server/src/modules/Metable/MetableStore.ts b/packages/server/src/modules/Metable/MetableStore.ts index 87f79ed15..f3866a588 100644 --- a/packages/server/src/modules/Metable/MetableStore.ts +++ b/packages/server/src/modules/Metable/MetableStore.ts @@ -119,8 +119,8 @@ export class MetableStore implements IMetableStore { value: newValue, key, ...extraColumns, + group: extraColumns?.group || 'default', _markAsInserted: true, - group: 'default', }); } } diff --git a/packages/server/src/modules/TransactionsLocking/dtos/TransactionsLocking.dto.ts b/packages/server/src/modules/TransactionsLocking/dtos/TransactionsLocking.dto.ts index c42ef1515..c15dd00f1 100644 --- a/packages/server/src/modules/TransactionsLocking/dtos/TransactionsLocking.dto.ts +++ b/packages/server/src/modules/TransactionsLocking/dtos/TransactionsLocking.dto.ts @@ -1,9 +1,14 @@ +import { Type } from 'class-transformer'; import { IsString } from 'class-validator'; import { IsNotEmpty } from 'class-validator'; import { IsDate } from 'class-validator'; export class TransactionsLockingDto { + @IsString() + module: string; + @IsDate() + @Type(() => Date) @IsNotEmpty() lockToDate: Date; diff --git a/packages/server/src/modules/TransactionsLocking/guards/PurchasesTransactionLockingGuard.ts b/packages/server/src/modules/TransactionsLocking/guards/PurchasesTransactionLockingGuard.ts index 1ddd980b1..db2c75106 100644 --- a/packages/server/src/modules/TransactionsLocking/guards/PurchasesTransactionLockingGuard.ts +++ b/packages/server/src/modules/TransactionsLocking/guards/PurchasesTransactionLockingGuard.ts @@ -1,7 +1,7 @@ -import { TransactionsLockingGroup } from '../types/TransactionsLocking.types'; import { Injectable } from '@nestjs/common'; -import { TransactionsLockingGuard } from './TransactionsLockingGuard'; import { MomentInput } from 'moment'; +import { TransactionsLockingGroup } from '../types/TransactionsLocking.types'; +import { TransactionsLockingGuard } from './TransactionsLockingGuard'; @Injectable() export class PurchasesTransactionLockingGuard { diff --git a/packages/server/src/modules/TransactionsLocking/guards/SalesTransactionLockingGuard.ts b/packages/server/src/modules/TransactionsLocking/guards/SalesTransactionLockingGuard.ts index ef87f9775..fc8d8bd4a 100644 --- a/packages/server/src/modules/TransactionsLocking/guards/SalesTransactionLockingGuard.ts +++ b/packages/server/src/modules/TransactionsLocking/guards/SalesTransactionLockingGuard.ts @@ -1,7 +1,7 @@ -import { TransactionsLockingGroup } from '../types/TransactionsLocking.types'; import { Injectable } from '@nestjs/common'; -import { TransactionsLockingGuard } from './TransactionsLockingGuard'; import { MomentInput } from 'moment'; +import { TransactionsLockingGroup } from '../types/TransactionsLocking.types'; +import { TransactionsLockingGuard } from './TransactionsLockingGuard'; @Injectable() export class SalesTransactionLockingGuard { diff --git a/packages/server/src/modules/TransactionsLocking/guards/TransactionsLockingGuard.ts b/packages/server/src/modules/TransactionsLocking/guards/TransactionsLockingGuard.ts index 38d1abe82..96466c37b 100644 --- a/packages/server/src/modules/TransactionsLocking/guards/TransactionsLockingGuard.ts +++ b/packages/server/src/modules/TransactionsLocking/guards/TransactionsLockingGuard.ts @@ -70,7 +70,8 @@ export class TransactionsLockingGuard { ) => { const { lockToDate } = await this.transactionsLockingRepo.getTransactionsLocking(lockingGroup); - throw new ServiceError(ERRORS.TRANSACTIONS_DATE_LOCKED, null, { + + throw new ServiceError(ERRORS.TRANSACTIONS_DATE_LOCKED, 'Transactions locked', { lockedToDate: lockToDate, formattedLockedToDate: moment(lockToDate).format('YYYY/MM/DD'), }); @@ -88,14 +89,12 @@ export class TransactionsLockingGuard { const lockingType = await this.transactionsLockingRepo.getTransactionsLockingType(); - // if (lockingType === TransactionsLockingGroup.All) { return this.validateTransactionsLocking( transactionDate, TransactionsLockingGroup.All, ); } - // return this.validateTransactionsLocking(transactionDate, moduleType); }; } diff --git a/packages/server/src/modules/TransactionsLocking/types/TransactionsLocking.types.ts b/packages/server/src/modules/TransactionsLocking/types/TransactionsLocking.types.ts index 9b57d9b23..e483b5bf5 100644 --- a/packages/server/src/modules/TransactionsLocking/types/TransactionsLocking.types.ts +++ b/packages/server/src/modules/TransactionsLocking/types/TransactionsLocking.types.ts @@ -19,13 +19,11 @@ export enum TransactionsLockingType { } export interface ITransactionsLockingPartialUnlocked { - tenantId: number; module: TransactionsLockingGroup; transactionLockingDTO: ITransactionsLockingAllDTO; } export interface ITransactionsLockingCanceled { - tenantId: number; module: TransactionsLockingGroup; cancelLockingDTO: ICancelTransactionsLockingDTO; } diff --git a/packages/server/src/modules/Warehouses/Warehouse.types.ts b/packages/server/src/modules/Warehouses/Warehouse.types.ts index 02b2f4bf9..436239b35 100644 --- a/packages/server/src/modules/Warehouses/Warehouse.types.ts +++ b/packages/server/src/modules/Warehouses/Warehouse.types.ts @@ -64,26 +64,22 @@ export interface IEditWarehouseTransferDTO { } export interface IWarehouseEditPayload { - tenantId: number; warehouseId: number; warehouseDTO: IEditWarehouseDTO; trx: Knex.Transaction; } export interface IWarehouseEditedPayload { - tenantId: number; warehouse: IWarehouse; warehouseDTO: IEditWarehouseDTO; trx: Knex.Transaction; } export interface IWarehouseDeletePayload { - // tenantId: number; warehouseId: number; trx: Knex.Transaction; } export interface IWarehouseDeletedPayload { - tenantId: number; warehouseId: number; trx: Knex.Transaction; } @@ -101,7 +97,6 @@ export interface IWarehouseCreatedPayload { export interface IWarehouseTransferCreate { trx: Knex.Transaction; warehouseTransferDTO: ICreateWarehouseTransferDTO; - tenantId: number; } export interface IWarehouseTransferCreated { @@ -146,10 +141,8 @@ export interface IItemWarehouseQuantityChange { } export interface IWarehousesActivatePayload { - // tenantId: number; } export interface IWarehousesActivatedPayload { - // tenantId: number; primaryWarehouse: Warehouse; } diff --git a/packages/server/test/transactions-locking.e2e-spec.ts b/packages/server/test/transactions-locking.e2e-spec.ts index b1dc78a1f..c7251ef6e 100644 --- a/packages/server/test/transactions-locking.e2e-spec.ts +++ b/packages/server/test/transactions-locking.e2e-spec.ts @@ -6,6 +6,7 @@ describe.only('Transactions Locking (e2e)', () => { return request(app.getHttpServer()) .put('/transactions-locking/lock') .set('organization-id', orgainzationId) + .set('Authorization', AuthorizationHeader) .send({ module: 'all', lock_to_date: '2025-01-01',