UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

66 lines (65 loc) 3.81 kB
"use strict"; 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); } } }))); }); }