@chevre/domain 21.20.0-alpha.2 → 21.20.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/example/src/chevre/onAssetTransactionStatusChanged.ts +36 -0
  2. package/example/src/chevre/retryTasks.ts +39 -0
  3. package/example/src/chevre/searchOrders.ts +13 -15
  4. package/example/src/chevre/searchSlicedAcceptedOffersByOrderNumber.ts +28 -0
  5. package/example/src/chevre/sendOrder.ts +37 -0
  6. package/example/src/chevre/transaction/processAcceptOffer.ts +48 -0
  7. package/example/src/chevre/transaction/processPlaceOrder.ts +82 -53
  8. package/lib/chevre/repo/acceptedOffer.d.ts +21 -1
  9. package/lib/chevre/repo/acceptedOffer.js +32 -2
  10. package/lib/chevre/repo/action.d.ts +3 -3
  11. package/lib/chevre/repo/action.js +4 -6
  12. package/lib/chevre/repo/mongoose/schemas/order.d.ts +1 -1
  13. package/lib/chevre/repo/mongoose/schemas/order.js +20 -11
  14. package/lib/chevre/repo/order.js +28 -9
  15. package/lib/chevre/repo/orderInTransaction.d.ts +27 -0
  16. package/lib/chevre/repo/orderInTransaction.js +77 -0
  17. package/lib/chevre/repo/task.d.ts +0 -2
  18. package/lib/chevre/repo/task.js +56 -46
  19. package/lib/chevre/repo/transaction.d.ts +1 -1
  20. package/lib/chevre/repository.d.ts +5 -0
  21. package/lib/chevre/repository.js +15 -2
  22. package/lib/chevre/service/assetTransaction/pay.d.ts +0 -10
  23. package/lib/chevre/service/assetTransaction/pay.js +4 -4
  24. package/lib/chevre/service/code.js +1 -1
  25. package/lib/chevre/service/delivery.js +2 -2
  26. package/lib/chevre/service/event/createEvent.js +1 -1
  27. package/lib/chevre/service/event.js +2 -2
  28. package/lib/chevre/service/moneyTransfer.js +1 -1
  29. package/lib/chevre/service/notification.js +2 -5
  30. package/lib/chevre/service/offer/any.d.ts +29 -0
  31. package/lib/chevre/service/offer/any.js +55 -0
  32. package/lib/chevre/service/offer/event/authorize.d.ts +7 -0
  33. package/lib/chevre/service/offer/event/authorize.js +11 -0
  34. package/lib/chevre/service/offer/event/cancel.d.ts +2 -0
  35. package/lib/chevre/service/offer/event/cancel.js +12 -1
  36. package/lib/chevre/service/offer/event/voidTransaction.d.ts +2 -0
  37. package/lib/chevre/service/offer/event/voidTransaction.js +12 -5
  38. package/lib/chevre/service/offer/eventServiceByCOA.js +2 -2
  39. package/lib/chevre/service/offer/moneyTransfer/authorize.d.ts +6 -1
  40. package/lib/chevre/service/offer/moneyTransfer/authorize.js +2 -1
  41. package/lib/chevre/service/offer/moneyTransfer/returnMoneyTransfer.js +1 -1
  42. package/lib/chevre/service/offer/moneyTransfer/settleTransaction.js +1 -1
  43. package/lib/chevre/service/offer/moneyTransfer/voidTransaction.js +1 -1
  44. package/lib/chevre/service/offer/product.js +1 -1
  45. package/lib/chevre/service/order/confirmPayTransaction.js +3 -3
  46. package/lib/chevre/service/order/onAssetTransactionStatusChanged.d.ts +11 -1
  47. package/lib/chevre/service/order/onAssetTransactionStatusChanged.js +113 -5
  48. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDelivered/factory.js +18 -19
  49. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDelivered.js +38 -25
  50. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially/factory.d.ts +11 -0
  51. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially/factory.js +45 -0
  52. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially.d.ts +14 -0
  53. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially.js +37 -0
  54. package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.d.ts +10 -0
  55. package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.js +86 -0
  56. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing.js +18 -12
  57. package/lib/chevre/service/order/onOrderStatusChanged.d.ts +3 -1
  58. package/lib/chevre/service/order/onOrderStatusChanged.js +5 -1
  59. package/lib/chevre/service/order/placeOrder.d.ts +2 -0
  60. package/lib/chevre/service/order/placeOrder.js +28 -29
  61. package/lib/chevre/service/order/returnOrder.js +25 -16
  62. package/lib/chevre/service/order/sendOrder.d.ts +5 -0
  63. package/lib/chevre/service/order/sendOrder.js +68 -30
  64. package/lib/chevre/service/payment/any.d.ts +6 -8
  65. package/lib/chevre/service/payment/any.js +46 -10
  66. package/lib/chevre/service/payment/creditCard.d.ts +9 -8
  67. package/lib/chevre/service/payment/creditCard.js +102 -133
  68. package/lib/chevre/service/payment/faceToFace.d.ts +0 -4
  69. package/lib/chevre/service/payment/movieTicket/checkByIdentifier.d.ts +0 -2
  70. package/lib/chevre/service/payment/movieTicket/checkByIdentifier.js +1 -0
  71. package/lib/chevre/service/payment/movieTicket/validation.d.ts +0 -2
  72. package/lib/chevre/service/payment/movieTicket.d.ts +0 -6
  73. package/lib/chevre/service/payment/movieTicket.js +1 -1
  74. package/lib/chevre/service/payment/paymentCard.d.ts +0 -2
  75. package/lib/chevre/service/payment/paymentCard.js +6 -6
  76. package/lib/chevre/service/payment.js +1 -1
  77. package/lib/chevre/service/product.js +1 -1
  78. package/lib/chevre/service/reserve/cancelReservation.js +2 -2
  79. package/lib/chevre/service/reserve/confirmReservation.js +1 -1
  80. package/lib/chevre/service/reserve/potentialActions/onReservationUsed.d.ts +1 -1
  81. package/lib/chevre/service/reserve/potentialActions/onReservationUsed.js +4 -4
  82. package/lib/chevre/service/reserve/useReservation.d.ts +1 -2
  83. package/lib/chevre/service/reserve/useReservation.js +4 -4
  84. package/lib/chevre/service/reserve/verifyToken4reservation.js +2 -0
  85. package/lib/chevre/service/task/confirmRegisterServiceTransaction.js +1 -1
  86. package/lib/chevre/service/task/confirmReserveTransaction.d.ts +4 -1
  87. package/lib/chevre/service/task/confirmReserveTransaction.js +42 -3
  88. package/lib/chevre/service/task/onResourceUpdated/onResourceDeleted.js +7 -7
  89. package/lib/chevre/service/task/placeOrder.js +9 -10
  90. package/lib/chevre/service/task/returnOrder.js +0 -3
  91. package/lib/chevre/service/task/returnPayTransaction.js +1 -1
  92. package/lib/chevre/service/task/returnReserveTransaction.js +1 -1
  93. package/lib/chevre/service/task/sendOrder.js +8 -4
  94. package/lib/chevre/service/task/voidPayTransaction.js +2 -2
  95. package/lib/chevre/service/task/voidReserveTransaction.js +8 -12
  96. package/lib/chevre/service/transaction/deleteTransaction.js +1 -1
  97. package/lib/chevre/service/transaction/moneyTransfer.js +1 -5
  98. package/lib/chevre/service/transaction/placeOrderInProgress/potentialActions.js +6 -2
  99. package/lib/chevre/service/transaction/placeOrderInProgress.js +2 -2
  100. package/lib/chevre/service/transaction/returnOrder/preStart.d.ts +32 -0
  101. package/lib/chevre/service/transaction/returnOrder/preStart.js +632 -0
  102. package/lib/chevre/service/transaction/returnOrder.d.ts +8 -6
  103. package/lib/chevre/service/transaction/returnOrder.js +4 -616
  104. package/lib/chevre/settings.d.ts +3 -1
  105. package/lib/chevre/settings.js +7 -2
  106. package/package.json +3 -3
@@ -0,0 +1,11 @@
1
+ import * as factory from '../../../../factory';
2
+ declare function createNextSendOrderTasks(params: {
3
+ order: Pick<factory.order.IOrder, 'confirmationNumber' | 'project' | 'typeOf' | 'seller' | 'orderNumber' | 'price' | 'priceCurrency' | 'orderDate' | 'customer' | 'id'> & {
4
+ acceptedOffers: {
5
+ limit: number;
6
+ page: number;
7
+ };
8
+ orderStatus: factory.orderStatus.OrderProcessing | factory.orderStatus.OrderInTransit;
9
+ };
10
+ }): (import("@chevre/factory/lib/task").IAttributes | import("@chevre/factory/lib/task/confirmMoneyTransfer").IAttributes | import("@chevre/factory/lib/task/confirmRegisterService").IAttributes | import("@chevre/factory/lib/task/confirmPayTransaction").IAttributes | import("@chevre/factory/lib/task/confirmRegisterServiceTransaction").IAttributes | import("@chevre/factory/lib/task/confirmReserveTransaction").IAttributes | import("@chevre/factory/lib/task/createEvent").IAttributes | import("@chevre/factory/lib/task/deleteTransaction").IAttributes | import("@chevre/factory/lib/task/givePointAward").IAttributes | import("@chevre/factory/lib/task/onAssetTransactionStatusChanged").IAttributes | import("@chevre/factory/lib/task/onAuthorizationCreated").IAttributes | import("@chevre/factory/lib/task/onEventChanged").IAttributes | import("@chevre/factory/lib/task/onResourceUpdated").IAttributes | import("@chevre/factory/lib/task/onOrderPaymentCompleted").IAttributes | import("@chevre/factory/lib/task/placeOrder").IAttributes | import("@chevre/factory/lib/task/returnOrder").IAttributes | import("@chevre/factory/lib/task/returnMoneyTransfer").IAttributes | import("@chevre/factory/lib/task/returnPayTransaction").IAttributes | import("@chevre/factory/lib/task/returnPointAward").IAttributes | import("@chevre/factory/lib/task/returnReserveTransaction").IAttributes | import("@chevre/factory/lib/task/sendEmailMessage").IAttributes | import("@chevre/factory/lib/task/sendOrder").IAttributes | import("@chevre/factory/lib/task/syncScreeningRooms").IAttributes | import("@chevre/factory/lib/task/triggerWebhook").IAttributes | import("@chevre/factory/lib/task/useReservation").IAttributes | import("@chevre/factory/lib/task/voidMoneyTransferTransaction").IAttributes | import("@chevre/factory/lib/task/voidPayTransaction").IAttributes | import("@chevre/factory/lib/task/voidRegisterServiceTransaction").IAttributes | import("@chevre/factory/lib/task/voidReserveTransaction").IAttributes)[];
11
+ export { createNextSendOrderTasks };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNextSendOrderTasks = void 0;
4
+ const factory = require("../../../../factory");
5
+ const order_1 = require("../../../../factory/order");
6
+ function createNextSendOrderTasks(params) {
7
+ const now = new Date();
8
+ const taskAttributes = [];
9
+ const maskedCustomer = (0, order_1.createMaskedCustomer)({ customer: params.order.customer }, { noProfile: true });
10
+ const simpleOrder = {
11
+ typeOf: params.order.typeOf,
12
+ seller: {
13
+ id: params.order.seller.id,
14
+ typeOf: params.order.seller.typeOf,
15
+ name: params.order.seller.name
16
+ },
17
+ // mask
18
+ customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id },
19
+ orderNumber: params.order.orderNumber,
20
+ price: params.order.price,
21
+ priceCurrency: params.order.priceCurrency,
22
+ orderDate: params.order.orderDate
23
+ };
24
+ const sendOrderObject = Object.assign(Object.assign({}, simpleOrder), { acceptedOffers: {
25
+ limit: params.order.acceptedOffers.limit,
26
+ page: params.order.acceptedOffers.page + 1
27
+ } });
28
+ const sendOrderTaskData = {
29
+ project: params.order.project,
30
+ object: Object.assign(Object.assign({}, sendOrderObject), { confirmationNumber: params.order.confirmationNumber, previousOrderStatus: params.order.orderStatus })
31
+ };
32
+ const sendOrderTask = {
33
+ project: params.order.project,
34
+ name: factory.taskName.SendOrder,
35
+ status: factory.taskStatus.Ready,
36
+ runsAt: now,
37
+ remainingNumberOfTries: 10,
38
+ numberOfTried: 0,
39
+ executionResults: [],
40
+ data: sendOrderTaskData
41
+ };
42
+ taskAttributes.push(sendOrderTask);
43
+ return taskAttributes;
44
+ }
45
+ exports.createNextSendOrderTasks = createNextSendOrderTasks;
@@ -0,0 +1,14 @@
1
+ import type { MongoRepository as TaskRepo } from '../../../repo/task';
2
+ import * as factory from '../../../factory';
3
+ declare function onOrderDeliveredPartially(params: {
4
+ order: Pick<factory.order.IOrder, 'confirmationNumber' | 'project' | 'typeOf' | 'seller' | 'orderNumber' | 'price' | 'priceCurrency' | 'orderDate' | 'customer' | 'id'> & {
5
+ acceptedOffers: {
6
+ limit: number;
7
+ page: number;
8
+ };
9
+ orderStatus: factory.orderStatus.OrderProcessing | factory.orderStatus.OrderInTransit;
10
+ };
11
+ }): (repos: {
12
+ task: TaskRepo;
13
+ }) => Promise<void>;
14
+ export { onOrderDeliveredPartially };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.onOrderDeliveredPartially = void 0;
13
+ /**
14
+ * 注文ステータス変更時処理
15
+ */
16
+ const createDebug = require("debug");
17
+ const factory = require("../../../factory");
18
+ const factory_1 = require("./onOrderDeliveredPartially/factory");
19
+ const debug = createDebug('chevre-domain:service:order');
20
+ // type IPlaceOrderTransaction = Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'project' | 'typeOf' | 'potentialActions'>;
21
+ function onOrderDeliveredPartially(params) {
22
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
23
+ debug('onOrderStatusChanged called.', params.order.orderNumber, params.order.orderStatus, params.order.orderDate);
24
+ let tasks = [];
25
+ switch (params.order.orderStatus) {
26
+ case factory.orderStatus.OrderInTransit:
27
+ case factory.orderStatus.OrderProcessing:
28
+ // 次の配送タスクを作成
29
+ tasks = (0, factory_1.createNextSendOrderTasks)({ order: params.order });
30
+ break;
31
+ default:
32
+ throw new factory.errors.NotImplemented(`${params.order.orderStatus} not implemented`);
33
+ }
34
+ yield repos.task.saveMany(tasks, { emitImmediately: true });
35
+ });
36
+ }
37
+ exports.onOrderDeliveredPartially = onOrderDeliveredPartially;
@@ -0,0 +1,10 @@
1
+ import type { MongoRepository as TaskRepo } from '../../../repo/task';
2
+ import * as factory from '../../../factory';
3
+ declare function onOrderInTransit(params: {
4
+ order: Omit<factory.order.IOrder, 'orderStatus'> & {
5
+ orderStatus: factory.orderStatus.OrderProcessing | factory.orderStatus.OrderInTransit;
6
+ };
7
+ }): (repos: {
8
+ task: TaskRepo;
9
+ }) => Promise<void>;
10
+ export { onOrderInTransit };
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.onOrderInTransit = void 0;
13
+ /**
14
+ * 注文処理時処理
15
+ */
16
+ const createDebug = require("debug");
17
+ const factory = require("../../../factory");
18
+ const order_1 = require("../../../factory/order");
19
+ const settings_1 = require("../../../settings");
20
+ // import {
21
+ // IExternalOrder
22
+ // } from './onOrderProcessing/factory';
23
+ const debug = createDebug('chevre-domain:service:order');
24
+ // type IPlaceOrderTransaction = Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'typeOf' | 'potentialActions'>;
25
+ function onOrderInTransit(params) {
26
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
27
+ debug('onOrderStatusChanged called.', params.order.orderNumber, params.order.orderStatus, params.order.orderDate);
28
+ // let tasks: factory.task.IAttributes<factory.taskName>[] = [];
29
+ // await repos.task.saveMany(tasks, { emitImmediately: true });
30
+ switch (params.order.orderStatus) {
31
+ case factory.orderStatus.OrderInTransit:
32
+ case factory.orderStatus.OrderProcessing:
33
+ // 冗長なsendOrderタスク作成を回避(2023-08-25~)
34
+ yield createSendOrderTransactionTaskIfNotExist({
35
+ order: params.order
36
+ // potentialActions: params.placeOrderTransaction?.potentialActions?.order?.potentialActions
37
+ })(repos);
38
+ break;
39
+ default:
40
+ }
41
+ });
42
+ }
43
+ exports.onOrderInTransit = onOrderInTransit;
44
+ function createSendOrderTransactionTaskIfNotExist(params) {
45
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
46
+ const now = new Date();
47
+ const maskedCustomer = (0, order_1.createMaskedCustomer)({ customer: params.order.customer }, { noProfile: true });
48
+ const simpleOrder = {
49
+ typeOf: params.order.typeOf,
50
+ seller: {
51
+ id: params.order.seller.id,
52
+ typeOf: params.order.seller.typeOf,
53
+ name: params.order.seller.name
54
+ },
55
+ // mask
56
+ customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id },
57
+ orderNumber: params.order.orderNumber,
58
+ price: params.order.price,
59
+ priceCurrency: params.order.priceCurrency,
60
+ orderDate: params.order.orderDate
61
+ };
62
+ const sendOrderObject = Object.assign(Object.assign({}, simpleOrder), { acceptedOffers: {
63
+ limit: settings_1.DELIVER_ORDER_LIMIT,
64
+ page: 1 // page1から配送
65
+ } });
66
+ const sendOrderTaskData = {
67
+ project: params.order.project,
68
+ object: Object.assign(Object.assign({}, sendOrderObject), { confirmationNumber: params.order.confirmationNumber, previousOrderStatus: params.order.orderStatus })
69
+ };
70
+ const taskIdentifier = `${sendOrderTaskData.project.id}:${factory.taskName.SendOrder}:${sendOrderTaskData.object.typeOf}:${sendOrderTaskData.object.orderNumber}`;
71
+ const sendOrderTask = {
72
+ identifier: taskIdentifier,
73
+ project: params.order.project,
74
+ name: factory.taskName.SendOrder,
75
+ status: factory.taskStatus.Ready,
76
+ runsAt: now,
77
+ remainingNumberOfTries: 10,
78
+ numberOfTried: 0,
79
+ executionResults: [],
80
+ data: sendOrderTaskData
81
+ };
82
+ debug('processing createSendOrderTaskIfNotExist...', sendOrderTask);
83
+ // await repos.task.createSendOrderTaskIfNotExist(sendOrderTask, { emitImmediately: true });
84
+ yield repos.task.createIfNotExistByIdentifier(sendOrderTask, { emitImmediately: true });
85
+ });
86
+ }
@@ -14,8 +14,10 @@ exports.onOrderProcessing = void 0;
14
14
  * 注文処理時処理
15
15
  */
16
16
  const createDebug = require("debug");
17
+ const util = require("util");
17
18
  const factory = require("../../../factory");
18
19
  const order_1 = require("../../../factory/order");
20
+ const settings_1 = require("../../../settings");
19
21
  const factory_1 = require("./onOrderProcessing/factory");
20
22
  const debug = createDebug('chevre-domain:service:order');
21
23
  const USE_CONFIRM_REGISTER_SERVICE_TRANSACTION = process.env.USE_CONFIRM_REGISTER_SERVICE_TRANSACTION === '1';
@@ -53,11 +55,13 @@ function onOrderProcessing(params) {
53
55
  case factory.orderStatus.OrderProcessing:
54
56
  // 冗長なconfirmReserveTransactionタスク作成を回避(2023-08-25~)
55
57
  yield createConfirmReserveTransactionTasksIfNotExist(params.order, simpleOrder)(repos);
56
- // 冗長なsendOrderタスク作成を回避(2023-08-25~)
57
- yield createSendOrderTransactionTaskIfNotExist({
58
- object: params.order,
59
- potentialActions: (_c = (_b = (_a = params.placeOrderTransaction) === null || _a === void 0 ? void 0 : _a.potentialActions) === null || _b === void 0 ? void 0 : _b.order) === null || _c === void 0 ? void 0 : _c.potentialActions
60
- })(repos);
58
+ if (settings_1.USE_SEND_ORDER_ON_ORDER_PROCESSING) {
59
+ // 冗長なsendOrderタスク作成を回避(2023-08-25~)
60
+ yield createSendOrderTransactionTaskIfNotExist({
61
+ object: params.order,
62
+ potentialActions: (_c = (_b = (_a = params.placeOrderTransaction) === null || _a === void 0 ? void 0 : _a.potentialActions) === null || _b === void 0 ? void 0 : _b.order) === null || _c === void 0 ? void 0 : _c.potentialActions
63
+ })(repos);
64
+ }
61
65
  yield createGivePointAwardTaskIfNotExist({
62
66
  potentialActions: (_f = (_e = (_d = params.placeOrderTransaction) === null || _d === void 0 ? void 0 : _d.potentialActions) === null || _e === void 0 ? void 0 : _e.order) === null || _f === void 0 ? void 0 : _f.potentialActions
63
67
  })(repos);
@@ -67,14 +71,10 @@ function onOrderProcessing(params) {
67
71
  });
68
72
  }
69
73
  exports.onOrderProcessing = onOrderProcessing;
70
- // const COA_TASK_DELAY_IN_SECONDS = 0;
71
74
  function createConfirmReserveTransactionTasksIfNotExist(order, simpleOrder) {
72
75
  return (repos) => __awaiter(this, void 0, void 0, function* () {
73
76
  const taskRunsAt = new Date();
74
77
  const taskRunsAt4coa = new Date();
75
- // const taskRunsAt4coa = moment(order.orderDate)
76
- // .add(COA_TASK_DELAY_IN_SECONDS, 'seconds')
77
- // .toDate();
78
78
  const confirmObjects = [
79
79
  ...(0, factory_1.createConfirmReservationActionObject4ChevreByOrder)({ order }),
80
80
  ...(0, factory_1.createConfirmReservationActionObject4COAByOrder)({ order })
@@ -93,7 +93,9 @@ function createConfirmReserveTransactionTasksIfNotExist(order, simpleOrder) {
93
93
  : factory.service.webAPI.Identifier.Chevre
94
94
  }
95
95
  };
96
+ const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmReserveTransaction, data.purpose.typeOf, data.purpose.orderNumber, data.object.typeOf, data.object.transactionNumber);
96
97
  const confirmReserveTransactionTask = {
98
+ identifier: taskIdentifier,
97
99
  project: order.project,
98
100
  name: factory.taskName.ConfirmReserveTransaction,
99
101
  status: factory.taskStatus.Ready,
@@ -103,7 +105,8 @@ function createConfirmReserveTransactionTasksIfNotExist(order, simpleOrder) {
103
105
  executionResults: [],
104
106
  data
105
107
  };
106
- yield repos.task.createConfirmReserveTransactionTaskIfNotExist(confirmReserveTransactionTask, { emitImmediately: true });
108
+ // await repos.task.createConfirmReserveTransactionTaskIfNotExist(confirmReserveTransactionTask, { emitImmediately: true });
109
+ yield repos.task.createIfNotExistByIdentifier(confirmReserveTransactionTask, { emitImmediately: true });
107
110
  })));
108
111
  });
109
112
  }
@@ -167,9 +170,11 @@ function createSendOrderTransactionTaskIfNotExist(params) {
167
170
  if (sendOrderByTransaction !== undefined) {
168
171
  const sendOrderTaskData = {
169
172
  project: sendOrderByTransaction.project,
170
- object: Object.assign(Object.assign({}, sendOrderByTransaction.object), { confirmationNumber: params.object.confirmationNumber })
173
+ object: Object.assign(Object.assign({}, sendOrderByTransaction.object), { confirmationNumber: params.object.confirmationNumber, previousOrderStatus: factory.orderStatus.OrderProcessing })
171
174
  };
175
+ const taskIdentifier = `${sendOrderTaskData.project.id}:${factory.taskName.SendOrder}:${sendOrderTaskData.object.typeOf}:${sendOrderTaskData.object.orderNumber}`;
172
176
  const sendOrderTask = {
177
+ identifier: taskIdentifier,
173
178
  project: sendOrderByTransaction.project,
174
179
  name: factory.taskName.SendOrder,
175
180
  status: factory.taskStatus.Ready,
@@ -179,7 +184,8 @@ function createSendOrderTransactionTaskIfNotExist(params) {
179
184
  executionResults: [],
180
185
  data: sendOrderTaskData
181
186
  };
182
- yield repos.task.createSendOrderTaskIfNotExist(sendOrderTask, { emitImmediately: true });
187
+ // await repos.task.createSendOrderTaskIfNotExist(sendOrderTask, { emitImmediately: true });
188
+ yield repos.task.createIfNotExistByIdentifier(sendOrderTask, { emitImmediately: true });
183
189
  }
184
190
  });
185
191
  }
@@ -3,7 +3,9 @@
3
3
  */
4
4
  import { onOrderCancelled } from './onOrderStatusChanged/onOrderCancelled';
5
5
  import { onOrderDelivered } from './onOrderStatusChanged/onOrderDelivered';
6
+ import { onOrderDeliveredPartially } from './onOrderStatusChanged/onOrderDeliveredPartially';
7
+ import { onOrderInTransit } from './onOrderStatusChanged/onOrderInTransit';
6
8
  import { onOrderPaymentDue } from './onOrderStatusChanged/onOrderPaymentDue';
7
9
  import { IExternalOrder, onOrderProcessing } from './onOrderStatusChanged/onOrderProcessing';
8
10
  import { onOrderReturned } from './onOrderStatusChanged/onOrderReturned';
9
- export { IExternalOrder, onOrderCancelled, onOrderDelivered, onOrderPaymentDue, onOrderProcessing, onOrderReturned };
11
+ export { IExternalOrder, onOrderCancelled, onOrderDelivered, onOrderDeliveredPartially, onOrderInTransit, onOrderPaymentDue, onOrderProcessing, onOrderReturned };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onOrderReturned = exports.onOrderProcessing = exports.onOrderPaymentDue = exports.onOrderDelivered = exports.onOrderCancelled = void 0;
3
+ exports.onOrderReturned = exports.onOrderProcessing = exports.onOrderPaymentDue = exports.onOrderInTransit = exports.onOrderDeliveredPartially = exports.onOrderDelivered = exports.onOrderCancelled = void 0;
4
4
  /**
5
5
  * 注文ステータス変更時処理
6
6
  */
@@ -8,6 +8,10 @@ const onOrderCancelled_1 = require("./onOrderStatusChanged/onOrderCancelled");
8
8
  Object.defineProperty(exports, "onOrderCancelled", { enumerable: true, get: function () { return onOrderCancelled_1.onOrderCancelled; } });
9
9
  const onOrderDelivered_1 = require("./onOrderStatusChanged/onOrderDelivered");
10
10
  Object.defineProperty(exports, "onOrderDelivered", { enumerable: true, get: function () { return onOrderDelivered_1.onOrderDelivered; } });
11
+ const onOrderDeliveredPartially_1 = require("./onOrderStatusChanged/onOrderDeliveredPartially");
12
+ Object.defineProperty(exports, "onOrderDeliveredPartially", { enumerable: true, get: function () { return onOrderDeliveredPartially_1.onOrderDeliveredPartially; } });
13
+ const onOrderInTransit_1 = require("./onOrderStatusChanged/onOrderInTransit");
14
+ Object.defineProperty(exports, "onOrderInTransit", { enumerable: true, get: function () { return onOrderInTransit_1.onOrderInTransit; } });
11
15
  const onOrderPaymentDue_1 = require("./onOrderStatusChanged/onOrderPaymentDue");
12
16
  Object.defineProperty(exports, "onOrderPaymentDue", { enumerable: true, get: function () { return onOrderPaymentDue_1.onOrderPaymentDue; } });
13
17
  const onOrderProcessing_1 = require("./onOrderStatusChanged/onOrderProcessing");
@@ -2,6 +2,7 @@ import type { MongoRepository as AcceptedOfferRepo } from '../../repo/acceptedOf
2
2
  import type { MongoRepository as AccountingReportRepo } from '../../repo/accountingReport';
3
3
  import type { MongoRepository as ActionRepo } from '../../repo/action';
4
4
  import type { MongoRepository as OrderRepo } from '../../repo/order';
5
+ import type { MongoRepository as OrderInTransactionRepo } from '../../repo/orderInTransaction';
5
6
  import type { MongoRepository as TaskRepo } from '../../repo/task';
6
7
  import type { MongoRepository as TransactionRepo } from '../../repo/transaction';
7
8
  import { IExternalOrder } from './onOrderStatusChanged';
@@ -39,6 +40,7 @@ declare function placeOrder(params: {
39
40
  accountingReport: AccountingReportRepo;
40
41
  action: ActionRepo;
41
42
  order: OrderRepo;
43
+ orderInTransaction: OrderInTransactionRepo;
42
44
  task: TaskRepo;
43
45
  transaction: TransactionRepo;
44
46
  }) => Promise<{
@@ -159,7 +159,7 @@ function placeOrderWithoutTransaction(params) {
159
159
  }
160
160
  throw error;
161
161
  }
162
- yield repos.action.complete({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
162
+ yield repos.action.completeWithVoid({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
163
163
  // 経理レポートを保管は外部注文の場合保留(2023-12-08~)
164
164
  // await createAccountingReportIfNotExist(order)({ accountingReport: repos.accountingReport });
165
165
  });
@@ -168,7 +168,6 @@ exports.placeOrderWithoutTransaction = placeOrderWithoutTransaction;
168
168
  /**
169
169
  * 注文を作成する
170
170
  */
171
- // tslint:disable-next-line:max-func-body-length
172
171
  function placeOrder(params) {
173
172
  // tslint:disable-next-line:max-func-body-length
174
173
  return (repos) => __awaiter(this, void 0, void 0, function* () {
@@ -182,6 +181,10 @@ function placeOrder(params) {
182
181
  confirmationNumber: params.object.confirmationNumber,
183
182
  orderNumber: params.object.orderNumber
184
183
  })({ transaction: repos.transaction });
184
+ // USE_ORDER_PAYMENT_DUE_ON_PLACED設定を廃止したので、必ずOrderPaymentDueのはず(2024-01-10~)
185
+ if (order.orderStatus !== factory.orderStatus.OrderPaymentDue) {
186
+ throw new factory.errors.ServiceUnavailable(`orderStatus must be ${factory.orderStatus.OrderPaymentDue}`);
187
+ }
185
188
  const maskedCustomer = (0, order_1.createMaskedCustomer)(order, { noProfile: true });
186
189
  const simpleOrder = {
187
190
  typeOf: order.typeOf,
@@ -224,6 +227,8 @@ function placeOrder(params) {
224
227
  if (completedActions.length === 0) {
225
228
  const action = yield repos.action.start(orderActionAttributes);
226
229
  try {
230
+ // orderInTransactionを考慮(2024-01-14~)
231
+ yield repos.orderInTransaction.placeOrder(order);
227
232
  yield repos.order.createIfNotExist(order);
228
233
  }
229
234
  catch (error) {
@@ -235,7 +240,7 @@ function placeOrder(params) {
235
240
  }
236
241
  throw error;
237
242
  }
238
- yield repos.action.complete({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
243
+ yield repos.action.completeWithVoid({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
239
244
  }
240
245
  if (params.useOnOrderStatusChanged) {
241
246
  // 経理レポートを保管
@@ -259,27 +264,26 @@ function placeOrder(params) {
259
264
  })({
260
265
  task: repos.task
261
266
  });
262
- }
263
- else if (order.orderStatus === factory.orderStatus.OrderProcessing) {
264
- // OrderPaymentDueをスキップしてOrderProcessingから開始する場合(2023-08-23~)
265
- // OrderPaymentDueに対する処理をまず強制的に実行する(2023-08-24~)
266
- yield (0, onOrderStatusChanged_1.onOrderPaymentDue)({
267
- order: {
268
- paymentMethods: order.paymentMethods,
269
- project: order.project,
270
- orderNumber: order.orderNumber,
271
- confirmationNumber: order.confirmationNumber,
272
- customer: order.customer,
273
- orderDate: order.orderDate,
274
- seller: order.seller,
275
- typeOf: order.typeOf,
276
- price: order.price,
277
- priceCurrency: order.priceCurrency,
278
- orderStatus: factory.orderStatus.OrderPaymentDue
279
- }
280
- })({
281
- task: repos.task
282
- });
267
+ // } else if (order.orderStatus === factory.orderStatus.OrderProcessing) {
268
+ // // OrderPaymentDueをスキップしてOrderProcessingから開始する場合(2023-08-23~)
269
+ // // OrderPaymentDueに対する処理をまず強制的に実行する(2023-08-24~)
270
+ // await onOrderPaymentDue({
271
+ // order: {
272
+ // paymentMethods: order.paymentMethods,
273
+ // project: order.project,
274
+ // orderNumber: order.orderNumber,
275
+ // confirmationNumber: order.confirmationNumber,
276
+ // customer: order.customer,
277
+ // orderDate: order.orderDate,
278
+ // seller: order.seller,
279
+ // typeOf: order.typeOf,
280
+ // price: order.price,
281
+ // priceCurrency: order.priceCurrency,
282
+ // orderStatus: factory.orderStatus.OrderPaymentDue
283
+ // }
284
+ // })({
285
+ // task: repos.task
286
+ // });
283
287
  }
284
288
  else {
285
289
  throw new factory.errors.NotImplemented(`placing an order on the status '${order.orderStatus}' not implemented`);
@@ -295,11 +299,6 @@ function placeOrder(params) {
295
299
  })(repos);
296
300
  }
297
301
  }
298
- // onOrderStatusChangedへ移行(2023-08-17~)
299
- // await onPlaceOrder({
300
- // object: order,
301
- // potentialActions: params.potentialActions
302
- // })(repos);
303
302
  return { order };
304
303
  });
305
304
  }
@@ -26,15 +26,24 @@ function returnOrder(params) {
26
26
  ? params.object.dateReturned
27
27
  : new Date();
28
28
  const returner = params.agent;
29
- let order = yield repos.order.findByOrderNumber({
29
+ const order = yield repos.order.findByOrderNumber({
30
30
  orderNumber,
31
31
  project: { id: params.project.id },
32
32
  inclusion: [
33
33
  'project', 'typeOf', 'orderNumber', 'dateReturned', 'id',
34
- 'customer', 'returner', 'seller', 'price', 'priceCurrency', 'orderDate'
34
+ 'customer', 'returner', 'seller', 'price', 'priceCurrency', 'orderDate', 'orderStatus'
35
35
  ],
36
36
  exclusion: []
37
37
  });
38
+ // 注文ステータス検証(2024-01-10~)
39
+ switch (order.orderStatus) {
40
+ case factory.orderStatus.OrderDelivered:
41
+ case factory.orderStatus.OrderReturned:
42
+ break;
43
+ default:
44
+ // OrderDeliveredへの処理が進行中と考えられるので、ひとまず失敗させてリトライに期待
45
+ throw new factory.errors.Argument('object.orderNumber', `orderStatus not returnable: ${order.orderStatus}`);
46
+ }
38
47
  // 返品取引検索
39
48
  const returnOrderTransactions = yield repos.transaction.search({
40
49
  limit: 1,
@@ -72,7 +81,7 @@ function returnOrder(params) {
72
81
  typeOf: factory.actionType.ReturnAction
73
82
  };
74
83
  let returnedOwnershipInfos = [];
75
- // アクション開始
84
+ let returnedOrder;
76
85
  const action = yield repos.action.start(returnOrderActionAttributes);
77
86
  try {
78
87
  returnedOwnershipInfos = yield processReturnOrder(order, dateReturned)({
@@ -80,7 +89,7 @@ function returnOrder(params) {
80
89
  ownershipInfo: repos.ownershipInfo
81
90
  });
82
91
  // 注文ステータス変更
83
- order = yield repos.order.returnOrder({
92
+ returnedOrder = yield repos.order.returnOrder({
84
93
  project: { id: order.project.id },
85
94
  orderNumber,
86
95
  dateReturned,
@@ -98,21 +107,21 @@ function returnOrder(params) {
98
107
  throw error;
99
108
  }
100
109
  const result = returnedOwnershipInfos;
101
- yield repos.action.complete({ typeOf: action.typeOf, id: action.id, result: result });
110
+ yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result });
102
111
  if (params.useOnOrderStatusChanged) {
103
112
  yield (0, onOrderStatusChanged_1.onOrderReturned)({
104
113
  order: {
105
- project: order.project,
106
- typeOf: order.typeOf,
107
- orderNumber: order.orderNumber,
108
- dateReturned: order.dateReturned,
109
- id: order.id,
110
- customer: order.customer,
111
- returner: order.returner,
112
- seller: order.seller,
113
- price: order.price,
114
- priceCurrency: order.priceCurrency,
115
- orderDate: order.orderDate,
114
+ project: returnedOrder.project,
115
+ typeOf: returnedOrder.typeOf,
116
+ orderNumber: returnedOrder.orderNumber,
117
+ dateReturned: returnedOrder.dateReturned,
118
+ id: returnedOrder.id,
119
+ customer: returnedOrder.customer,
120
+ returner: returnedOrder.returner,
121
+ seller: returnedOrder.seller,
122
+ price: returnedOrder.price,
123
+ priceCurrency: returnedOrder.priceCurrency,
124
+ orderDate: returnedOrder.orderDate,
116
125
  orderStatus: factory.orderStatus.OrderReturned
117
126
  },
118
127
  returnOrderTransaction
@@ -24,6 +24,11 @@ declare function sendOrder(params: {
24
24
  object: {
25
25
  confirmationNumber: string;
26
26
  orderNumber: string;
27
+ previousOrderStatus: factory.orderStatus.OrderProcessing | factory.orderStatus.OrderInTransit;
28
+ acceptedOffers: {
29
+ limit: number;
30
+ page: number;
31
+ };
27
32
  };
28
33
  useOnOrderStatusChanged: boolean;
29
34
  }): ISendOperation<void>;