UNPKG

oa-jira

Version:

Octet Agile's JIRA connectivity project.

47 lines (37 loc) 1.56 kB
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)); };