130 lines
4.5 KiB
TypeScript
130 lines
4.5 KiB
TypeScript
import { DynamicLoader } from '@app/event-emitter/configs/dynamic-loader';
|
|
import { RedmineEventsGateway } from '@app/event-emitter/events/redmine-events.gateway';
|
|
import { ListIssuesByFieldsWidgetService } from '@app/event-emitter/project-dashboard/widgets/list-issues-by-fields.widget.service';
|
|
import { ListIssuesByUsersLikeJiraWidgetService } from '@app/event-emitter/project-dashboard/widgets/list-issues-by-users-like-jira.widget.service';
|
|
import { ListIssuesByUsersWidgetService } from '@app/event-emitter/project-dashboard/widgets/list-issues-by-users.widget.service';
|
|
import {
|
|
RootIssueSubTreesWidgetNs,
|
|
RootIssueSubTreesWidgetService,
|
|
} from '@app/event-emitter/project-dashboard/widgets/root-issue-subtrees.widget.service';
|
|
import { Controller, Get, Param, Render } from '@nestjs/common';
|
|
import { ConfigService } from '@nestjs/config';
|
|
import { parse } from 'jsonc-parser';
|
|
import { IssuesByTagsWidgetService } from './widgets/issues-by-tags.widget.service';
|
|
|
|
@Controller('simple-kanban-board')
|
|
export class SimpleKanbanBoardController {
|
|
private path: string;
|
|
|
|
constructor(
|
|
private rootIssueSubTreesWidgetService: RootIssueSubTreesWidgetService,
|
|
private dynamicLoader: DynamicLoader,
|
|
private configService: ConfigService,
|
|
private listIssuesByUsersWidgetService: ListIssuesByUsersWidgetService,
|
|
private listIssuesByUsersLikeJiraWidgetService: ListIssuesByUsersLikeJiraWidgetService,
|
|
private issuesByTagsWidgetService: IssuesByTagsWidgetService,
|
|
private redmineEventsGateway: RedmineEventsGateway,
|
|
private listIssuesByFieldsWidgetService: ListIssuesByFieldsWidgetService,
|
|
) {
|
|
this.path = this.configService.get<string>('simpleKanbanBoard.path');
|
|
}
|
|
|
|
@Get('/tree/:name/raw')
|
|
async getRawData(@Param('name') name: string): Promise<any> {
|
|
const cfg = this.dynamicLoader.load(name, {
|
|
path: this.path,
|
|
ext: 'jsonc',
|
|
parser: parse,
|
|
});
|
|
return await this.rootIssueSubTreesWidgetService.render(cfg);
|
|
}
|
|
|
|
@Get('/tree/:name')
|
|
@Render('simple-kanban-board')
|
|
async get(@Param('name') name: string): Promise<any> {
|
|
return await this.getRawData(name);
|
|
}
|
|
|
|
@Get('/tree/:name/refresh')
|
|
async refreshTree(@Param('name') name: string): Promise<any> {
|
|
const cfg = this.dynamicLoader.load(name, {
|
|
path: this.path,
|
|
ext: 'jsonc',
|
|
parser: parse,
|
|
});
|
|
const issues = [] as number[];
|
|
issues.push(cfg.rootIssueId);
|
|
if (cfg.groups) {
|
|
const groups = cfg.groups as RootIssueSubTreesWidgetNs.Models.GroupCfg;
|
|
groups.fromIssues.forEach((group) => {
|
|
issues.push(group.issueId);
|
|
});
|
|
}
|
|
this.redmineEventsGateway.addIssues(issues);
|
|
return { success: true };
|
|
}
|
|
|
|
@Get('/by-users/:name/raw')
|
|
async getByUsersRawData(@Param('name') name: string): Promise<any> {
|
|
const cfg = this.dynamicLoader.load(name, {
|
|
path: this.path,
|
|
ext: 'jsonc',
|
|
parser: parse,
|
|
});
|
|
return await this.listIssuesByUsersWidgetService.render(cfg);
|
|
}
|
|
|
|
@Get('/by-users/:name')
|
|
@Render('simple-kanban-board')
|
|
async getByUsers(@Param('name') name: string): Promise<any> {
|
|
return await this.getByUsersRawData(name);
|
|
}
|
|
|
|
@Get('/by-users-like-jira/:name/raw')
|
|
async getByUsersLikeJiraRawData(@Param('name') name: string): Promise<any> {
|
|
const cfg = this.dynamicLoader.load(name, {
|
|
path: this.path,
|
|
ext: 'jsonc',
|
|
parser: parse,
|
|
});
|
|
return await this.listIssuesByUsersLikeJiraWidgetService.render(cfg);
|
|
}
|
|
|
|
@Get('/by-users-like-jira/:name')
|
|
@Render('simple-kanban-board')
|
|
async getByUsersLikeJira(@Param('name') name: string): Promise<any> {
|
|
return await this.getByUsersLikeJiraRawData(name);
|
|
}
|
|
|
|
@Get('/by-tags/:name/raw')
|
|
async getByTagsRawData(@Param('name') name: string): Promise<any> {
|
|
const cfg = this.dynamicLoader.load(name, {
|
|
path: this.path,
|
|
ext: 'jsonc',
|
|
parser: parse,
|
|
});
|
|
return await this.issuesByTagsWidgetService.render(cfg);
|
|
}
|
|
|
|
@Get('/by-tags/:name')
|
|
@Render('simple-kanban-board')
|
|
async getByTags(@Param('name') name: string): Promise<any> {
|
|
return await this.getByTagsRawData(name);
|
|
}
|
|
|
|
@Get('/by-fields/:name/raw')
|
|
async getByFieldsRawData(@Param('name') name: string): Promise<any> {
|
|
const cfg = this.dynamicLoader.load(name, {
|
|
path: this.path,
|
|
ext: 'jsonc',
|
|
parser: parse,
|
|
});
|
|
return await this.listIssuesByFieldsWidgetService.render(cfg);
|
|
}
|
|
|
|
@Get('/by-fields/:name')
|
|
@Render('simple-kanban-board')
|
|
async getByFields(@Param('name') name: string): Promise<any> {
|
|
return await this.getByFieldsRawData(name);
|
|
}
|
|
}
|