oa-jira
Version:
Octet Agile's JIRA connectivity project.
50 lines (42 loc) • 1.98 kB
JavaScript
const jira = require('../../jira');
const fieldsHelper = require('../helpers/fields.helper');
const historiesHelper = require('../helpers/histories.helper');
const Issue = require('../classes/issue.class');
const SnapshotsBuilder = require('../builders/issue.snapshots.builder');
exports.create = ({ key, created, snapshots } = {}) => {
return Issue.create({ key, created, snapshots });
};
exports.resolve = issue => Issue.resolve(issue);
const parseIssue = (connection, data, cache) => {
if (!data) return Promise.resolve(null);
const created = new Date(data.fields.created);
const resolutiondate = data.fields.resolutiondate ? new Date(data.fields.resolutiondate) : null;
return fieldsHelper
.parse({ fields: data.fields, cache })
.then(issueData => SnapshotsBuilder.init(issueData))
.then(builder => historiesHelper.parse({ connection, cache, builder, histories: data.changelog?.histories }))
.then(builder => builder.build({ created }))
.then(snapshots => Issue.create({ key: data.key, created, resolutiondate, snapshots }))
.catch(error => Promise.reject(error));
};
const parseIssues = (connection, issuesData, cache, issues = []) => {
if (issuesData.length === 0) return Promise.resolve(issues);
return parseIssue(connection, issuesData.pop(), cache)
.then(issue => {
issues.push(issue);
return parseIssues(connection, issuesData, cache, issues);
})
.catch(error => Promise.reject(error));
};
exports.getByKey = ({ connection, key, cache }) => {
return jira
.getIssueByKey(connection, key)
.then(data => parseIssue(connection, data, cache))
.catch(error => Promise.reject(error));
};
exports.getByBoardId = ({ connection, boardId, cache, offset, size }) => {
return jira
.getIssuesByBoardId(connection, boardId, offset, size)
.then(data => parseIssues(connection, data.issues, cache))
.catch(error => Promise.reject(error));
};