feat(nestjs): migrate to NestJS

This commit is contained in:
Ahmed Bouhuolia
2025-04-07 11:51:24 +02:00
parent f068218a16
commit 55fcc908ef
3779 changed files with 631 additions and 195332 deletions

View File

@@ -0,0 +1,73 @@
import { Inject, Injectable } from '@nestjs/common';
import { Knex } from 'knex';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { events } from '@/common/events/events';
import {
IInventoryAdjustmentDeletingPayload,
IInventoryAdjustmentEventDeletedPayload,
} from '../types/InventoryAdjustments.types';
import { UnitOfWork } from '@/modules/Tenancy/TenancyDB/UnitOfWork.service';
import { InventoryAdjustmentEntry } from '../models/InventoryAdjustmentEntry';
import { InventoryAdjustment } from '../models/InventoryAdjustment';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class DeleteInventoryAdjustmentService {
constructor(
private readonly eventEmitter: EventEmitter2,
private readonly uow: UnitOfWork,
@Inject(InventoryAdjustment.name)
private readonly inventoryAdjustmentModel: TenantModelProxy<
typeof InventoryAdjustment
>,
@Inject(InventoryAdjustmentEntry.name)
private readonly inventoryAdjustmentEntryModel: TenantModelProxy<
typeof InventoryAdjustmentEntry
>,
) {}
/**
* Deletes the inventory adjustment transaction.
* @param {number} inventoryAdjustmentId - Inventory adjustment id.
*/
public async deleteInventoryAdjustment(
inventoryAdjustmentId: number,
): Promise<void> {
// Retrieve the inventory adjustment or throw not found service error.
const oldInventoryAdjustment = await this.inventoryAdjustmentModel()
.query()
.findById(inventoryAdjustmentId)
.throwIfNotFound();
// Deletes the inventory adjustment transaction and associated transactions
// under unit-of-work env.
return this.uow.withTransaction(async (trx: Knex.Transaction) => {
// Triggers `onInventoryAdjustmentDeleting` event.
await this.eventEmitter.emitAsync(events.inventoryAdjustment.onDeleting, {
oldInventoryAdjustment,
trx,
} as IInventoryAdjustmentDeletingPayload);
// Deletes the inventory adjustment entries.
await this.inventoryAdjustmentEntryModel()
.query(trx)
.where('adjustment_id', inventoryAdjustmentId)
.delete();
// Deletes the inventory adjustment transaction.
await this.inventoryAdjustmentModel()
.query(trx)
.findById(inventoryAdjustmentId)
.delete();
// Triggers `onInventoryAdjustmentDeleted` event.
await this.eventEmitter.emitAsync(events.inventoryAdjustment.onDeleted, {
inventoryAdjustmentId,
oldInventoryAdjustment,
trx,
} as IInventoryAdjustmentEventDeletedPayload);
});
}
}