diff --git a/libs/event-emitter/src/dashboards/dashboards.controller.ts b/libs/event-emitter/src/dashboards/dashboards.controller.ts new file mode 100644 index 0000000..84a3e1a --- /dev/null +++ b/libs/event-emitter/src/dashboards/dashboards.controller.ts @@ -0,0 +1,18 @@ +import { Controller, Get } from '@nestjs/common'; +import { DashboardsService } from './dashboards.service'; +import { BadRequestErrorHandler, getOrAppErrorOrThrow } from '../utils/result'; +import { UNLIMITED } from '../consts/consts'; + +@Controller('api/dashboards') +export class DashboardsController { + constructor(private dashboardsService: DashboardsService) {} + + @Get() + async list(): Promise { + const res = await getOrAppErrorOrThrow( + () => this.dashboardsService.publicList(UNLIMITED), + BadRequestErrorHandler, + ); + return res; + } +} diff --git a/libs/event-emitter/src/dashboards/dashboards.service.ts b/libs/event-emitter/src/dashboards/dashboards.service.ts index 997587a..dade61b 100644 --- a/libs/event-emitter/src/dashboards/dashboards.service.ts +++ b/libs/event-emitter/src/dashboards/dashboards.service.ts @@ -71,4 +71,19 @@ export class DashboardsService { await ds.insert(newValue); return; } + + async publicList(limit: number): Promise<{ id: string; title: string }[]> { + const ds = await this.db.getDatasource(); + const data = await ds.find({ + selector: { + 'data.title': { + $exists: true, + }, + }, + fields: ['id', 'data.title'], + limit: limit, + }); + if (!data.docs) throw createAppError('DASHBOARDS_NOT_FOUND'); + return data.docs.map((d) => ({ id: d.id, title: d.data.title })); + } } diff --git a/libs/event-emitter/src/event-emitter.module.ts b/libs/event-emitter/src/event-emitter.module.ts index 0a6d2f5..5aef956 100644 --- a/libs/event-emitter/src/event-emitter.module.ts +++ b/libs/event-emitter/src/event-emitter.module.ts @@ -35,6 +35,7 @@ import { ListIssuesByUsersWidgetDataLoaderService } from './dashboards/widget-da import { ListIssuesByUsersLikeJiraWidgetDataLoaderService } from './dashboards/widget-data-loader/list-issues-by-users-like-jira.widget-data-loader.service'; import { ListIssuesByFieldsWidgetDataLoaderService } from './dashboards/widget-data-loader/list-issues-by-fields.widget-data-loader.service'; import { WidgetsCollectionService } from './dashboards/widgets-collection.service'; +import { DashboardsController } from './dashboards/dashboards.controller'; @Module({}) export class EventEmitterModule implements OnModuleInit { @@ -148,6 +149,7 @@ export class EventEmitterModule implements OnModuleInit { IssuesController, CalendarController, DashboardController, + DashboardsController, ], }; }