Добавлены функции для работы с 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
|
!.vscode/extensions.json
|
||||||
configs/main-config.jsonc
|
configs/main-config.jsonc
|
||||||
configs/issue-event-emitter-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 { UsersController } from './users/users.controller';
|
||||||
import { RedmineTypes } from './models/redmine-types';
|
import { RedmineTypes } from './models/redmine-types';
|
||||||
import { UsersService } from './users/users.service';
|
import { UsersService } from './users/users.service';
|
||||||
|
import { IssuesService } from './issues/issues.service';
|
||||||
|
import { IssuesController } from './issues/issues.controller';
|
||||||
|
|
||||||
@Module({})
|
@Module({})
|
||||||
export class EventEmitterModule implements OnModuleInit {
|
export class EventEmitterModule implements OnModuleInit {
|
||||||
|
|
@ -38,6 +40,7 @@ export class EventEmitterModule implements OnModuleInit {
|
||||||
Issues,
|
Issues,
|
||||||
RedmineUserCacheWriterService,
|
RedmineUserCacheWriterService,
|
||||||
UsersService,
|
UsersService,
|
||||||
|
IssuesService,
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
EventEmitterService,
|
EventEmitterService,
|
||||||
|
|
@ -49,8 +52,9 @@ export class EventEmitterModule implements OnModuleInit {
|
||||||
Issues,
|
Issues,
|
||||||
RedmineUserCacheWriterService,
|
RedmineUserCacheWriterService,
|
||||||
UsersService,
|
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')
|
@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 { RedmineTypes } from '../models/redmine-types';
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable, Logger } from '@nestjs/common';
|
||||||
import { Issues } from '../couchdb-datasources/issues';
|
import { Issues } from '../couchdb-datasources/issues';
|
||||||
import { RedmineEventsGateway } from '../events/redmine-events.gateway';
|
import { RedmineEventsGateway } from '../events/redmine-events.gateway';
|
||||||
import { RedmineIssuesCacheWriterService } from '../issue-cache-writer/redmine-issues-cache-writer.service';
|
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()
|
@Injectable()
|
||||||
export class IssuesService {
|
export class IssuesService {
|
||||||
|
private logger = new Logger(IssuesService.name);
|
||||||
|
|
||||||
private memoryCache = new MemoryCache<number, RedmineTypes.Issue>(
|
private memoryCache = new MemoryCache<number, RedmineTypes.Issue>(
|
||||||
ISSUE_MEMORY_CACHE_LIFETIME,
|
ISSUE_MEMORY_CACHE_LIFETIME,
|
||||||
ISSUE_MEMORY_CACHE_AUTOCLEAN_INTERVAL,
|
ISSUE_MEMORY_CACHE_AUTOCLEAN_INTERVAL,
|
||||||
|
|
@ -56,19 +58,35 @@ export class IssuesService {
|
||||||
}
|
}
|
||||||
|
|
||||||
getIssueFromMemoryCache(issueId: number): RedmineTypes.Issue | null {
|
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(
|
async getIssueFromRedmine(
|
||||||
issueId: number,
|
issueId: number,
|
||||||
): Promise<RedmineTypes.Issue | null> {
|
): 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> {
|
async getIssueFromCache(issueId: number): Promise<RedmineTypes.Issue | null> {
|
||||||
const issueDb = await this.issues.getDatasource();
|
const issueDb = await this.issues.getDatasource();
|
||||||
try {
|
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) {
|
} catch (ex) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue