refactor: tenant proxy providers

This commit is contained in:
Ahmed Bouhuolia
2025-02-15 23:52:12 +02:00
parent 36851d3209
commit 5c0bb52b59
302 changed files with 2396 additions and 1677 deletions

View File

@@ -3,12 +3,13 @@ import { Inject, Injectable } from '@nestjs/common';
import { Knex } from 'knex';
import { IVendorCreditAppliedBill } from '../types/VendorCreditApplyBills.types';
import { Bill } from '@/modules/Bills/models/Bill';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class ApplyVendorCreditSyncBillsService {
constructor(
@Inject(Bill.name)
private readonly billModel: typeof Bill,
private readonly billModel: TenantModelProxy<typeof Bill>,
) {}
/**
@@ -23,7 +24,7 @@ export class ApplyVendorCreditSyncBillsService {
await Bluebird.each(
vendorCreditAppliedBills,
(vendorCreditAppliedBill: IVendorCreditAppliedBill) => {
return this.billModel
return this.billModel()
.query(trx)
.where('id', vendorCreditAppliedBill.billId)
.increment('creditedAmount', vendorCreditAppliedBill.amount);
@@ -40,7 +41,7 @@ export class ApplyVendorCreditSyncBillsService {
vendorCreditAppliedBill: IVendorCreditAppliedBill,
trx?: Knex.Transaction,
) => {
await this.billModel
await this.billModel()
.query(trx)
.findById(vendorCreditAppliedBill.billId)
.decrement('creditedAmount', vendorCreditAppliedBill.amount);

View File

@@ -1,15 +1,16 @@
import { Inject, Injectable } from '@nestjs/common';
import { Knex } from 'knex';
import { VendorCredit } from '@/modules/VendorCredit/models/VendorCredit';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class ApplyVendorCreditSyncInvoicedService {
/**
* @param {typeof VendorCredit} vendorCreditModel - The vendor credit model.
* @param {TenantModelProxy<typeof VendorCredit>} vendorCreditModel - The vendor credit model.
*/
constructor(
@Inject(VendorCredit.name)
private readonly vendorCreditModel: typeof VendorCredit,
private readonly vendorCreditModel: TenantModelProxy<typeof VendorCredit>,
) {}
/**
@@ -21,9 +22,10 @@ export class ApplyVendorCreditSyncInvoicedService {
public incrementVendorCreditInvoicedAmount = async (
vendorCreditId: number,
amount: number,
trx?: Knex.Transaction
trx?: Knex.Transaction,
) => {
await this.vendorCreditModel.query(trx)
await this.vendorCreditModel()
.query(trx)
.findById(vendorCreditId)
.increment('invoicedAmount', amount);
};
@@ -37,9 +39,10 @@ export class ApplyVendorCreditSyncInvoicedService {
public decrementVendorCreditInvoicedAmount = async (
vendorCreditId: number,
amount: number,
trx?: Knex.Transaction
trx?: Knex.Transaction,
) => {
await this.vendorCreditModel.query(trx)
await this.vendorCreditModel()
.query(trx)
.findById(vendorCreditId)
.decrement('invoicedAmount', amount);
};

View File

@@ -16,6 +16,7 @@ import { Bill } from '@/modules/Bills/models/Bill';
import { ServiceError } from '@/modules/Items/ServiceError';
import { events } from '@/common/events/events';
import { VendorCreditDTOTransformService } from '@/modules/VendorCredit/commands/VendorCreditDTOTransform.service';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class ApplyVendorCreditToBillsService {
@@ -23,8 +24,8 @@ export class ApplyVendorCreditToBillsService {
* @param {UnitOfWork} uow - The unit of work service.
* @param {EventEmitter2} eventPublisher - The event emitter service.
* @param {BillPaymentValidators} billPaymentValidators - The bill payment validators service.
* @param {typeof VendorCreditAppliedBill} vendorCreditAppliedBillModel - The vendor credit applied bill model.
* @param {typeof VendorCredit} vendorCreditModel - The vendor credit model.
* @param {TenantModelProxy<typeof VendorCreditAppliedBill>} vendorCreditAppliedBillModel - The vendor credit applied bill model.
* @param {TenantModelProxy<typeof VendorCredit>} vendorCreditModel - The vendor credit model.
*/
constructor(
private readonly uow: UnitOfWork,
@@ -33,10 +34,12 @@ export class ApplyVendorCreditToBillsService {
private readonly vendorCreditDTOTransform: VendorCreditDTOTransformService,
@Inject(VendorCreditAppliedBill.name)
private readonly vendorCreditAppliedBillModel: typeof VendorCreditAppliedBill,
private readonly vendorCreditAppliedBillModel: TenantModelProxy<
typeof VendorCreditAppliedBill
>,
@Inject(VendorCredit.name)
private readonly vendorCreditModel: typeof VendorCredit,
private readonly vendorCreditModel: TenantModelProxy<typeof VendorCredit>,
) {}
/**
@@ -49,7 +52,7 @@ export class ApplyVendorCreditToBillsService {
applyCreditToBillsDTO: IVendorCreditApplyToInvoicesDTO,
): Promise<void> => {
// Retrieves the vendor credit or throw not found service error.
const vendorCredit = await this.vendorCreditModel
const vendorCredit = await this.vendorCreditModel()
.query()
.findById(vendorCreditId)
.throwIfNotFound();
@@ -80,7 +83,7 @@ export class ApplyVendorCreditToBillsService {
// Saves vendor credit applied to bills under unit-of-work envirement.
return this.uow.withTransaction(async (trx: Knex.Transaction) => {
// Inserts vendor credit applied to bills graph to the storage layer.
const vendorCreditAppliedBills = await this.vendorCreditAppliedBillModel
const vendorCreditAppliedBills = await this.vendorCreditAppliedBillModel()
.query(trx)
.insertGraph(vendorCreditAppliedModel.entries);

View File

@@ -7,6 +7,7 @@ import { IVendorCreditApplyToBillDeletedPayload } from '../types/VendorCreditApp
import { VendorCredit } from '@/modules/VendorCredit/models/VendorCredit';
import { ERRORS } from '../VendorCreditsApplyBills.constants';
import { VendorCreditAppliedBill } from '../models/VendorCreditAppliedBill';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class DeleteApplyVendorCreditToBillService {
@@ -19,12 +20,14 @@ export class DeleteApplyVendorCreditToBillService {
constructor(
private readonly uow: UnitOfWork,
private readonly eventPublisher: EventEmitter2,
@Inject(VendorCreditAppliedBill.name)
private readonly vendorCreditAppliedBillModel: typeof VendorCreditAppliedBill,
private readonly vendorCreditAppliedBillModel: TenantModelProxy<
typeof VendorCreditAppliedBill
>,
@Inject(VendorCredit.name)
private readonly vendorCreditModel: typeof VendorCredit,
private readonly vendorCreditModel: TenantModelProxy<typeof VendorCredit>,
) {}
/**
@@ -33,7 +36,7 @@ export class DeleteApplyVendorCreditToBillService {
* @returns {Promise<void>}
*/
public async deleteApplyVendorCreditToBills(appliedCreditToBillId: number) {
const oldCreditAppliedToBill = await this.vendorCreditAppliedBillModel
const oldCreditAppliedToBill = await this.vendorCreditAppliedBillModel()
.query()
.findById(appliedCreditToBillId);
@@ -41,7 +44,7 @@ export class DeleteApplyVendorCreditToBillService {
throw new ServiceError(ERRORS.VENDOR_CREDIT_APPLY_TO_BILLS_NOT_FOUND);
}
// Retrieve the vendor credit or throw not found service error.
const vendorCredit = await this.vendorCreditModel
const vendorCredit = await this.vendorCreditModel()
.query()
.findById(oldCreditAppliedToBill.vendorCreditId)
.throwIfNotFound();
@@ -49,7 +52,7 @@ export class DeleteApplyVendorCreditToBillService {
// Deletes vendor credit apply under unit-of-work environment.
return this.uow.withTransaction(async (trx) => {
// Delete vendor credit applied to bill transaction.
await this.vendorCreditAppliedBillModel
await this.vendorCreditAppliedBillModel()
.query(trx)
.findById(appliedCreditToBillId)
.delete();

View File

@@ -3,6 +3,7 @@ import { VendorCreditAppliedBillTransformer } from './VendorCreditAppliedBillTra
import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectable.service';
import { VendorCreditAppliedBill } from '@/modules/VendorCreditsApplyBills/models/VendorCreditAppliedBill';
import { VendorCredit } from '@/modules/VendorCredit/models/VendorCredit';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class GetAppliedBillsToVendorCreditService {
@@ -10,10 +11,12 @@ export class GetAppliedBillsToVendorCreditService {
private readonly transformer: TransformerInjectable,
@Inject(VendorCreditAppliedBill.name)
private readonly vendorCreditAppliedBillModel: typeof VendorCreditAppliedBill,
private readonly vendorCreditAppliedBillModel: TenantModelProxy<
typeof VendorCreditAppliedBill
>,
@Inject(VendorCredit.name)
private readonly vendorCreditModel: typeof VendorCredit,
private readonly vendorCreditModel: TenantModelProxy<typeof VendorCredit>,
) {}
/**
@@ -22,12 +25,12 @@ export class GetAppliedBillsToVendorCreditService {
* @returns
*/
public getAppliedBills = async (vendorCreditId: number) => {
const vendorCredit = await this.vendorCreditModel
const vendorCredit = await this.vendorCreditModel()
.query()
.findById(vendorCreditId)
.throwIfNotFound();
const appliedToBills = await this.vendorCreditAppliedBillModel
const appliedToBills = await this.vendorCreditAppliedBillModel()
.query()
.where('vendorCreditId', vendorCreditId)
.withGraphFetched('bill')

View File

@@ -3,9 +3,10 @@ import { VendorCreditToApplyBillTransformer } from './VendorCreditToApplyBillTra
import { VendorCredit } from '@/modules/VendorCredit/models/VendorCredit';
import { Bill } from '@/modules/Bills/models/Bill';
import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectable.service';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class GetVendorCreditToApplyBills {
export class GetVendorCreditToApplyBills {
/**
* @param {TransformerService} transformerService - The transformer service.
* @param {typeof Bill} billModel - The bill model.
@@ -13,10 +14,11 @@ export class GetVendorCreditToApplyBills {
*/
constructor(
private readonly transformerService: TransformerInjectable,
@Inject(Bill.name) private readonly billModel: typeof Bill,
@Inject(Bill.name)
private readonly billModel: TenantModelProxy<typeof Bill>,
@Inject(VendorCredit.name)
private readonly vendorCreditModel: typeof VendorCredit,
private readonly vendorCreditModel: TenantModelProxy<typeof VendorCredit>,
) {}
/**
@@ -26,13 +28,13 @@ export class GetVendorCreditToApplyBills {
*/
public async getCreditToApplyBills(vendorCreditId: number) {
// Retrieve vendor credit or throw not found service error.
const vendorCredit = await this.vendorCreditModel
const vendorCredit = await this.vendorCreditModel()
.query()
.findById(vendorCreditId)
.throwIfNotFound();
// Retrieve open bills associated to the given vendor.
const openBills = await this.billModel
const openBills = await this.billModel()
.query()
.where('vendor_id', vendorCredit.vendorId)
.modify('dueBills')