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 { ExpensesApplication } from './ExpensesApplication.service';
import {
@@ -13,6 +14,7 @@ import {
IExpenseEditDTO,
} from './interfaces/Expenses.interface';
import { PublicRoute } from '../Auth/Jwt.guard';
import { IExpensesFilter } from './Expenses.types';
@Controller('expenses')
@PublicRoute()
@@ -59,6 +61,14 @@ export class ExpensesController {
return this.expensesApplication.publishExpense(expenseId);
}
/**
* Get the expense transaction details.
*/
@Get('')
public getExpenses(@Query() filterDTO: IExpensesFilter) {
return this.expensesApplication.getExpenses(filterDTO);
}
/**
* Get the expense transaction details.
* @param {number} expenseId

View File

@@ -15,6 +15,7 @@ import { ExpenseGLEntriesStorageService } from './subscribers/ExpenseGLEntriesSt
import { ExpenseGLEntriesService } from './subscribers/ExpenseGLEntries.service';
import { LedgerModule } from '../Ledger/Ledger.module';
import { BranchesModule } from '../Branches/Branches.module';
import { GetExpensesService } from './queries/GetExpenses.service';
@Module({
imports: [LedgerModule, BranchesModule],
@@ -35,7 +36,9 @@ import { BranchesModule } from '../Branches/Branches.module';
TransformerInjectable,
ExpensesWriteGLSubscriber,
ExpenseGLEntriesStorageService,
ExpenseGLEntriesService
ExpenseGLEntriesService,
GetExpensesService,
],
})
export class ExpensesModule {}

View File

@@ -7,7 +7,9 @@ import { GetExpenseService } from './queries/GetExpense.service';
import {
IExpenseCreateDTO,
IExpenseEditDTO,
IExpensesFilter,
} from './interfaces/Expenses.interface';
import { GetExpensesService } from './queries/GetExpenses.service';
@Injectable()
export class ExpensesApplication {
@@ -17,7 +19,7 @@ export class ExpensesApplication {
private readonly deleteExpenseService: DeleteExpense,
private readonly publishExpenseService: PublishExpense,
private readonly getExpenseService: GetExpenseService,
// private readonly getExpensesService: GetExpenseService,
private readonly getExpensesService: GetExpensesService,
) {}
/**
@@ -66,12 +68,11 @@ export class ExpensesApplication {
return this.getExpenseService.getExpense(expenseId);
};
// /**
// * Retrieve expenses paginated list.
// * @param {number} tenantId
// * @param {IExpensesFilter} expensesFilter
// */
// public getExpenses = (tenantId: number, filterDTO: IExpensesFilter) => {
// return this.getExpensesService.getExpensesList(tenantId, filterDTO);
// };
/**
* Retrieve expenses paginated list.
* @param {IExpensesFilter} expensesFilter
*/
public getExpenses = (filterDTO: IExpensesFilter) => {
return this.getExpensesService.getExpensesList(filterDTO);
};
}

View File

@@ -1,81 +1,70 @@
// import { Service, Inject } from 'typedi';
// import * as R from 'ramda';
// import {
// IExpensesFilter,
// IExpense,
// IPaginationMeta,
// IFilterMeta,
// } from '@/interfaces';
// import DynamicListingService from '@/services/DynamicListing/DynamicListService';
// import HasTenancyService from '@/services/Tenancy/TenancyService';
// import { ExpenseTransfromer } from './Expense.transformer';
// import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
import * as R from 'ramda';
import { ExpenseTransfromer } from './Expense.transformer';
import { DynamicListService } from '@/modules/DynamicListing/DynamicList.service';
import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectable.service';
import { Inject, Injectable } from '@nestjs/common';
import { IExpensesFilter, IPaginationMeta } from '../Expenses.types';
import { Expense } from '../models/Expense.model';
import { IFilterMeta } from '@/interfaces/Model';
// @Service()
// export class GetExpenses {
// @Inject()
// private dynamicListService: DynamicListingService;
@Injectable()
export class GetExpensesService {
constructor(
private readonly transformer: TransformerInjectable,
private readonly dynamicListService: DynamicListService,
// @Inject()
// private tenancy: HasTenancyService;
@Inject(Expense.name)
private readonly expense: typeof Expense,
) {}
// @Inject()
// private transformer: TransformerInjectable;
/**
* Retrieve expenses paginated list.
* @param {IExpensesFilter} expensesFilter
* @return {IExpense[]}
*/
public async getExpensesList(
filterDTO: IExpensesFilter
): Promise<{
expenses: Expense[];
pagination: IPaginationMeta;
filterMeta: IFilterMeta;
}> {
// Parses list filter DTO.
const filter = this.parseListFilterDTO(filterDTO);
// /**
// * Retrieve expenses paginated list.
// * @param {number} tenantId
// * @param {IExpensesFilter} expensesFilter
// * @return {IExpense[]}
// */
// public getExpensesList = async (
// tenantId: number,
// filterDTO: IExpensesFilter
// ): Promise<{
// expenses: IExpense[];
// pagination: IPaginationMeta;
// filterMeta: IFilterMeta;
// }> => {
// const { Expense } = this.tenancy.models(tenantId);
// Dynamic list service.
const dynamicList = await this.dynamicListService.dynamicList(
this.expense,
filter
);
// Retrieves the paginated results.
const { results, pagination } = await this.expense.query()
.onBuild((builder) => {
builder.withGraphFetched('paymentAccount');
builder.withGraphFetched('categories.expenseAccount');
// // Parses list filter DTO.
// const filter = this.parseListFilterDTO(filterDTO);
dynamicList.buildQuery()(builder);
filterDTO?.filterQuery && filterDTO?.filterQuery(builder);
})
.pagination(filter.page - 1, filter.pageSize);
// // Dynamic list service.
// const dynamicList = await this.dynamicListService.dynamicList(
// tenantId,
// Expense,
// filter
// );
// // Retrieves the paginated results.
// const { results, pagination } = await Expense.query()
// .onBuild((builder) => {
// builder.withGraphFetched('paymentAccount');
// builder.withGraphFetched('categories.expenseAccount');
// Transformes the expenses models to POJO.
const expenses = await this.transformer.transform(
results,
new ExpenseTransfromer()
);
return {
expenses,
pagination,
filterMeta: dynamicList.getResponseMeta(),
};
};
// dynamicList.buildQuery()(builder);
// filterDTO?.filterQuery && filterDTO?.filterQuery(builder);
// })
// .pagination(filter.page - 1, filter.pageSize);
// // Transformes the expenses models to POJO.
// const expenses = await this.transformer.transform(
// tenantId,
// results,
// new ExpenseTransfromer()
// );
// return {
// expenses,
// pagination,
// filterMeta: dynamicList.getResponseMeta(),
// };
// };
// /**
// * Parses filter DTO of expenses list.
// * @param filterDTO -
// */
// private parseListFilterDTO(filterDTO) {
// return R.compose(this.dynamicListService.parseStringifiedFilter)(filterDTO);
// }
// }
/**
* Parses filter DTO of expenses list.
* @param filterDTO -
*/
private parseListFilterDTO(filterDTO) {
return R.compose(this.dynamicListService.parseStringifiedFilter)(filterDTO);
}
}