UNPKG

oa-jira

Version:

Octet Agile's JIRA connectivity project.

67 lines (58 loc) 2.41 kB
const Changes = require('../classes/changes.class'); const IssueData = require('../classes/issue.data.class'); const IssueSnapshots = require('../classes/issue.snapshots.class'); const ChangesBuilder = require('./changes.builder'); class IssueSnapshotsBuilder { #issues; #currentIssueData; #currentRawData; #currentNext; constructor(issueData, rawData) { this.#issues = {}; this.#currentIssueData = issueData; this.#currentRawData = rawData; this.#currentNext = null; } static init(rawData) { return IssueData.create(rawData) .then(issueData => Promise.resolve(new IssueSnapshotsBuilder(issueData, rawData))) .catch(error => Promise.reject(error)); } initChangesBuilder = ({ time }) => new ChangesBuilder({ rawData: this.#currentRawData, time }); appendPrevious = ({ rawData, changes }) => { return Promise.all([IssueData.create(rawData), Changes.resolve(changes)]).then(([data, changes]) => { if (this.#currentNext) { this.#issues[this.#currentNext.toISOString()].previous = data.getUpdated(); } this.#issues[data.getUpdated().toISOString()] = { data: this.#currentIssueData, next: this.#currentNext, time: data.getUpdated(), changes }; this.#currentIssueData = data; this.#currentRawData = rawData; this.#currentNext = data.getUpdated(); return Promise.resolve(this); }); }; build = ({ created }) => { if (this.#currentNext) { this.#issues[this.#currentNext.toISOString()].previous = created; } const firstRawData = { ...this.#currentRawData }; const changesBuilder = new ChangesBuilder({ rawData: this.#currentRawData, time: created }); return Promise.all(Object.keys(this.#currentRawData).map(name => changesBuilder.append({ name }))) .then(_ => { return Promise.all([changesBuilder.buildChanges(), IssueData.create(firstRawData)]); }) .then(([changes, issueData]) => { this.#issues[created.toISOString()] = { data: issueData, next: this.#currentNext, time: created, changes }; this.#currentIssueData = null; this.#currentRawData = null; this.#currentNext = null; return IssueSnapshots.create({ snapshotsData: this.#issues }); }); }; } module.exports = IssueSnapshotsBuilder;