Добавлен data-loader для нового виджета на backend-е

This commit is contained in:
Pavel Gnedov 2025-02-07 19:11:46 +07:00
parent 20b70c5799
commit 77352a497b
4 changed files with 63 additions and 5 deletions

View file

@ -119,11 +119,19 @@ export class RedmineDataLoader {
skip_empty_lines: true, skip_empty_lines: true,
}; };
} }
const resp = await fetch(urlQuery, { let resp;
headers: { try {
'X-Redmine-API-Key': this.redmineToken, resp = await fetch(urlQuery, {
}, headers: {
}); 'X-Redmine-API-Key': this.redmineToken,
},
});
} catch (err) {
this.logger.error(
`Failed to fetch data from Redmine by url ${urlQuery}: ${err}`,
);
return null;
}
const rawData = await resp.text(); const rawData = await resp.text();
let res; let res;
try { try {

View file

@ -57,6 +57,7 @@ import { TelegramBotController } from './telegram-bot/telegram-bot.controller';
import { DailyEccmV2ReportTaskRunnerService } from './reports/daily-eccm-v2-report-task-runner.service'; import { DailyEccmV2ReportTaskRunnerService } from './reports/daily-eccm-v2-report-task-runner.service';
import { DashboardsService } from '@app/event-emitter/dashboards/dashboards.service'; import { DashboardsService } from '@app/event-emitter/dashboards/dashboards.service';
import { DailyEccmReportsV2Datasource } from './couchdb-datasources/daily-eccm-reports-v2.datasource'; import { DailyEccmReportsV2Datasource } from './couchdb-datasources/daily-eccm-reports-v2.datasource';
import { DailyEccmReportsV2DataLoaderService } from './eccm-statistic/dashboards/widget-data-loader/daily-eccm-v2.widget-data-loader.service';
@Module({ @Module({
imports: [ imports: [
@ -121,6 +122,7 @@ import { DailyEccmReportsV2Datasource } from './couchdb-datasources/daily-eccm-r
DashboardsService, DashboardsService,
DailyEccmReportsV2Datasource, DailyEccmReportsV2Datasource,
DailyEccmV2ReportTaskRunnerService, DailyEccmV2ReportTaskRunnerService,
DailyEccmReportsV2DataLoaderService,
], ],
}) })
export class AppModule implements OnModuleInit { export class AppModule implements OnModuleInit {

View file

@ -2,11 +2,14 @@ import { Injectable } from '@nestjs/common';
import { WidgetsCollectionService } from '@app/event-emitter/dashboards/widgets-collection.service'; import { WidgetsCollectionService } from '@app/event-emitter/dashboards/widgets-collection.service';
import { IssuesByTagsWidgetDataLoaderService } from './widget-data-loader/issues-by-tags.widget-data-loader.service'; import { IssuesByTagsWidgetDataLoaderService } from './widget-data-loader/issues-by-tags.widget-data-loader.service';
import { createInteractiveWidget } from '@app/event-emitter/dashboards/interactive-widget-factory'; import { createInteractiveWidget } from '@app/event-emitter/dashboards/interactive-widget-factory';
import { DailyEccmReportsV2DataLoaderService } from 'src/eccm-statistic/dashboards/widget-data-loader/daily-eccm-v2.widget-data-loader.service';
import { WIDGET_TYPE as DAILY_ECCM_V2_WIDGET_TYPE } from 'src/reports/daily-eccm-v2-report-task-runner.service';
@Injectable() @Injectable()
export class DashboardInitService { export class DashboardInitService {
constructor( constructor(
private issuesByTagsWidgetDataLoaderService: IssuesByTagsWidgetDataLoaderService, private issuesByTagsWidgetDataLoaderService: IssuesByTagsWidgetDataLoaderService,
private dailyEccmReportsV2DataLoaderService: DailyEccmReportsV2DataLoaderService,
private widgetsCollectionService: WidgetsCollectionService, private widgetsCollectionService: WidgetsCollectionService,
) {} ) {}
@ -20,6 +23,10 @@ export class DashboardInitService {
this.issuesByTagsWidgetDataLoaderService, this.issuesByTagsWidgetDataLoaderService,
'issues_list_by_tags', 'issues_list_by_tags',
), ),
createInteractiveWidget(
this.dailyEccmReportsV2DataLoaderService,
DAILY_ECCM_V2_WIDGET_TYPE,
),
]; ];
collection.forEach((w) => this.widgetsCollectionService.appendWidget(w)); collection.forEach((w) => this.widgetsCollectionService.appendWidget(w));
} }

View file

@ -0,0 +1,41 @@
import { WidgetDataLoaderInterface } from '@app/event-emitter/dashboards/widget-data-loader-interface';
import {
AppError,
createAppError,
fail,
Result,
success,
} from '@app/event-emitter/utils/result';
import { Injectable } from '@nestjs/common';
import { DailyEccmReportsV2Datasource } from 'src/couchdb-datasources/daily-eccm-reports-v2.datasource';
@Injectable()
export class DailyEccmReportsV2DataLoaderService
implements WidgetDataLoaderInterface<any, any, any>
{
isMyConfig(): boolean {
return true;
}
async load(
dataLoaderParams: any,
dashboardParams: any,
dashboardId: string,
widgetId: string,
): Promise<Result<any, AppError>> {
const ds = await DailyEccmReportsV2Datasource.getDatasource();
const response = await ds.find({
selector: {
dashboardId: dashboardId,
widgetId: widgetId,
latest: true,
},
limit: 1,
});
const data = response.docs[0];
if (!data) {
return fail(createAppError('No data found'));
}
return success(data);
}
}