Форматирование ссылок на задачу перемещно в сервис

This commit is contained in:
Pavel Gnedov 2022-10-03 17:41:04 +07:00
parent 4b2a070851
commit 7bc70db364
3 changed files with 28 additions and 6 deletions

View file

@ -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 {

View file

@ -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,
); );

View 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>`;
}
}