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

@@ -6,6 +6,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
import { Vendor } from '../models/Vendor';
import { events } from '@/common/events/events';
import { IVendorActivatedPayload } from '../types/Vendors.types';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class ActivateVendorService {
@@ -15,7 +16,7 @@ export class ActivateVendorService {
private readonly validators: VendorValidators,
@Inject(Vendor.name)
private readonly vendorModel: typeof Vendor,
private readonly vendorModel: TenantModelProxy<typeof Vendor>,
) {}
/**
@@ -25,7 +26,7 @@ export class ActivateVendorService {
*/
public async activateVendor(vendorId: number): Promise<void> {
// Retrieves the old vendor or throw not found error.
const oldVendor = await this.vendorModel
const oldVendor = await this.vendorModel()
.query()
.findById(vendorId)
.throwIfNotFound();
@@ -42,7 +43,7 @@ export class ActivateVendorService {
} as IVendorActivatedPayload);
// Updates the vendor on the storage.
const vendor = await this.vendorModel
const vendor = await this.vendorModel()
.query(trx)
.updateAndFetchById(vendorId, {
active: true,

View File

@@ -10,6 +10,7 @@ import {
IVendorNewDTO,
} from '../types/Vendors.types';
import { CreateEditVendorDTOService } from './CreateEditVendorDTO';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class CreateVendorService {
@@ -25,7 +26,7 @@ export class CreateVendorService {
private readonly transformDTO: CreateEditVendorDTOService,
@Inject(Vendor.name)
private readonly vendorModel: typeof Vendor,
private readonly vendorModel: TenantModelProxy<typeof Vendor>,
) {}
/**
@@ -46,9 +47,11 @@ export class CreateVendorService {
} as IVendorEventCreatingPayload);
// Creates a new contact as vendor.
const vendor = await this.vendorModel.query(trx).insertAndFetch({
...vendorObject,
});
const vendor = await this.vendorModel()
.query(trx)
.insertAndFetch({
...vendorObject,
});
// Triggers `onVendorCreated` event.
await this.eventPublisher.emitAsync(events.vendors.onCreated, {
vendorId: vendor.id,

View File

@@ -8,6 +8,7 @@ import {
IVendorEventDeletedPayload,
IVendorEventDeletingPayload,
} from '../types/Vendors.types';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class DeleteVendorService {
@@ -19,7 +20,7 @@ export class DeleteVendorService {
constructor(
private eventPublisher: EventEmitter2,
private uow: UnitOfWork,
@Inject(Vendor.name) private vendorModel: typeof Vendor,
@Inject(Vendor.name) private vendorModel: TenantModelProxy<typeof Vendor>,
) {}
/**
@@ -29,7 +30,7 @@ export class DeleteVendorService {
*/
public async deleteVendor(vendorId: number) {
// Retrieves the old vendor or throw not found service error.
const oldVendor = await this.vendorModel
const oldVendor = await this.vendorModel()
.query()
.findById(vendorId)
.throwIfNotFound();
@@ -46,7 +47,7 @@ export class DeleteVendorService {
// Deletes vendor contact under unit-of-work.
return this.uow.withTransaction(async (trx: Knex.Transaction) => {
// Deletes the vendor contact from the storage.
await this.vendorModel.query(trx).findById(vendorId).delete();
await this.vendorModel().query(trx).findById(vendorId).delete();
// Triggers `onVendorDeleted` event.
await this.eventPublisher.emitAsync(events.vendors.onDeleted, {

View File

@@ -9,6 +9,7 @@ import {
import { UnitOfWork } from '@/modules/Tenancy/TenancyDB/UnitOfWork.service';
import { Vendor } from '../models/Vendor';
import { events } from '@/common/events/events';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class EditOpeningBalanceVendorService {
@@ -22,7 +23,7 @@ export class EditOpeningBalanceVendorService {
private readonly uow: UnitOfWork,
@Inject(Vendor.name)
private readonly vendorModel: typeof Vendor,
private readonly vendorModel: TenantModelProxy<typeof Vendor>,
) {}
/**
@@ -36,7 +37,7 @@ export class EditOpeningBalanceVendorService {
openingBalanceEditDTO: IVendorOpeningBalanceEditDTO,
) {
// Retrieves the old vendor or throw not found error.
const oldVendor = await this.vendorModel
const oldVendor = await this.vendorModel()
.query()
.findById(vendorId)
.throwIfNotFound();
@@ -54,7 +55,7 @@ export class EditOpeningBalanceVendorService {
);
// Mutates the vendor on the storage.
const vendor = await this.vendorModel
const vendor = await this.vendorModel()
.query()
.patchAndFetchById(vendorId, {
...openingBalanceEditDTO,

View File

@@ -10,6 +10,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
import { UnitOfWork } from '@/modules/Tenancy/TenancyDB/UnitOfWork.service';
import { Vendor } from '../models/Vendor';
import { events } from '@/common/events/events';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class EditVendorService {
@@ -18,7 +19,8 @@ export class EditVendorService {
private readonly uow: UnitOfWork,
private readonly transformDTO: CreateEditVendorDTOService,
@Inject(Vendor.name) private readonly vendorModel: typeof Vendor,
@Inject(Vendor.name)
private readonly vendorModel: TenantModelProxy<typeof Vendor>,
) {}
/**
@@ -29,7 +31,7 @@ export class EditVendorService {
*/
public async editVendor(vendorId: number, vendorDTO: IVendorEditDTO) {
// Retrieve the vendor or throw not found error.
const oldVendor = await this.vendorModel
const oldVendor = await this.vendorModel()
.query()
.findById(vendorId)
.throwIfNotFound();
@@ -46,7 +48,7 @@ export class EditVendorService {
} as IVendorEventEditingPayload);
// Edits the vendor contact.
const vendor = await this.vendorModel
const vendor = await this.vendorModel()
.query()
.updateAndFetchById(vendorId, {
...vendorObj,

View File

@@ -2,12 +2,14 @@ import { Inject, Injectable } from '@nestjs/common';
import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectable.service';
import { Vendor } from '../models/Vendor';
import { VendorTransfromer } from './VendorTransformer';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class GetVendorService {
constructor(
private readonly transformer: TransformerInjectable,
@Inject(Vendor.name) private readonly vendorModel: typeof Vendor,
@Inject(Vendor.name)
private readonly vendorModel: TenantModelProxy<typeof Vendor>,
) {}
/**
@@ -15,7 +17,7 @@ export class GetVendorService {
* @param {number} vendorId
*/
public async getVendor(vendorId: number) {
const vendor = await this.vendorModel
const vendor = await this.vendorModel()
.query()
.findById(vendorId)
.throwIfNotFound();

View File

@@ -5,6 +5,7 @@ import { DynamicListService } from '@/modules/DynamicListing/DynamicList.service
import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectable.service';
import { VendorTransfromer } from './VendorTransformer';
import { GetVendorsResponse, IVendorsFilter } from '../types/Vendors.types';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
@Injectable()
export class GetVendorsService {
@@ -18,7 +19,7 @@ export class GetVendorsService {
private dynamicListService: DynamicListService,
private transformer: TransformerInjectable,
@Inject(Vendor.name) private vendorModel: typeof Vendor,
@Inject(Vendor.name) private vendorModel: TenantModelProxy<typeof Vendor>,
) {}
/**
@@ -34,11 +35,11 @@ export class GetVendorsService {
// Dynamic list service.
const dynamicList = await this.dynamicListService.dynamicList(
this.vendorModel,
this.vendorModel(),
filter,
);
// Vendors list.
const { results, pagination } = await this.vendorModel
const { results, pagination } = await this.vendorModel()
.query()
.onBuild((builder) => {
dynamicList.buildQuery()(builder);