refactor: dynamic list to nestjs

This commit is contained in:
Ahmed Bouhuolia
2025-01-12 18:22:48 +02:00
parent ddaea20d16
commit 270b421a6c
117 changed files with 4232 additions and 1493 deletions

View File

@@ -6,6 +6,7 @@ import {
Param,
Post,
Put,
Query,
} from '@nestjs/common';
import { VendorsApplication } from './VendorsApplication.service';
import {
@@ -20,6 +21,11 @@ import { PublicRoute } from '../Auth/Jwt.guard';
export class VendorsController {
constructor(private vendorsApplication: VendorsApplication) {}
@Get()
getVendors(@Query() filterDTO: IVendorsFilter) {
return this.vendorsApplication.getVendors(filterDTO);
}
@Get(':id')
getVendor(@Param('id') vendorId: number) {
return this.vendorsApplication.getVendor(vendorId);

View File

@@ -10,6 +10,7 @@ import {
IVendorNewDTO,
IVendorOpeningBalanceEditDTO,
} from './types/Vendors.types';
import { GetVendorsService } from './queries/GetVendors.service';
@Injectable()
export class VendorsApplication {
@@ -19,7 +20,7 @@ export class VendorsApplication {
private deleteVendorService: DeleteVendorService,
private editOpeningBalanceService: EditOpeningBalanceVendorService,
private getVendorService: GetVendorService,
// private getVendorsService: GetVendors,
private getVendorsService: GetVendorsService,
) {}
/**
@@ -77,11 +78,10 @@ export class VendorsApplication {
/**
* Retrieves the vendors paginated list.
* @param {number} tenantId
* @param {IVendorsFilter} filterDTO
* @returns
* @returns {Promise<{vendors: Vendor[], pagination: IPaginationMeta, filterMeta: IFilterMeta}>>}
*/
// public getVendors = (tenantId: number, filterDTO: IVendorsFilter) => {
// return this.getVendorsService.getVendorsList(tenantId, filterDTO);
// };
public getVendors = (filterDTO: IVendorsFilter) => {
return this.getVendorsService.getVendorsList(filterDTO);
};
}

View File

@@ -0,0 +1,66 @@
import * as R from 'ramda';
import { Vendor } from '../models/Vendor';
import { DynamicListService } from '@/modules/DynamicListing/DynamicList.service';
import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectable.service';
import { Inject, Injectable } from '@nestjs/common';
import { IFilterMeta, IPaginationMeta } from '@/interfaces/Model';
import { VendorTransfromer } from './VendorTransformer';
@Injectable()
export class GetVendorsService {
constructor(
private dynamicListService: DynamicListService,
private transformer: TransformerInjectable,
@Inject(Vendor.name) private vendorModel: typeof Vendor,
) {}
/**
* Retrieve vendors datatable list.
* @param {IVendorsFilter} vendorsFilter - Vendors filter.
*/
public async getVendorsList(filterDTO: IVendorsFilter): Promise<{
vendors: Vendor[];
pagination: IPaginationMeta;
filterMeta: IFilterMeta;
}> {
// Parses vendors list filter DTO.
const filter = this.parseVendorsListFilterDTO(filterDTO);
// Dynamic list service.
const dynamicList = await this.dynamicListService.dynamicList(
this.vendorModel,
filter,
);
// Vendors list.
const { results, pagination } = await this.vendorModel
.query()
.onBuild((builder) => {
dynamicList.buildQuery()(builder);
// Switches between active/inactive modes.
builder.modify('inactiveMode', filter.inactiveMode);
})
.pagination(filter.page - 1, filter.pageSize);
// Transform the vendors.
const transformedVendors = await this.transformer.transform(
results,
new VendorTransfromer(),
);
return {
vendors: transformedVendors,
pagination,
filterMeta: dynamicList.getResponseMeta(),
};
}
/**
*
* @param filterDTO
* @returns
*/
private parseVendorsListFilterDTO(filterDTO) {
return R.compose(this.dynamicListService.parseStringifiedFilter)(filterDTO);
}
}

View File

@@ -1,80 +0,0 @@
// import * as R from 'ramda';
// import { Service, Inject } from 'typedi';
// import {
// IFilterMeta,
// IPaginationMeta,
// IVendor,
// IVendorsFilter,
// } from '@/interfaces';
// import HasTenancyService from '@/services/Tenancy/TenancyService';
// import DynamicListingService from '@/services/DynamicListing/DynamicListService';
// import VendorTransfromer from '../VendorTransformer';
// import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
// @Service()
// export class GetVendors {
// @Inject()
// private tenancy: HasTenancyService;
// @Inject()
// private dynamicListService: DynamicListingService;
// @Inject()
// private transformer: TransformerInjectable;
// /**
// * Retrieve vendors datatable list.
// * @param {number} tenantId - Tenant id.
// * @param {IVendorsFilter} vendorsFilter - Vendors filter.
// */
// public async getVendorsList(
// tenantId: number,
// filterDTO: IVendorsFilter
// ): Promise<{
// vendors: IVendor[];
// pagination: IPaginationMeta;
// filterMeta: IFilterMeta;
// }> {
// const { Vendor } = this.tenancy.models(tenantId);
// // Parses vendors list filter DTO.
// const filter = this.parseVendorsListFilterDTO(filterDTO);
// // Dynamic list service.
// const dynamicList = await this.dynamicListService.dynamicList(
// tenantId,
// Vendor,
// filter
// );
// // Vendors list.
// const { results, pagination } = await Vendor.query()
// .onBuild((builder) => {
// dynamicList.buildQuery()(builder);
// // Switches between active/inactive modes.
// builder.modify('inactiveMode', filter.inactiveMode);
// })
// .pagination(filter.page - 1, filter.pageSize);
// // Transform the vendors.
// const transformedVendors = await this.transformer.transform(
// tenantId,
// results,
// new VendorTransfromer()
// );
// return {
// vendors: transformedVendors,
// pagination,
// filterMeta: dynamicList.getResponseMeta(),
// };
// }
// /**
// *
// * @param filterDTO
// * @returns
// */
// private parseVendorsListFilterDTO(filterDTO) {
// return R.compose(this.dynamicListService.parseStringifiedFilter)(filterDTO);
// }
// }