Форматирование ссылок на задачу перемещно в сервис
This commit is contained in:
parent
4b2a070851
commit
7bc70db364
3 changed files with 28 additions and 6 deletions
|
|
@ -22,6 +22,7 @@ import { TelegramBotService } from './telegram-bot/telegram-bot.service';
|
||||||
import { UserMetaInfoService } from './user-meta-info/user-meta-info.service';
|
import { UserMetaInfoService } from './user-meta-info/user-meta-info.service';
|
||||||
import { UserMetaInfo } from './couchdb-datasources/user-meta-info';
|
import { UserMetaInfo } from './couchdb-datasources/user-meta-info';
|
||||||
import { PersonalNotificationAdapterService } from './notifications/adapters/personal-notification.adapter/personal-notification.adapter.service';
|
import { PersonalNotificationAdapterService } from './notifications/adapters/personal-notification.adapter/personal-notification.adapter.service';
|
||||||
|
import { PublicUrlAdapterService } from './notifications/adapters/public-url.adapter.service';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
|
|
@ -47,6 +48,7 @@ import { PersonalNotificationAdapterService } from './notifications/adapters/per
|
||||||
UserMetaInfoService,
|
UserMetaInfoService,
|
||||||
UserMetaInfo,
|
UserMetaInfo,
|
||||||
PersonalNotificationAdapterService,
|
PersonalNotificationAdapterService,
|
||||||
|
PublicUrlAdapterService,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class AppModule implements OnModuleInit {
|
export class AppModule implements OnModuleInit {
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,20 @@ import { ConfigService } from '@nestjs/config';
|
||||||
import { IssueAndPersonalParsedMessageModel } from 'src/models/issue-and-personal-parsed-message.model';
|
import { IssueAndPersonalParsedMessageModel } from 'src/models/issue-and-personal-parsed-message.model';
|
||||||
import { TelegramBotService } from 'src/telegram-bot/telegram-bot.service';
|
import { TelegramBotService } from 'src/telegram-bot/telegram-bot.service';
|
||||||
import Handlebars from 'handlebars';
|
import Handlebars from 'handlebars';
|
||||||
|
import { PublicUrlAdapterService } from '../public-url.adapter.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PersonalNotificationAdapterService {
|
export class PersonalNotificationAdapterService {
|
||||||
private personalMessageTemplate: HandlebarsTemplateDelegate;
|
private personalMessageTemplate: HandlebarsTemplateDelegate;
|
||||||
private redminePublicUrlPrefix: string;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private telegramBotService: TelegramBotService,
|
private telegramBotService: TelegramBotService,
|
||||||
private configService: ConfigService,
|
private configService: ConfigService,
|
||||||
private usersService: UsersService,
|
private usersService: UsersService,
|
||||||
|
private publicUrlAdapterService: PublicUrlAdapterService,
|
||||||
) {
|
) {
|
||||||
const template = this.configService.get<string>('personalMessageTemplate');
|
const template = this.configService.get<string>('personalMessageTemplate');
|
||||||
this.personalMessageTemplate = Handlebars.compile(template);
|
this.personalMessageTemplate = Handlebars.compile(template);
|
||||||
this.redminePublicUrlPrefix =
|
|
||||||
this.configService.get<string>('redmineUrlPublic');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async send(
|
async send(
|
||||||
|
|
@ -27,9 +26,9 @@ export class PersonalNotificationAdapterService {
|
||||||
const promises = issueAndMessages.personalParsedMessage.recipients.map(
|
const promises = issueAndMessages.personalParsedMessage.recipients.map(
|
||||||
async (recipient) => {
|
async (recipient) => {
|
||||||
const redmineId = recipient;
|
const redmineId = recipient;
|
||||||
const issueUrl = `${this.redminePublicUrlPrefix}/issues/${issueAndMessages.issue.id}`;
|
const issueUrlHtml = this.publicUrlAdapterService.getHtmlHref(
|
||||||
const issue = issueAndMessages.issue;
|
issueAndMessages.issue,
|
||||||
const issueUrlHtml = `<a href="${issueUrl}">${issue.tracker.name} #${issue.id}</a>`;
|
);
|
||||||
const sender = await this.usersService.getUser(
|
const sender = await this.usersService.getUser(
|
||||||
issueAndMessages.personalParsedMessage.sender,
|
issueAndMessages.personalParsedMessage.sender,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
21
src/notifications/adapters/public-url.adapter.service.ts
Normal file
21
src/notifications/adapters/public-url.adapter.service.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
import { RedmineTypes } from '@app/event-emitter/models/redmine-types';
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { ConfigService } from '@nestjs/config';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class PublicUrlAdapterService {
|
||||||
|
private publicUrl: string;
|
||||||
|
|
||||||
|
constructor(private configService: ConfigService) {
|
||||||
|
this.publicUrl = this.configService.get<string>('redmineUrlPublic');
|
||||||
|
}
|
||||||
|
|
||||||
|
getUrl(issueId: number): string {
|
||||||
|
return `${this.publicUrl}/issues/${issueId}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
getHtmlHref(issue: RedmineTypes.Issue): string {
|
||||||
|
const url = this.getUrl(issue.id);
|
||||||
|
return `<a href="${url}">${issue.tracker.name} #${issue.id}</a>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue