diff --git a/configs/interview-projects.jsonc b/configs/interview-projects.jsonc new file mode 100644 index 0000000..2b2925b --- /dev/null +++ b/configs/interview-projects.jsonc @@ -0,0 +1,6 @@ +{ + "interviewProjects": [ + "Программисты, инженеры HW" + ], + "customFieldDateFormat": "yyyy-MM-dd HH:mm" +} \ No newline at end of file diff --git a/configs/interview-projects.jsonc.dist b/configs/interview-projects.jsonc.dist new file mode 100644 index 0000000..9f49eb9 --- /dev/null +++ b/configs/interview-projects.jsonc.dist @@ -0,0 +1,4 @@ +{ + "interviewProjects": [], + "customFieldDateFormat": "yyyy-MM-dd HH:mm" +} \ No newline at end of file diff --git a/src/issue-enhancers/interview-enhancer.ts b/src/issue-enhancers/interview-enhancer.ts new file mode 100644 index 0000000..06e11c1 --- /dev/null +++ b/src/issue-enhancers/interview-enhancer.ts @@ -0,0 +1,59 @@ +import { IssueEnhancerInterface } from '@app/event-emitter/issue-enhancers/issue-enhancer-interface'; +import { RedmineTypes } from '@app/event-emitter/models/redmine-types'; +import { Injectable } from '@nestjs/common'; +import * as Luxon from 'luxon'; + +export type SubjectParserParam = { + regexp: string; + format: string; + type: string; +}; + +export type DescriptionParserParam = {}; + +@Injectable() +export class InterviewEnhancer implements IssueEnhancerInterface { + name = 'interview'; + + constructor( + public interviewProjects: string[] = [], + public customFieldDateFormat: string = 'yyyy-MM-dd HH:mm', + public subjectParserParams: SubjectParserParam[] + ) {} + + async enhance( + issue: RedmineTypes.Issue, + ): Promise> { + const res: RedmineTypes.ExtendedIssue = { ...issue }; + + if (this.interviewProjects.indexOf(res.project.name) < 0) { + return res; + } + + const subject = res.subject; + const nextEventDateField = res.custom_fields.find((cf) => { + return cf.name === 'Дата следующего обновления'; + }); + + if () + + const nextEventDate = Luxon.DateTime.fromFormat(nextEventDateField.value, this.customFieldDateFormat); + + return res; + } + + private getNextEventDate(issue: RedmineTypes.ExtendedIssue): Luxon.DateTime|null { + const nextEventDateField = issue.custom_fields.find((cf) => { + return cf.name === 'Дата следующего обновления'; + }); + if (!nextEventDateField) return null; + const nextEventDate = Luxon.DateTime.fromFormat(nextEventDateField.value, this.customFieldDateFormat); + if (!nextEventDate.isValid) return null; + return nextEventDate; + } + + private getDateFromSubject(issue: RedmineTypes.ExtendedIssue): Luxon.DateTime|null { + const subject = issue.subject; + return null; + } +}