oa-jira
Version:
Octet Agile's JIRA connectivity project.
47 lines (37 loc) • 1.56 kB
JavaScript
const jira = require('../../jira');
const Board = require('../classes/board.class');
const BoardColumn = require('../classes/board.column.class');
const commons = require('../../commons');
exports.create = ({ id, name, projectId, columns } = {}) => {
return Board.create({ id, name, projectId, columns });
};
exports.resolve = board => Board.resolve(board);
const parseStatusIds = statuses => {
return Promise.resolve(commons.array.isEmpty(statuses) ? [] : statuses.map(status => status.id));
};
const parseColumn = ({ order, column }) => {
return parseStatusIds(column.statuses)
.then(statusIds => BoardColumn.create({ name: column.name, order, min: column.min, max: column.max, statusIds }))
.catch(error => Promise.reject(error));
};
const parseColumns = columns => {
return Promise.all(
commons.array.isEmpty(columns) ? [] : columns.map((column, order) => parseColumn({ order, column }))
);
};
const parseBoard = data => {
if (!data) return Promise.resolve(null);
return parseColumns(data.columnConfig?.columns)
.then(columns => {
return Board.create({ id: data.id, name: data.name, projectId: data.location?.id, columns });
})
.catch(error => Promise.reject(error));
};
exports.getById = ({ connection, id, cache }) => {
if (cache.boards.has(id)) return cache.boards.get(id);
return jira
.getBoardById(connection, id)
.then(data => parseBoard(data))
.then(board => cache.boards.set(id, board))
.catch(error => Promise.reject(error));
};