diff --git a/src/modules/reports/report/report.module.ts b/src/modules/reports/report/report.module.ts index 805a2d1..48b0de8 100644 --- a/src/modules/reports/report/report.module.ts +++ b/src/modules/reports/report/report.module.ts @@ -4,11 +4,12 @@ import { ReportService } from './report.service'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ExportReportHistoryModel } from '../shared/models/export-report-history.model'; import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants'; +import { ReportBookmarkModel } from '../shared/models/report-bookmark.model'; @Module({ imports: [ TypeOrmModule.forFeature( - [ExportReportHistoryModel], + [ExportReportHistoryModel, ReportBookmarkModel], CONNECTION_NAME.DEFAULT, ), ], diff --git a/src/modules/reports/report/report.service.ts b/src/modules/reports/report/report.service.ts index 4fa06b7..3613ca1 100644 --- a/src/modules/reports/report/report.service.ts +++ b/src/modules/reports/report/report.service.ts @@ -3,13 +3,14 @@ import { BaseReportService } from '../shared/services/base-report.service'; import { GetReportConfigDto } from '../shared/dto/report-config.get.dto'; import { GetReportDataDto } from '../shared/dto/report-data.get.dto'; import { ReportConfigs } from '../shared/configs'; -import { InjectDataSource } from '@nestjs/typeorm'; +import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants'; -import { DataSource } from 'typeorm'; +import { DataSource, Repository } from 'typeorm'; import { ReportConfigEntity } from '../shared/entities/report-config.entity'; import { ReportQueryBuilder } from '../shared/helpers'; -import { DATA_FORMAT } from '../shared/constant'; +import { DATA_FORMAT, REPORT_BOOKMARK_TYPE } from '../shared/constant'; import { roundingCurrency } from '../shared/helpers'; +import { ReportBookmarkModel } from '../shared/models/report-bookmark.model'; @Injectable({ scope: Scope.REQUEST }) export class ReportService extends BaseReportService { @@ -18,6 +19,9 @@ export class ReportService extends BaseReportService { constructor( @InjectDataSource(CONNECTION_NAME.DEFAULT) private dataSource: DataSource, + + @InjectRepository(ReportBookmarkModel, CONNECTION_NAME.DEFAULT) + private bookmarkRepo: Repository, ) { super(); } @@ -35,8 +39,47 @@ export class ReportService extends BaseReportService { unique_names.includes(item.unique_name), ); } + const groups = Array.from(new Set(configs?.map((item) => item.group_name))); + const names = Array.from(new Set(configs?.map((item) => item.unique_name))); - return configs; + const modelName = ReportBookmarkModel.name; + const creator_id = this.getUser().id; + + const bookmarkConfigs = await this.bookmarkRepo + .createQueryBuilder(modelName) + .where((query) => { + if (names.length > 0) { + query.andWhere(`group_name IN (:...groups)`, { groups }); + } + if (groups.length > 0) { + query.andWhere(`unique_name IN (:...names)`, { names }); + } + + query.andWhere(`creator_id = :creator_id`, { creator_id }); + query.andWhere(`applied = :applied`, { applied: true }); + }) + .getMany(); + + return configs.map((item) => { + const active_filter = bookmarkConfigs.find( + (conf) => + conf.group_name === item.group_name && + conf.unique_name === item.unique_name && + conf.type === REPORT_BOOKMARK_TYPE.FILTER_TABLE, + ); + + const active_table_config = bookmarkConfigs.find( + (conf) => + conf.group_name === item.group_name && + conf.unique_name === item.unique_name && + conf.type === REPORT_BOOKMARK_TYPE.TABLE_CONFIG, + ); + return { + ...item, + active_filter: active_filter ?? {}, + active_table_config: active_table_config ?? {}, + }; + }); } getReportConfigByUniqueName(group_name, unique_name): ReportConfigEntity {