UNPKG

oa-jira

Version:

Octet Agile's JIRA connectivity project.

62 lines (50 loc) 1.97 kB
const commons = require('../../commons'); const IssueSnapshot = require('./issue.snapshot.class'); const getSprintsFromSnapshot = (snapshot, sprints = {}) => { if (!snapshot) return Promise.resolve(Object.values(sprints)); const sprint = snapshot.getData().getSprint(); if (sprint) sprints[sprint.getId()] = sprint; return getSprintsFromSnapshot(snapshot.getPrevious(), sprints); }; class IssueSnapshots { #first; #snapshots; #last; constructor({ snapshotsData } = {}) { this.#first; this.#last; this.#snapshots = {}; if (snapshotsData) { for (const snapshotData of Object.values(snapshotsData)) { this.#first = commons.date.min(this.#first, snapshotData.time); this.#last = commons.date.max(this.#last, snapshotData.time); const snapshot = new IssueSnapshot(this, snapshotData); this.#snapshots[snapshot.getTime().toISOString()] = snapshot; } } } get = time => this.#snapshots[time]; getFirst = () => (this.#first ? this.get(this.#first.toISOString()) : null); getLast = () => (this.#last ? this.get(this.#last.toISOString()) : null); getSprints = () => getSprintsFromSnapshot(this.getLast()); static check(snapshots) { return commons.object.check(snapshots, { name: 'snapshots', className: 'Snapshots', _class: IssueSnapshots }); } static create({ snapshotsData } = {}) { try { return Promise.resolve(new IssueSnapshots({ snapshotsData })); } catch (error) { return Promise.reject(error); } } toJSON = () => { const json = { snapshots: {} }; if (this.#first) json.first = this.#first.toISOString(); if (this.#last) json.last = this.#last.toISOString(); for (const snapshot of Object.values(this.#snapshots)) { json.snapshots[snapshot.getTime().toISOString()] = snapshot.toJSON(); } return json; }; } module.exports = IssueSnapshots;