oa-jira
Version:
Octet Agile's JIRA connectivity project.
55 lines (44 loc) • 1.7 kB
JavaScript
const Change = require('../classes/change.class');
const Changes = require('../classes/changes.class');
class ChangesBuilder {
#rawData;
#changes;
constructor({ rawData, time }) {
this.#changes = {};
this.#rawData = rawData;
this.#rawData.updated = time;
}
isEmpty = () => Object.keys(this.#changes).length === 0;
append = ({ name, source }) => {
return Change.create({ name, source, target: this.#rawData[name] }).then(change => {
if (change) {
this.#changes[change.getName()] = change;
if (name !== 'updated') this.#rawData[name] = source;
}
return Promise.resolve(this);
});
};
removeVersion = ({ version }) => {
const source = [];
for (const targetVersion of this.#rawData['versions']) {
if (targetVersion.getId() !== version.getId()) source.push(targetVersion);
}
return Change.create({ name: 'versions', source, target: this.#rawData['versions'] }).then(change => {
this.#changes[change.getName()] = change;
this.#rawData['versions'] = source;
return Promise.resolve(this);
});
};
appendVersion = ({ version }) => {
const source = [...this.#rawData['versions']];
source.push(version);
return Change.create({ name: 'versions', source, target: this.#rawData['versions'] }).then(change => {
this.#changes[change.getName()] = change;
this.#rawData['versions'] = source;
return Promise.resolve(this);
});
};
buildChanges = () => Changes.create({ changes: Object.values(this.#changes) });
buildRawData = () => Promise.resolve(this.#rawData);
}
module.exports = ChangesBuilder;