@chevre/domain
Version:
Chevre Domain Library for Node.js
107 lines (106 loc) • 5.11 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTasks = createTasks;
const moment = require("moment");
const factory = require("../../../../factory");
// import { Settings } from '../../../../settings';
/**
* 取引のタスクを作成する
*/
// tslint:disable-next-line:max-func-body-length
function createTasks(params, setting
// settings: Settings
) {
var _a, _b;
const taskAttributes = [];
const transaction = params.transaction;
const taskRunsAt = params.runsAt;
const confirmedStoragePeriodInDays = (_a = setting === null || setting === void 0 ? void 0 : setting.storage) === null || _a === void 0 ? void 0 : _a.transactionConfirmedInDays;
const canceledStoragePeriodInDays = (_b = setting === null || setting === void 0 ? void 0 : setting.storage) === null || _b === void 0 ? void 0 : _b.transactionCanceledInDays;
if (typeof confirmedStoragePeriodInDays !== 'number') {
throw new factory.errors.NotFound('setting.storage.confirmedStoragePeriodInDays');
}
if (typeof canceledStoragePeriodInDays !== 'number') {
throw new factory.errors.NotFound('setting.storage.canceledStoragePeriodInDays');
}
// 取引削除タスクを作成(取引ステータスによってrunsAtを調整)
// let deleteAt = moment(transaction.endDate)
// .add(settings.transaction.confirmedStoragePeriodInDays, 'days')
// .toDate();
let deleteAt = moment(transaction.endDate)
.add(confirmedStoragePeriodInDays, 'days')
.toDate();
switch (transaction.status) {
case factory.transactionStatusType.Confirmed:
break;
case factory.transactionStatusType.Canceled:
case factory.transactionStatusType.Expired:
// deleteAt = moment(transaction.endDate)
// .add(settings.transaction.canceledStoragePeriodInDays, 'days')
// .toDate();
deleteAt = moment(transaction.endDate)
.add(canceledStoragePeriodInDays, 'days')
.toDate();
break;
default:
}
const deleteTransactionTask = {
project: transaction.project,
name: factory.taskName.DeleteTransaction,
status: factory.taskStatus.Ready,
runsAt: deleteAt,
remainingNumberOfTries: 3,
numberOfTried: 0,
executionResults: [],
data: {
object: Object.assign({ specifyingMethod: factory.task.deleteTransaction.SpecifyingMethod.Id, id: transaction.id, object: Object.assign({}, (transaction.object.pendingTransaction !== undefined)
? { pendingTransaction: transaction.object.pendingTransaction }
: undefined), project: transaction.project, startDate: transaction.startDate, typeOf: transaction.typeOf }, (transaction.endDate !== undefined) ? { endDate: transaction.endDate } : undefined)
}
};
taskAttributes.push(deleteTransactionTask);
switch (transaction.status) {
case factory.transactionStatusType.Confirmed:
// tslint:disable-next-line:no-single-line-block-comment
/* istanbul ignore else */
if (transaction.potentialActions !== undefined) {
// tslint:disable-next-line:no-single-line-block-comment
/* istanbul ignore else */
if (transaction.potentialActions.moneyTransfer !== undefined) {
taskAttributes.push(...transaction.potentialActions.moneyTransfer.map((a) => {
return {
project: transaction.project,
name: factory.taskName.ConfirmMoneyTransfer,
status: factory.taskStatus.Ready,
runsAt: taskRunsAt,
remainingNumberOfTries: 10,
numberOfTried: 0,
executionResults: [],
data: a
};
}));
}
}
break;
case factory.transactionStatusType.Canceled:
case factory.transactionStatusType.Expired:
const voidMoneyTransferTaskAttributes = {
project: { typeOf: transaction.project.typeOf, id: transaction.project.id },
name: factory.taskName.VoidMoneyTransferTransaction,
status: factory.taskStatus.Ready,
runsAt: taskRunsAt,
remainingNumberOfTries: 10,
numberOfTried: 0,
executionResults: [],
data: {
project: { typeOf: transaction.project.typeOf, id: transaction.project.id },
purpose: { typeOf: transaction.typeOf, id: transaction.id }
}
};
taskAttributes.push(voidMoneyTransferTaskAttributes);
break;
default:
throw new factory.errors.NotImplemented(`Transaction status "${transaction.status}" not implemented.`);
}
return taskAttributes;
}
;