UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

114 lines (113 loc) 5.92 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.onOrderInTransit = onOrderInTransit; /** * 注文処理時処理 */ const createDebug = require("debug"); const factory = require("../../../factory"); const debug = createDebug('chevre-domain:service:order'); function onOrderInTransit(params) { return (repos, settings) => __awaiter(this, void 0, void 0, function* () { debug('onOrderStatusChanged called.', params.order.orderNumber, params.order.orderStatus, params.order.orderDate); switch (params.order.orderStatus) { case factory.orderStatus.OrderInTransit: // 冗長なsendOrderタスク作成を回避(2023-08-25~) yield createSendOrderTaskIfNotExist({ order: params.order })(repos, settings); // 取引確定時にコードを発行していればタスク作成(2024-02-06~) yield createOnAuthorizationCreatedTask(params.order)(repos); break; default: throw new factory.errors.NotImplemented(`${params.order.orderStatus} not implemented`); } }); } function createSendOrderTaskIfNotExist(params) { return (repos, settings) => __awaiter(this, void 0, void 0, function* () { const now = new Date(); // const maskedCustomer = createMaskedCustomer({ customer: params.order.customer }, { noProfile: true }); const simpleOrder = { typeOf: params.order.typeOf, // seller: { // id: params.order.seller.id, // typeOf: params.order.seller.typeOf, // name: params.order.seller.name // }, // 廃止(2024-03-06~) // mask // customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id }, // 廃止(2024-03-06~) orderNumber: params.order.orderNumber, // price: params.order.price, // priceCurrency: params.order.priceCurrency, orderDate: params.order.orderDate }; const sendOrderObject = Object.assign(Object.assign({}, simpleOrder), { acceptedOffers: { limit: settings.deliverOrderLimit, page: 1 // page1から配送 } }); const sendOrderTaskData = { project: params.order.project, object: Object.assign(Object.assign({}, sendOrderObject), { confirmationNumber: params.order.confirmationNumber, previousOrderStatus: params.order.orderStatus }) }; const taskIdentifier = `${sendOrderTaskData.project.id}:${factory.taskName.SendOrder}:${sendOrderTaskData.object.typeOf}:${sendOrderTaskData.object.orderNumber}`; const sendOrderTask = { alternateName: taskIdentifier, identifier: taskIdentifier, project: params.order.project, name: factory.taskName.SendOrder, status: factory.taskStatus.Ready, runsAt: now, // なるはやで実行 remainingNumberOfTries: 10, numberOfTried: 0, executionResults: [], data: sendOrderTaskData }; debug('processing createSendOrderTaskIfNotExist...', sendOrderTask); // await repos.task.createSendOrderTaskIfNotExist(sendOrderTask, { emitImmediately: true }); yield repos.task.createIfNotExistByAlternateName(sendOrderTask, { emitImmediately: true }); }); } function createOnAuthorizationCreatedTask(order) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; const placeOrderTransaction = (yield repos.transaction.projectFields({ limit: 1, page: 1, typeOf: factory.transactionType.PlaceOrder, object: { orderNumber: { $eq: order.orderNumber } }, inclusion: ['result'] })).shift(); const codeFromTransaction = (_a = placeOrderTransaction === null || placeOrderTransaction === void 0 ? void 0 : placeOrderTransaction.result) === null || _a === void 0 ? void 0 : _a.code; if (typeof codeFromTransaction === 'string') { const taskRunsAt = new Date(); const taskIdentifier = `${order.project.id}:${factory.taskName.OnAuthorizationCreated}:${factory.transactionType.PlaceOrder}:${placeOrderTransaction === null || placeOrderTransaction === void 0 ? void 0 : placeOrderTransaction.id}`; const task = { alternateName: taskIdentifier, identifier: taskIdentifier, name: factory.taskName.OnAuthorizationCreated, status: factory.taskStatus.Ready, runsAt: taskRunsAt, remainingNumberOfTries: 10, numberOfTried: 0, executionResults: [], data: { // project: { id: order.project.id }, code: codeFromTransaction, retryOnReservationNotFound: true }, project: { id: order.project.id, typeOf: factory.organizationType.Project } }; yield repos.task.createIfNotExistByAlternateName(task, { emitImmediately: true }); } }); }