@chevre/domain
Version:
Chevre Domain Library for Node.js
66 lines (65 loc) • 3.81 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.voidTransaction = voidTransaction;
const factory = require("../../../factory");
const MoneyTransferAssetTransactionService = require("../../assetTransaction/moneyTransfer");
function voidTransaction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
let transaction;
if (params.agent !== undefined && params.agent !== null && typeof params.agent.id === 'string') {
transaction = (yield repos.transaction.projectFieldsInProgressById({
typeOf: params.purpose.typeOf,
id: params.purpose.id
}, ['typeOf']));
}
let authorizeActions;
if (typeof params.id === 'string') {
const authorizeAction = yield repos.action.findById({ typeOf: factory.actionType.AuthorizeAction, id: params.id });
// 取引内のアクションかどうか確認
if (transaction !== undefined) {
if (authorizeAction.purpose.typeOf !== transaction.typeOf || authorizeAction.purpose.id !== transaction.id) {
throw new factory.errors.Argument('Transaction', 'Action not found in the transaction');
}
}
authorizeActions = [authorizeAction];
}
else {
authorizeActions = (yield repos.action.searchByPurpose({
typeOf: factory.actionType.AuthorizeAction,
purpose: {
typeOf: params.purpose.typeOf,
id: params.purpose.id
}
}));
authorizeActions = authorizeActions.filter((a) => a.object.typeOf === factory.offerType.Offer)
.filter((a) => { var _a; return ((_a = a.object.itemOffered) === null || _a === void 0 ? void 0 : _a.typeOf) === factory.actionType.MoneyTransfer; });
}
yield Promise.all(authorizeActions.map((action) => __awaiter(this, void 0, void 0, function* () {
var _a, _b;
yield repos.action.cancelWithVoid({ typeOf: action.typeOf, id: action.id });
const pendingTransactionTransactionNumber = (_b = (_a = action.object.itemOffered.object) === null || _a === void 0 ? void 0 : _a.pendingTransaction) === null || _b === void 0 ? void 0 : _b.transactionNumber;
if (typeof pendingTransactionTransactionNumber === 'string') {
// 取引が存在すれば中止
const existingAssetTransactions = yield repos.assetTransaction.search({
limit: 1,
page: 1,
project: { id: { $eq: params.project.id } },
typeOf: factory.assetTransactionType.MoneyTransfer,
transactionNumber: { $eq: pendingTransactionTransactionNumber }
});
if (existingAssetTransactions.length > 0) {
yield MoneyTransferAssetTransactionService.cancel({ transactionNumber: pendingTransactionTransactionNumber })(repos);
}
}
})));
});
}
;