@chevre/domain
Version:
Chevre Domain Library for Node.js
102 lines (101 loc) • 4.08 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMoneyTransferActionAttributes = createMoneyTransferActionAttributes;
/**
* 取引ファクトリー
*/
const factory = require("../../factory");
/**
* 転送アクション属性作成
*/
function createMoneyTransferActionAttributes(params) {
const transaction = params.transaction;
let fromLocation = {
typeOf: transaction.agent.typeOf,
name: transaction.agent.name
};
let toLocation = {
typeOf: transaction.recipient.typeOf,
name: transaction.recipient.name
};
switch (transaction.typeOf) {
case factory.account.transactionType.Deposit:
toLocation = {
typeOf: transaction.object.toLocation.typeOf,
// 廃止(2023-02-16~)
// accountType: transaction.object.toLocation.accountType,
accountNumber: transaction.object.toLocation.accountNumber,
name: transaction.recipient.name
};
break;
case factory.account.transactionType.Transfer:
fromLocation = {
typeOf: transaction.object.fromLocation.typeOf,
// 廃止(2023-02-16~)
// accountType: transaction.object.fromLocation.accountType,
accountNumber: transaction.object.fromLocation.accountNumber,
name: transaction.agent.name
};
toLocation = {
typeOf: transaction.object.toLocation.typeOf,
// 廃止(2023-02-16~)
// accountType: transaction.object.toLocation.accountType,
accountNumber: transaction.object.toLocation.accountNumber,
name: transaction.recipient.name
};
break;
case factory.account.transactionType.Withdraw:
fromLocation = {
typeOf: transaction.object.fromLocation.typeOf,
// 廃止(2023-02-16~)
// accountType: transaction.object.fromLocation.accountType,
accountNumber: transaction.object.fromLocation.accountNumber,
name: transaction.agent.name
};
break;
default:
}
// let accountType: string;
// const transactionType = params.transaction.typeOf;
// switch (transactionType) {
// case factory.account.transactionType.Deposit:
// accountType = params.transaction.object.toLocation.accountType;
// break;
// case factory.account.transactionType.Transfer:
// accountType = params.transaction.object.fromLocation.accountType;
// break;
// case factory.account.transactionType.Withdraw:
// accountType = params.transaction.object.fromLocation.accountType;
// break;
// default:
// throw new factory.errors.NotImplemented(`transaction type ${transactionType} not implemented`);
// }
const purpose = {
typeOf: transaction.typeOf,
id: transaction.id,
transactionNumber: transaction.transactionNumber
// ...(typeof transaction.identifier === 'string')
// ? { identifier: transaction.identifier }
// : /* istanbul ignore next */ undefined
};
return {
project: transaction.project,
typeOf: factory.actionType.MoneyTransfer,
// identifier: `${factory.actionType.MoneyTransfer}-${transaction.typeOf}-${transaction.id}`,
description: transaction.object.description,
// object: {},
agent: transaction.agent,
recipient: transaction.recipient,
amount: {
typeOf: 'MonetaryAmount',
// 廃止(2023-02-16~)
// currency: accountType,
value: (typeof transaction.object.amount === 'number')
? transaction.object.amount
: transaction.object.amount.value
},
fromLocation: fromLocation,
toLocation: toLocation,
purpose
};
}
;