UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

128 lines (127 loc) 5.04 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.open = open; exports.transferMoney = transferMoney; exports.cancelMoneyTransfer = cancelMoneyTransfer; /** * 口座サービス * 開設、閉鎖等、口座アクション実行など */ const factory = require("../factory"); /** * 口座を開設する */ function open(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { const openDate = new Date(); return repos.account.open(params.map((p) => { return { project: { typeOf: factory.organizationType.Project, id: p.project.id }, typeOf: p.typeOf, name: p.name, accountType: p.accountType, accountNumber: p.accountNumber, initialBalance: p.initialBalance, openDate: openDate }; })); }); } /** * 口座を解約する */ // export function close(params: { // /** // * 口座番号 // */ // accountNumber: string; // }) { // return async (repos: { // account: AccountRepo; // }) => { // await repos.account.close({ // accountNumber: params.accountNumber, // closeDate: new Date() // }); // }; // } /** * 転送する * 確定取引結果から、実際の転送アクションを実行します。 */ function transferMoney(actionAttributes) { return (repos) => __awaiter(this, void 0, void 0, function* () { const action = actionAttributes; let fromAccountNumber; let toAccountNumber; try { fromAccountNumber = (typeof action.fromLocation.accountNumber === 'string') ? action.fromLocation.accountNumber // tslint:disable-next-line:no-single-line-block-comment /* istanbul ignore next */ : undefined; toAccountNumber = (typeof action.toLocation.accountNumber === 'string') ? action.toLocation.accountNumber // tslint:disable-next-line:no-single-line-block-comment /* istanbul ignore next */ : undefined; yield repos.account.settleTransaction({ fromAccountNumber: fromAccountNumber, toAccountNumber: toAccountNumber, amount: (typeof action.amount === 'number') ? action.amount : Number(action.amount.value), transactionId: action.purpose.id }); } catch (error) { throw error; } }); } /** * 転送取消 * 期限切れ、あるいは、中止された取引から、転送をアクションを取り消します。 */ function cancelMoneyTransfer(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { let fromAccountNumber; let toAccountNumber; // 取引存在確認 const transaction = yield repos.accountTransaction.findById({ typeOf: params.transaction.typeOf, id: params.transaction.id }); switch (params.transaction.typeOf) { case factory.account.transactionType.Deposit: toAccountNumber = transaction.object.toLocation.accountNumber; break; case factory.account.transactionType.Withdraw: fromAccountNumber = transaction.object.fromLocation.accountNumber; break; case factory.account.transactionType.Transfer: fromAccountNumber = transaction.object.fromLocation.accountNumber; toAccountNumber = // tslint:disable-next-line:max-line-length transaction.object.toLocation.accountNumber; break; default: throw new factory.errors.Argument('typeOf', `transaction type ${params.transaction.typeOf} unknown`); } yield repos.account.voidTransaction({ fromAccountNumber: fromAccountNumber, toAccountNumber: toAccountNumber, amount: (typeof transaction.object.amount === 'number') ? transaction.object.amount : transaction.object.amount.value, transactionId: transaction.id }); }); }