From d858c7e228863b2e0a6471f0f62909590a28c3fd Mon Sep 17 00:00:00 2001 From: Pavel Gnedov Date: Tue, 19 Jul 2022 11:38:52 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D0=BB=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20timest?= =?UTF-8?q?amp=20=D0=B4=D0=BB=D1=8F=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D1=85=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20=D1=81=20?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../issue-enhancer-interface.ts | 5 +++ .../issue-enhancers/timestamps-enhancer.ts | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 libs/event-emitter/src/issue-enhancers/issue-enhancer-interface.ts create mode 100644 libs/event-emitter/src/issue-enhancers/timestamps-enhancer.ts diff --git a/libs/event-emitter/src/issue-enhancers/issue-enhancer-interface.ts b/libs/event-emitter/src/issue-enhancers/issue-enhancer-interface.ts new file mode 100644 index 0000000..3a55dfd --- /dev/null +++ b/libs/event-emitter/src/issue-enhancers/issue-enhancer-interface.ts @@ -0,0 +1,5 @@ +import { RedmineTypes } from '../models/redmine-types'; + +export interface IssueEnhancerInterface { + enhance(issue: RedmineTypes.Issue): RedmineTypes.Issue & Record; +} diff --git a/libs/event-emitter/src/issue-enhancers/timestamps-enhancer.ts b/libs/event-emitter/src/issue-enhancers/timestamps-enhancer.ts new file mode 100644 index 0000000..602fbe7 --- /dev/null +++ b/libs/event-emitter/src/issue-enhancers/timestamps-enhancer.ts @@ -0,0 +1,36 @@ +import { RedmineTypes } from '../models/redmine-types'; +import { IssueEnhancerInterface } from './issue-enhancer-interface'; + +export class TimestampEnhancer implements IssueEnhancerInterface { + enhance(issue: RedmineTypes.Issue): RedmineTypes.Issue & Record { + return this.createTimestamp(this.enhanceJournal(issue), [ + 'closed_on', + 'created_on', + 'updated_on', + ]) as RedmineTypes.Issue & Record; + } + + private enhanceJournal(issue: Record): Record { + if (!issue.journals || issue.journals.length === 0) { + return issue; + } + const journals = issue.journals; + for (let i = 0; i < journals.length; i++) { + journals[i] = this.createTimestamp(journals[i], ['created_on']); + } + return issue; + } + + private createTimestamp( + issue: Record, + fieldNames: string[], + ): Record { + for (let i = 0; i < fieldNames.length; i++) { + const fieldName = fieldNames[i]; + if (issue[fieldName]) { + issue[`${fieldName}_timestamp`] = new Date(issue[fieldName]).getTime(); + } + } + return issue; + } +}