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,76 @@
import { Injectable } from '@nestjs/common';
import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';
import { PaymentIntegrationTransactionLinkDeleteEventPayload } from '../SaleInvoice.types';
import { PaymentIntegrationTransactionLinkEventPayload } from '../SaleInvoice.types';
import { PaymentIntegrationTransactionLink } from '../SaleInvoice.types';
import { omit } from 'lodash';
import {
ISaleInvoiceCreatedPayload,
ISaleInvoiceDeletingPayload,
} from '../SaleInvoice.types';
import { events } from '@/common/events/events';
import { TransactionPaymentServiceEntry } from '@/modules/PaymentServices/models/TransactionPaymentServiceEntry.model';
@Injectable()
export class InvoicePaymentIntegrationSubscriber {
constructor(private readonly eventPublisher: EventEmitter2) {}
/**
* Handles the creation of payment integration events when a sale invoice is created.
* This method filters enabled payment methods from the invoice and emits a payment
* integration link event for each method.
* @param {ISaleInvoiceCreatedPayload} payload - The payload containing sale invoice creation details.
*/
@OnEvent(events.saleInvoice.onCreated)
public handleCreatePaymentIntegrationEvents({
saleInvoiceDTO,
saleInvoice,
trx,
}: ISaleInvoiceCreatedPayload) {
const paymentMethods =
saleInvoice.paymentMethods?.filter((method) => method.enable) || [];
paymentMethods.map(
async (paymentMethod: TransactionPaymentServiceEntry) => {
const payload = {
...omit(paymentMethod, ['id']),
saleInvoiceId: saleInvoice.id,
trx,
};
await this.eventPublisher.emitAsync(
events.paymentIntegrationLink.onPaymentIntegrationLink,
payload as PaymentIntegrationTransactionLinkEventPayload,
);
},
);
}
/**
*
* @param {ISaleInvoiceDeletingPayload} payload
*/
@OnEvent(events.saleInvoice.onDeleting)
public handleCreatePaymentIntegrationEventsOnDeleteInvoice({
oldSaleInvoice,
trx,
}: ISaleInvoiceDeletingPayload) {
const paymentMethods =
oldSaleInvoice.paymentMethods?.filter((method) => method.enable) || [];
paymentMethods.map(
async (paymentMethod: TransactionPaymentServiceEntry) => {
const payload = {
...omit(paymentMethod, ['id']),
oldSaleInvoiceId: oldSaleInvoice.id,
trx,
} as PaymentIntegrationTransactionLinkDeleteEventPayload;
// Triggers `onPaymentIntegrationDeleteLink` event.
await this.eventPublisher.emitAsync(
events.paymentIntegrationLink.onPaymentIntegrationDeleteLink,
payload,
);
},
);
}
}