import { Injectable } from '@nestjs/common'; import { RedmineTypes } from '../models/redmine-types'; import { IssueEnhancerInterface } from './issue-enhancer-interface'; @Injectable() export class TimestampEnhancer implements IssueEnhancerInterface { init() { return; } async enhance( issue: RedmineTypes.Issue, ): Promise> { 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; } }