Добавлены функции для работы с issue
This commit is contained in:
parent
6078507240
commit
d8b2851366
4 changed files with 48 additions and 7 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -35,3 +35,4 @@ lerna-debug.log*
|
|||
!.vscode/extensions.json
|
||||
configs/main-config.jsonc
|
||||
configs/issue-event-emitter-config.jsonc
|
||||
tmp/*
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ import { RedmineUserCacheWriterService } from './user-cache-writer/user-cache-wr
|
|||
import { UsersController } from './users/users.controller';
|
||||
import { RedmineTypes } from './models/redmine-types';
|
||||
import { UsersService } from './users/users.service';
|
||||
import { IssuesService } from './issues/issues.service';
|
||||
import { IssuesController } from './issues/issues.controller';
|
||||
|
||||
@Module({})
|
||||
export class EventEmitterModule implements OnModuleInit {
|
||||
|
|
@ -38,6 +40,7 @@ export class EventEmitterModule implements OnModuleInit {
|
|||
Issues,
|
||||
RedmineUserCacheWriterService,
|
||||
UsersService,
|
||||
IssuesService,
|
||||
],
|
||||
exports: [
|
||||
EventEmitterService,
|
||||
|
|
@ -49,8 +52,9 @@ export class EventEmitterModule implements OnModuleInit {
|
|||
Issues,
|
||||
RedmineUserCacheWriterService,
|
||||
UsersService,
|
||||
IssuesService,
|
||||
],
|
||||
controllers: [MainController, UsersController],
|
||||
controllers: [MainController, UsersController, IssuesController],
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,22 @@
|
|||
import { Controller } from '@nestjs/common';
|
||||
import { Controller, Get, Param } from '@nestjs/common';
|
||||
import { RedmineTypes } from '../models/redmine-types';
|
||||
import { IssuesService } from './issues.service';
|
||||
|
||||
@Controller('issues')
|
||||
export class IssuesController {}
|
||||
export class IssuesController {
|
||||
constructor(private issuesService: IssuesService) {}
|
||||
|
||||
@Get(':id')
|
||||
async getIssue(@Param('id') id: number): Promise<RedmineTypes.Issue> {
|
||||
return await this.issuesService.getIssue(id);
|
||||
}
|
||||
|
||||
@Get(':id/json')
|
||||
async getIssueLikeRedmine(
|
||||
@Param('id') id: number,
|
||||
): Promise<{ issue: RedmineTypes.Issue }> {
|
||||
return {
|
||||
issue: await this.issuesService.getIssue(id),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { RedmineTypes } from '../models/redmine-types';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { Issues } from '../couchdb-datasources/issues';
|
||||
import { RedmineEventsGateway } from '../events/redmine-events.gateway';
|
||||
import { RedmineIssuesCacheWriterService } from '../issue-cache-writer/redmine-issues-cache-writer.service';
|
||||
|
|
@ -11,6 +11,8 @@ const ISSUE_MEMORY_CACHE_AUTOCLEAN_INTERVAL = 1000 * 60 * 5;
|
|||
|
||||
@Injectable()
|
||||
export class IssuesService {
|
||||
private logger = new Logger(IssuesService.name);
|
||||
|
||||
private memoryCache = new MemoryCache<number, RedmineTypes.Issue>(
|
||||
ISSUE_MEMORY_CACHE_LIFETIME,
|
||||
ISSUE_MEMORY_CACHE_AUTOCLEAN_INTERVAL,
|
||||
|
|
@ -56,19 +58,35 @@ export class IssuesService {
|
|||
}
|
||||
|
||||
getIssueFromMemoryCache(issueId: number): RedmineTypes.Issue | null {
|
||||
return this.memoryCache.get(issueId);
|
||||
const issue = this.memoryCache.get(issueId);
|
||||
if (issue) {
|
||||
this.logger.debug(
|
||||
`Get issue from memory cache: id = ${issueId}, subject = ${issue.subject}`,
|
||||
);
|
||||
}
|
||||
return issue;
|
||||
}
|
||||
|
||||
async getIssueFromRedmine(
|
||||
issueId: number,
|
||||
): Promise<RedmineTypes.Issue | null> {
|
||||
return await this.redmineDataLoader.loadIssue(issueId);
|
||||
const issue = await this.redmineDataLoader.loadIssue(issueId);
|
||||
if (issue) {
|
||||
this.logger.debug(
|
||||
`Get issue from redmine: id = ${issueId}, subject = ${issue.subject}`,
|
||||
);
|
||||
}
|
||||
return issue;
|
||||
}
|
||||
|
||||
async getIssueFromCache(issueId: number): Promise<RedmineTypes.Issue | null> {
|
||||
const issueDb = await this.issues.getDatasource();
|
||||
try {
|
||||
return (await issueDb.get(String(issueId))) as any;
|
||||
const issue = (await issueDb.get(String(issueId))) as any;
|
||||
this.logger.debug(
|
||||
`Get issue from couchdb: id = ${issueId}, subject = ${issue.subject}`,
|
||||
);
|
||||
return issue;
|
||||
} catch (ex) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue