UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

144 lines (143 loc) 9.28 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.deleteTransaction = exports.returnOrder = exports.placeOrder = exports.moneyTransfer = void 0; exports.updateAgent = updateAgent; exports.exportOneTransactionTasksIfExists = exportOneTransactionTasksIfExists; /** * 取引サービス */ const google_libphonenumber_1 = require("google-libphonenumber"); const factory = require("../factory"); const deleteTransaction_1 = require("./transaction/deleteTransaction"); Object.defineProperty(exports, "deleteTransaction", { enumerable: true, get: function () { return deleteTransaction_1.deleteTransaction; } }); const MoneyTransferTransactionService = require("./transaction/moneyTransfer"); const PlaceOrderTransactionService = require("./transaction/placeOrder"); const publishOrderNumberIfNotExist_1 = require("./transaction/placeOrder/publishOrderNumberIfNotExist"); const ReturnOrderTransactionService = require("./transaction/returnOrder"); exports.moneyTransfer = MoneyTransferTransactionService; exports.placeOrder = PlaceOrderTransactionService; exports.returnOrder = ReturnOrderTransactionService; function fixCustomer(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; let formattedTelephone; try { const phoneUtil = google_libphonenumber_1.PhoneNumberUtil.getInstance(); const phoneNumber = phoneUtil.parse(params.agent.telephone, params.agent.telephoneRegion); if (!phoneUtil.isValidNumber(phoneNumber)) { throw new factory.errors.Argument('telephone', 'Invalid phone number'); } formattedTelephone = phoneUtil.format(phoneNumber, google_libphonenumber_1.PhoneNumberFormat.E164); } catch (error) { throw new factory.errors.Argument('telephone', error.message); } const transaction = yield repos.transaction.projectFieldsInProgressById({ typeOf: params.typeOf, id: params.id }, ['agent', 'object', 'typeOf', 'project']); if (transaction.agent.id !== params.agent.id) { throw new factory.errors.Forbidden('Transaction not yours'); } // 注文取引の場合、object.customerにも適用 let customer; if (transaction.typeOf === factory.transactionType.PlaceOrder) { // いったんtransaction.object.customer?.typeOfは取引開始時にセットされている前提 const trasactionObject = transaction.object; if (typeof ((_a = trasactionObject.customer) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') { customer = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ typeOf: trasactionObject.customer.typeOf, id: trasactionObject.customer.id }, (Array.isArray(trasactionObject.customer.identifier)) ? { identifier: trasactionObject.customer.identifier } : /* istanbul ignore next */ undefined), (Array.isArray(params.agent.additionalProperty)) ? { additionalProperty: params.agent.additionalProperty } : /* istanbul ignore next */ undefined), (typeof params.agent.age === 'string') ? { age: params.agent.age } : /* istanbul ignore next */ undefined), (typeof params.agent.address === 'string') ? { address: params.agent.address } : /* istanbul ignore next */ undefined), (typeof params.agent.email === 'string') ? { email: params.agent.email } : /* istanbul ignore next */ undefined), (typeof params.agent.familyName === 'string') ? { familyName: params.agent.familyName } : /* istanbul ignore next */ undefined), (typeof params.agent.gender === 'string') ? { gender: params.agent.gender } : /* istanbul ignore next */ undefined), (typeof params.agent.givenName === 'string') ? { givenName: params.agent.givenName } : /* istanbul ignore next */ undefined), (typeof params.agent.name === 'string') ? { name: params.agent.name } : /* istanbul ignore next */ undefined), (typeof formattedTelephone === 'string') ? { telephone: formattedTelephone } : /* istanbul ignore next */ undefined), (typeof params.agent.url === 'string') ? { url: params.agent.url } : /* istanbul ignore next */ undefined); } } return { customer, transaction }; }); } /** * 取引人プロフィール更新 */ function updateAgent(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { const { customer, transaction } = yield fixCustomer(params)(repos); // const newAgent: Pick<factory.transaction.placeOrder.IAgent, 'id'> = { // id: transaction.agent.id // }; // discontinue saving in transaction(2024-06-24~) // await repos.transaction.updateAgent({ // typeOf: params.typeOf, // id: params.id, // agent: newAgent, // ...(customer !== undefined) ? { object: { customer } } : undefined // }); // also save in orderInTransaction(2024-06-20~) if (customer !== undefined) { const orderNumber = yield (0, publishOrderNumberIfNotExist_1.publishOrderNumberIfNotExist)({ project: { id: transaction.project.id }, id: params.id, object: { orderDate: new Date() } })(repos); const customerName = (typeof customer.name === 'string' && customer.name !== '') ? customer.name : (typeof customer.givenName === 'string' && typeof customer.familyName === 'string' && customer.givenName !== '' && customer.familyName !== '') ? `${customer.givenName} ${customer.familyName}` : undefined; const customerInOrder = Object.assign(Object.assign(Object.assign({}, customer), { identifier: (Array.isArray(customer.identifier)) ? customer.identifier : [] }), (typeof customerName === 'string') ? { name: customerName } : undefined); yield repos.orderInTransaction.setCustomer({ orderNumber, project: transaction.project, customer: customerInOrder }); } // return newAgent; }); } function exportOneTransactionTasksIfExists(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const transaction = yield repos.transaction.startExportTasks(Object.assign(Object.assign(Object.assign({ tasksExportAction: { agent: { name: params.tasksExportAction.agent.name } }, endDate: { $lt: params.endDate.$lt } }, (typeof params.id === 'string') ? { id: params.id } : undefined), (typeof ((_a = params.status) === null || _a === void 0 ? void 0 : _a.$eq) === 'string') ? { status: params.status } : undefined), (params.sort !== undefined) ? { sort: params.sort } : undefined)); if (transaction === null) { return; } // 失敗してもここでは戻さない(RUNNINGのまま待機) switch (transaction.typeOf) { case factory.transactionType.MoneyTransfer: yield MoneyTransferTransactionService.exportTasksById(Object.assign({ id: transaction.id }, (typeof params.runsTasksAfterInSeconds === 'number') ? { runsTasksAfterInSeconds: params.runsTasksAfterInSeconds } : undefined))(repos); break; case factory.transactionType.PlaceOrder: yield PlaceOrderTransactionService.exportTasksById(Object.assign({ id: transaction.id, optimizeRedundantTasks: params.optimizeRedundantTasks === true }, (typeof params.runsTasksAfterInSeconds === 'number') ? { runsTasksAfterInSeconds: params.runsTasksAfterInSeconds } : undefined))(repos); break; case factory.transactionType.ReturnOrder: yield ReturnOrderTransactionService.exportTasksById(Object.assign({ id: transaction.id }, (typeof params.runsTasksAfterInSeconds === 'number') ? { runsTasksAfterInSeconds: params.runsTasksAfterInSeconds } : undefined))(repos); break; default: } yield repos.transaction.setTasksExportedById({ id: transaction.id }); return transaction; }); }