@chevre/domain
Version:
Chevre Domain Library for Node.js
114 lines (113 loc) • 5.92 kB
JavaScript
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 });
}
});
}
;