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; + } +}