@chevre/domain 21.8.0-alpha.4 → 21.8.0-alpha.41

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 (87) hide show
  1. package/example/src/chevre/countOffers.ts +32 -0
  2. package/example/src/chevre/importOffersFromCOA.ts +7 -1
  3. package/example/src/chevre/migrateAggregateOffers.ts +75 -0
  4. package/example/src/chevre/migrateOrderPaymentMethodIdentifier.ts +81 -0
  5. package/example/src/chevre/migratePayTransactionPaymentMethodId.ts +72 -0
  6. package/example/src/chevre/migratePayTransactionPaymentMethodIdentifier.ts +78 -0
  7. package/example/src/chevre/processPay.ts +3 -4
  8. package/example/src/chevre/publishPermitOwnershipInfoToken.ts +56 -0
  9. package/example/src/chevre/pullAddOnsFromOffer.ts +26 -0
  10. package/example/src/chevre/searchOffersByCatalog.ts +9 -4
  11. package/example/src/chevre/searchOffersFromAggregateOffer.ts +167 -0
  12. package/example/src/chevre/sync2aggregateOffer.ts +27 -0
  13. package/example/src/chevre/syncAggregateOffer.ts +25 -0
  14. package/lib/chevre/repo/assetTransaction.d.ts +16 -1
  15. package/lib/chevre/repo/assetTransaction.js +54 -2
  16. package/lib/chevre/repo/mongoose/schemas/aggregateOffer.d.ts +71 -0
  17. package/lib/chevre/repo/mongoose/schemas/aggregateOffer.js +176 -0
  18. package/lib/chevre/repo/mongoose/schemas/offer.js +1 -0
  19. package/lib/chevre/repo/mongoose/schemas/order.d.ts +3 -0
  20. package/lib/chevre/repo/mongoose/schemas/order.js +1 -0
  21. package/lib/chevre/repo/mongoose/schemas/task.d.ts +3 -0
  22. package/lib/chevre/repo/mongoose/schemas/task.js +8 -0
  23. package/lib/chevre/repo/offer.d.ts +71 -14
  24. package/lib/chevre/repo/offer.js +1061 -87
  25. package/lib/chevre/repo/order.d.ts +15 -0
  26. package/lib/chevre/repo/order.js +34 -1
  27. package/lib/chevre/repo/task.d.ts +7 -1
  28. package/lib/chevre/repo/task.js +100 -0
  29. package/lib/chevre/service/aggregation/event/aggregateScreeningEvent.js +2 -2
  30. package/lib/chevre/service/aggregation/event/aggregateUseActionsOnEvent.js +2 -2
  31. package/lib/chevre/service/assetTransaction/pay/account/validation.js +2 -2
  32. package/lib/chevre/service/assetTransaction/pay/factory.js +26 -18
  33. package/lib/chevre/service/assetTransaction/pay/potentialActions.js +3 -3
  34. package/lib/chevre/service/assetTransaction/pay.js +65 -46
  35. package/lib/chevre/service/assetTransaction/refund/factory.js +8 -2
  36. package/lib/chevre/service/assetTransaction/reserve.js +105 -31
  37. package/lib/chevre/service/delivery.js +17 -0
  38. package/lib/chevre/service/offer/event/authorize.js +18 -19
  39. package/lib/chevre/service/offer/event/factory.js +8 -8
  40. package/lib/chevre/service/offer/event/importFromCOA.d.ts +2 -0
  41. package/lib/chevre/service/offer/event/searchEventTicketOffers.js +2 -2
  42. package/lib/chevre/service/offer/event/voidTransaction.js +7 -2
  43. package/lib/chevre/service/offer/product/searchProductOffers.js +1 -1
  44. package/lib/chevre/service/order/confirmPayTransaction.d.ts +0 -2
  45. package/lib/chevre/service/order/confirmPayTransaction.js +29 -40
  46. package/lib/chevre/service/order/onAssetTransactionStatusChanged.d.ts +27 -0
  47. package/lib/chevre/service/order/onAssetTransactionStatusChanged.js +226 -0
  48. package/lib/chevre/service/order/onOrderStatusChanged/factory.d.ts +8 -6
  49. package/lib/chevre/service/order/onOrderStatusChanged/factory.js +80 -57
  50. package/lib/chevre/service/order/onOrderStatusChanged.js +104 -81
  51. package/lib/chevre/service/order/payOrder.d.ts +2 -10
  52. package/lib/chevre/service/order/payOrder.js +4 -45
  53. package/lib/chevre/service/order/placeOrder.js +11 -13
  54. package/lib/chevre/service/order.d.ts +3 -1
  55. package/lib/chevre/service/order.js +6 -2
  56. package/lib/chevre/service/payment/any/factory.js +33 -8
  57. package/lib/chevre/service/payment/any.js +30 -21
  58. package/lib/chevre/service/payment/creditCard.js +12 -12
  59. package/lib/chevre/service/payment/movieTicket/validation.js +2 -2
  60. package/lib/chevre/service/payment/movieTicket.js +10 -11
  61. package/lib/chevre/service/payment/paymentCard.js +9 -12
  62. package/lib/chevre/service/project.js +1 -1
  63. package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.d.ts +3 -0
  64. package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.js +1 -4
  65. package/lib/chevre/service/reserve/potentialActions/onReservationCheckedIn.js +1 -5
  66. package/lib/chevre/service/reserve/potentialActions/onReservationUsed.d.ts +3 -0
  67. package/lib/chevre/service/reserve/potentialActions/onReservationUsed.js +1 -4
  68. package/lib/chevre/service/task/confirmPayTransaction.js +1 -3
  69. package/lib/chevre/service/task/importOffersFromCOA.js +3 -0
  70. package/lib/chevre/service/task/onAssetTransactionStatusChanged.d.ts +6 -0
  71. package/lib/chevre/service/task/onAssetTransactionStatusChanged.js +37 -0
  72. package/lib/chevre/service/task/onOrderPaymentCompleted.d.ts +6 -0
  73. package/lib/chevre/service/task/onOrderPaymentCompleted.js +35 -0
  74. package/lib/chevre/service/task/returnPayTransaction.js +8 -3
  75. package/lib/chevre/service/task/syncAggregateOffer.d.ts +7 -0
  76. package/lib/chevre/service/task/syncAggregateOffer.js +23 -0
  77. package/lib/chevre/service/transaction/placeOrderInProgress/result.js +32 -16
  78. package/lib/chevre/service/transaction/placeOrderInProgress/validation/validateMovieTicket.js +13 -11
  79. package/lib/chevre/service/transaction/placeOrderInProgress/validation.js +53 -17
  80. package/lib/chevre/service/transaction/placeOrderInProgress.js +4 -1
  81. package/lib/chevre/service/transaction/returnOrder/potentialActions/returnPaymentMethod.js +7 -6
  82. package/lib/chevre/service/transaction/returnOrder.js +5 -1
  83. package/lib/chevre/settings.d.ts +4 -2
  84. package/lib/chevre/settings.js +5 -5
  85. package/package.json +3 -3
  86. package/example/src/chevre/migrateAuthorizePaymentActionResult.ts +0 -83
  87. package/example/src/chevre/migrateEventOrganizer.ts +0 -154
@@ -13,18 +13,20 @@ exports.onOrderStatusChanged = void 0;
13
13
  /**
14
14
  * 注文ステータス変更時処理
15
15
  */
16
+ const createDebug = require("debug");
16
17
  const google_libphonenumber_1 = require("google-libphonenumber");
17
- const moment = require("moment");
18
18
  const factory = require("../../factory");
19
19
  const order_1 = require("../../factory/order");
20
20
  const product_1 = require("../offer/product");
21
21
  const factory_1 = require("./onOrderStatusChanged/factory");
22
+ const debug = createDebug('chevre-domain:service:order');
22
23
  const USE_CONFIRM_REGISTER_SERVICE_TRANSACTION = process.env.USE_CONFIRM_REGISTER_SERVICE_TRANSACTION === '1';
23
24
  const TOKEN_EXPIRES_IN = 604800;
24
25
  function onOrderStatusChanged(params) {
25
26
  // tslint:disable-next-line:max-func-body-length
26
27
  return (repos) => __awaiter(this, void 0, void 0, function* () {
27
28
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
29
+ debug('onOrderStatusChanged called.', params.order.orderNumber, params.order.orderStatus, params.order.orderDate);
28
30
  let tasks = [];
29
31
  const maskedCustomer = (0, order_1.createMaskedCustomer)(params.order, { noProfile: true });
30
32
  const simpleOrder = {
@@ -88,21 +90,23 @@ function onOrderStatusChanged(params) {
88
90
  tasks = [
89
91
  // 注文作成時のみトークン付加
90
92
  ...(0, factory_1.createInformTasks)(orderWithToken),
91
- ...yield createConfirmPayTransactionTasks(params.order, simpleOrder)(repos),
92
- ...yield createConfirmReserveTransactionTasks(params.order, simpleOrder)(repos),
93
- ...yield createConfirmRegisterServiceTransactionTasks(params.order, simpleOrder)(repos),
93
+ // 決済取引確定タスク作成はOrderPaymentDueへ完全移行(2023-08-26~)
94
+ // ...await createConfirmPayTransactionTasks(params.order, simpleOrder)(repos),
95
+ // createConfirmReserveTransactionTasksIfNotExistへ移行(2023-08-25~)
96
+ // ...await createConfirmReserveTransactionTasks(params.order, simpleOrder)(repos),
97
+ ...yield createConfirmRegisterServiceTransactionTasks(params.order, simpleOrder)(repos)
94
98
  // 取引のpotentialActionsを適用(2023-08-17~)
95
- ...(0, factory_1.createOnPlaceOrderTasksByTransaction)({
96
- object: params.order,
97
- // potentialActions: params.potentialActions
98
- potentialActions: (_h = (_g = (_f = params.placeOrderTransaction) === null || _f === void 0 ? void 0 : _f.potentialActions) === null || _g === void 0 ? void 0 : _g.order) === null || _h === void 0 ? void 0 : _h.potentialActions
99
- })
99
+ // createGivePointAwardTaskIfNotExistへ移行(2023-09-01~)
100
+ // ...createOnPlaceOrderTasksByTransaction({
101
+ // object: params.order,
102
+ // potentialActions: params.placeOrderTransaction?.potentialActions?.order?.potentialActions
103
+ // })
100
104
  ];
101
105
  break;
102
106
  case factory.orderStatus.OrderReturned:
103
- const potentialActionsByTransaction = (_m = (_l = (_k = (_j = params.returnOrderTransaction) === null || _j === void 0 ? void 0 : _j.potentialActions) === null || _k === void 0 ? void 0 : _k.returnOrder) === null || _l === void 0 ? void 0 : _l.find((returnOrderActionByTransaction) => {
107
+ const potentialActionsByTransaction = (_j = (_h = (_g = (_f = params.returnOrderTransaction) === null || _f === void 0 ? void 0 : _f.potentialActions) === null || _g === void 0 ? void 0 : _g.returnOrder) === null || _h === void 0 ? void 0 : _h.find((returnOrderActionByTransaction) => {
104
108
  return returnOrderActionByTransaction.object.orderNumber === params.order.orderNumber;
105
- })) === null || _m === void 0 ? void 0 : _m.potentialActions;
109
+ })) === null || _j === void 0 ? void 0 : _j.potentialActions;
106
110
  tasks = [
107
111
  ...(0, factory_1.createInformTasks)(params.order),
108
112
  ...createReturnReserveTransactionTasks(params.order, simpleOrder),
@@ -112,14 +116,26 @@ function onOrderStatusChanged(params) {
112
116
  ...(0, factory_1.createOnOrderReturnedTasksByTransaction)({ potentialActions: potentialActionsByTransaction })
113
117
  ];
114
118
  break;
119
+ // OrderCancelled追加(2023-08-30~)
120
+ case factory.orderStatus.OrderCancelled:
121
+ // 注文取引中止時と同様の処理か
122
+ tasks = [
123
+ ...(0, factory_1.createOnOrderCancelledTasksByTransaction)({ transaction: params.placeOrderTransaction })
124
+ ];
125
+ break;
115
126
  default:
116
127
  }
117
128
  yield repos.task.saveMany(tasks, { emitImmediately: true });
118
129
  switch (params.order.orderStatus) {
119
130
  case factory.orderStatus.OrderProcessing:
120
- // 冗長なsendOrderタスク作成を回避(2023-08-24~)
131
+ // 冗長なconfirmReserveTransactionタスク作成を回避(2023-08-25~)
132
+ yield createConfirmReserveTransactionTasksIfNotExist(params.order, simpleOrder)(repos);
133
+ // 冗長なsendOrderタスク作成を回避(2023-08-25~)
121
134
  yield createSendOrderTransactionTaskIfNotExist({
122
135
  object: params.order,
136
+ potentialActions: (_m = (_l = (_k = params.placeOrderTransaction) === null || _k === void 0 ? void 0 : _k.potentialActions) === null || _l === void 0 ? void 0 : _l.order) === null || _m === void 0 ? void 0 : _m.potentialActions
137
+ })(repos);
138
+ yield createGivePointAwardTaskIfNotExist({
123
139
  potentialActions: (_q = (_p = (_o = params.placeOrderTransaction) === null || _o === void 0 ? void 0 : _o.potentialActions) === null || _p === void 0 ? void 0 : _p.order) === null || _q === void 0 ? void 0 : _q.potentialActions
124
140
  })(repos);
125
141
  break;
@@ -130,16 +146,13 @@ function onOrderStatusChanged(params) {
130
146
  exports.onOrderStatusChanged = onOrderStatusChanged;
131
147
  function createConfirmPayTransactionTasks(order, simpleOrder) {
132
148
  return (repos) => __awaiter(this, void 0, void 0, function* () {
133
- const taskRunsAt = moment(order.orderDate)
134
- .toDate();
149
+ const taskRunsAt = new Date();
135
150
  const tasks = [];
136
151
  yield Promise.all(order.paymentMethods.map((invoice) => __awaiter(this, void 0, void 0, function* () {
137
- // tslint:disable-next-line:no-suspicious-comment
138
- // TODO 注文にpaymentStatusを保証した後に実装する
139
- // PaymentAutomaticallyAppliedであれば、自動決済処理を実行
140
- // if (invoice.paymentStatus !== factory.paymentStatusType.PaymentAutomaticallyApplied) {
141
- // return;
142
- // }
152
+ // PaymentAutomaticallyAppliedであれば、自動決済処理を実行(2023-08-24~)
153
+ if (invoice.paymentStatus !== factory.paymentStatusType.PaymentAutomaticallyApplied) {
154
+ return;
155
+ }
143
156
  // 冗長なタスク作成を回避
144
157
  const existingTasks = yield repos.task.search({
145
158
  limit: 1,
@@ -183,69 +196,49 @@ function createConfirmPayTransactionTasks(order, simpleOrder) {
183
196
  return tasks;
184
197
  });
185
198
  }
186
- const COA_TASK_DELAY_IN_SECONDS = 0;
187
- function createConfirmReserveTransactionTasks(order, simpleOrder) {
199
+ // const COA_TASK_DELAY_IN_SECONDS = 0;
200
+ function createConfirmReserveTransactionTasksIfNotExist(order, simpleOrder) {
188
201
  return (repos) => __awaiter(this, void 0, void 0, function* () {
189
- const taskRunsAt = moment(order.orderDate)
190
- .toDate();
191
- const taskRunsAt4coa = moment(order.orderDate)
192
- .add(COA_TASK_DELAY_IN_SECONDS, 'seconds')
193
- .toDate();
202
+ const taskRunsAt = new Date();
203
+ const taskRunsAt4coa = new Date();
204
+ // const taskRunsAt4coa = moment(order.orderDate)
205
+ // .add(COA_TASK_DELAY_IN_SECONDS, 'seconds')
206
+ // .toDate();
194
207
  const confirmObjects = [
195
208
  ...(0, factory_1.createConfirmReservationActionObject4ChevreByOrder)({ order }),
196
209
  ...(0, factory_1.createConfirmReservationActionObject4COAByOrder)({ order })
197
210
  ];
198
- const tasks = [];
199
211
  yield Promise.all(confirmObjects.map((confirmObject) => __awaiter(this, void 0, void 0, function* () {
200
- // 冗長なタスク作成を回避
201
- const existingTasks = yield repos.task.search({
202
- limit: 1,
203
- page: 1,
204
- project: { id: { $eq: order.project.id } },
205
- name: factory.taskName.ConfirmReserveTransaction,
206
- data: {
207
- object: { transactionNumber: { $eq: confirmObject.transactionNumber } },
208
- purpose: { orderNumber: { $eq: order.orderNumber } }
212
+ const data = {
213
+ project: order.project,
214
+ typeOf: factory.actionType.ConfirmAction,
215
+ object: confirmObject,
216
+ agent: order.project,
217
+ purpose: simpleOrder,
218
+ instrument: {
219
+ typeOf: 'WebAPI',
220
+ identifier: (confirmObject.typeOf === 'COAReserveTransaction')
221
+ ? factory.service.webAPI.Identifier.COA
222
+ : factory.service.webAPI.Identifier.Chevre
209
223
  }
210
- }, {
211
- data: 0, executionResults: 0, name: 0, numberOfTried: 0,
212
- remainingNumberOfTries: 0, runsAt: 0, status: 0
213
- });
214
- if (existingTasks.length === 0) {
215
- const data = {
216
- project: order.project,
217
- typeOf: factory.actionType.ConfirmAction,
218
- object: confirmObject,
219
- agent: order.project,
220
- purpose: simpleOrder,
221
- instrument: {
222
- typeOf: 'WebAPI',
223
- identifier: (confirmObject.typeOf === 'COAReserveTransaction')
224
- ? factory.service.webAPI.Identifier.COA
225
- : factory.service.webAPI.Identifier.Chevre
226
- }
227
- };
228
- tasks.push({
229
- project: order.project,
230
- name: factory.taskName.ConfirmReserveTransaction,
231
- status: factory.taskStatus.Ready,
232
- runsAt: (confirmObject.typeOf === 'COAReserveTransaction')
233
- ? taskRunsAt4coa
234
- : taskRunsAt,
235
- remainingNumberOfTries: 10,
236
- numberOfTried: 0,
237
- executionResults: [],
238
- data
239
- });
240
- }
224
+ };
225
+ const confirmReserveTransactionTask = {
226
+ project: order.project,
227
+ name: factory.taskName.ConfirmReserveTransaction,
228
+ status: factory.taskStatus.Ready,
229
+ runsAt: (confirmObject.typeOf === 'COAReserveTransaction') ? taskRunsAt4coa : taskRunsAt,
230
+ remainingNumberOfTries: 10,
231
+ numberOfTried: 0,
232
+ executionResults: [],
233
+ data
234
+ };
235
+ yield repos.task.createConfirmReserveTransactionTaskIfNotExist(confirmReserveTransactionTask, { emitImmediately: true });
241
236
  })));
242
- return tasks;
243
237
  });
244
238
  }
245
239
  function createConfirmRegisterServiceTransactionTasks(order, simpleOrder) {
246
240
  return (repos) => __awaiter(this, void 0, void 0, function* () {
247
- const taskRunsAt = moment(order.orderDate)
248
- .toDate();
241
+ const taskRunsAt = new Date();
249
242
  if (USE_CONFIRM_REGISTER_SERVICE_TRANSACTION) {
250
243
  const confirmObjects = (0, factory_1.createConfirmRegisterServiceActionObjectByOrder)({ order });
251
244
  const tasks = [];
@@ -319,14 +312,43 @@ function createSendOrderTransactionTaskIfNotExist(params) {
319
312
  }
320
313
  });
321
314
  }
322
- const RETURN_COA_TASK_DELAY_IN_SECONDS = 0;
315
+ function createGivePointAwardTaskIfNotExist(params) {
316
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
317
+ var _a;
318
+ const now = new Date();
319
+ const givePointAwardsByTransaction = (_a = params.potentialActions) === null || _a === void 0 ? void 0 : _a.givePointAward;
320
+ if (Array.isArray(givePointAwardsByTransaction)) {
321
+ for (const givePointAwardByTransaction of givePointAwardsByTransaction) {
322
+ let taskIdentifier = `${givePointAwardByTransaction.project.id}:${factory.taskName.GivePointAward}:${Date.now()}`;
323
+ if (typeof givePointAwardByTransaction.object.identifier === 'string'
324
+ && givePointAwardByTransaction.object.identifier.length > 0) {
325
+ taskIdentifier = `${givePointAwardByTransaction.project.id}:${factory.taskName.GivePointAward}:${givePointAwardByTransaction.object.identifier}`;
326
+ }
327
+ const givePointAwardTask = {
328
+ identifier: taskIdentifier,
329
+ project: givePointAwardByTransaction.project,
330
+ name: factory.taskName.GivePointAward,
331
+ status: factory.taskStatus.Ready,
332
+ runsAt: now,
333
+ remainingNumberOfTries: 10,
334
+ numberOfTried: 0,
335
+ executionResults: [],
336
+ data: givePointAwardByTransaction
337
+ };
338
+ // 冗長なgivePointAwardタスク作成を回避(2023-09-01~)
339
+ yield repos.task.createIfNotExistByIdentifier(givePointAwardTask, { emitImmediately: true });
340
+ }
341
+ }
342
+ });
343
+ }
344
+ // const RETURN_COA_TASK_DELAY_IN_SECONDS = 0;
323
345
  function createReturnReserveTransactionTasks(order, simpleOrder) {
324
346
  var _a, _b;
325
- const taskRunsAt = moment(order.dateReturned)
326
- .toDate();
327
- const taskRunsAt4coa = moment(order.dateReturned)
328
- .add(RETURN_COA_TASK_DELAY_IN_SECONDS, 'seconds')
329
- .toDate();
347
+ const taskRunsAt = new Date();
348
+ const taskRunsAt4coa = new Date();
349
+ // const taskRunsAt4coa = moment(order.dateReturned)
350
+ // .add(RETURN_COA_TASK_DELAY_IN_SECONDS, 'seconds')
351
+ // .toDate();
330
352
  const tasks = [];
331
353
  const returnActionRecipient = {
332
354
  typeOf: order.seller.typeOf,
@@ -401,12 +423,13 @@ function createReturnReserveTransactionTasks(order, simpleOrder) {
401
423
  }
402
424
  return tasks;
403
425
  }
404
- const RETURN_PAY_TASK_DELAY_IN_SECONDS = 0;
426
+ // const RETURN_PAY_TASK_DELAY_IN_SECONDS = 0;
405
427
  function createReturnPayTransactionTasks(order, __, returnOrderTransaction) {
406
428
  var _a, _b;
407
- const taskRunsAt = moment(order.dateReturned)
408
- .add(RETURN_PAY_TASK_DELAY_IN_SECONDS, 'seconds')
409
- .toDate();
429
+ const taskRunsAt = new Date();
430
+ // const taskRunsAt = moment(order.dateReturned)
431
+ // .add(RETURN_PAY_TASK_DELAY_IN_SECONDS, 'seconds')
432
+ // .toDate();
410
433
  const tasks = [];
411
434
  const returnOrderPotentialActions = (_b = (_a = returnOrderTransaction === null || returnOrderTransaction === void 0 ? void 0 : returnOrderTransaction.potentialActions) === null || _a === void 0 ? void 0 : _a.returnOrder.find((action) => action.object.orderNumber === order.orderNumber)) === null || _b === void 0 ? void 0 : _b.potentialActions;
412
435
  const returnPayActionsByReturnOrderTransaction = returnOrderPotentialActions === null || returnOrderPotentialActions === void 0 ? void 0 : returnOrderPotentialActions.returnPaymentMethod;
@@ -2,19 +2,11 @@ import { RedisRepository as RegisterServiceInProgressRepo } from '../../repo/act
2
2
  import { MongoRepository as OrderRepo } from '../../repo/order';
3
3
  import { MongoRepository as TaskRepo } from '../../repo/task';
4
4
  import { MongoRepository as TransactionRepo } from '../../repo/transaction';
5
+ import * as factory from '../../factory';
5
6
  /**
6
7
  * 注文を決済する
7
8
  */
8
- declare function payOrder(params: {
9
- project: {
10
- id: string;
11
- };
12
- object: {
13
- confirmationNumber: string;
14
- orderNumber: string;
15
- };
16
- useOnOrderStatusChanged: boolean;
17
- }): (repos: {
9
+ declare function payOrder(params: factory.task.IData<factory.taskName.OnOrderPaymentCompleted>): (repos: {
18
10
  order: OrderRepo;
19
11
  registerActionInProgress: RegisterServiceInProgressRepo;
20
12
  task: TaskRepo;
@@ -10,8 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.payOrder = void 0;
13
- const findPlaceOrderTransaction_1 = require("./findPlaceOrderTransaction");
14
- const onOrderStatusChanged_1 = require("./onOrderStatusChanged");
13
+ const onAssetTransactionStatusChanged_1 = require("./onAssetTransactionStatusChanged");
15
14
  const factory = require("../../factory");
16
15
  /**
17
16
  * 注文を決済する
@@ -23,52 +22,12 @@ function payOrder(params) {
23
22
  }
24
23
  const orderNumber = params.object.orderNumber;
25
24
  const confirmationNumber = params.object.confirmationNumber;
26
- const placeOrderTransaction = yield (0, findPlaceOrderTransaction_1.findPlaceOrderTransaction)({
25
+ yield (0, onAssetTransactionStatusChanged_1.paymentDue2Processing)({
27
26
  project: { id: params.project.id },
28
27
  confirmationNumber,
29
- orderNumber
30
- })({ transaction: repos.transaction });
31
- let order = yield repos.order.findByOrderNumber({
32
28
  orderNumber,
33
- project: { id: params.project.id },
34
- inclusion: [],
35
- exclusion: []
36
- });
37
- try {
38
- order = yield repos.order.changeStatus({
39
- project: { id: order.project.id },
40
- orderNumber,
41
- orderStatus: factory.orderStatus.OrderProcessing,
42
- previousOrderStatus: factory.orderStatus.OrderPaymentDue
43
- });
44
- }
45
- catch (error) {
46
- let throwsError = true;
47
- // すでにステータスが煤でいた場合、OrderPaymentDue->OrderProcessingの処理自体は成功しているので、後処理を続行する
48
- order = yield repos.order.findByOrderNumber({
49
- orderNumber: params.object.orderNumber,
50
- project: { id: params.project.id },
51
- inclusion: [],
52
- exclusion: []
53
- });
54
- if (order.orderStatus === factory.orderStatus.OrderDelivered
55
- || order.orderStatus === factory.orderStatus.OrderReturned) {
56
- throwsError = false;
57
- }
58
- if (throwsError) {
59
- throw error;
60
- }
61
- }
62
- if (params.useOnOrderStatusChanged) {
63
- yield (0, onOrderStatusChanged_1.onOrderStatusChanged)({
64
- order: Object.assign(Object.assign({}, order), { orderStatus: factory.orderStatus.OrderProcessing // 強制的にOrderProcessingとして処理する
65
- }),
66
- placeOrderTransaction
67
- })({
68
- registerActionInProgress: repos.registerActionInProgress,
69
- task: repos.task
70
- });
71
- }
29
+ useOnOrderStatusChanged: params.useOnOrderStatusChanged
30
+ })(repos);
72
31
  });
73
32
  }
74
33
  exports.payOrder = payOrder;
@@ -14,8 +14,8 @@ const moment = require("moment");
14
14
  const order_1 = require("../../factory/order");
15
15
  const createAccountingReportIfNotExist_1 = require("./createAccountingReportIfNotExist");
16
16
  const findPlaceOrderTransaction_1 = require("./findPlaceOrderTransaction");
17
+ const onAssetTransactionStatusChanged_1 = require("./onAssetTransactionStatusChanged");
17
18
  const onOrderStatusChanged_1 = require("./onOrderStatusChanged");
18
- const payOrder_1 = require("./payOrder");
19
19
  const factory = require("../../factory");
20
20
  function createOrder(params) {
21
21
  // 必要な属性についてDate型に変換(でないと検索クエリを効率的に使えない)
@@ -241,22 +241,20 @@ function placeOrder(params) {
241
241
  registerActionInProgress: repos.registerActionInProgress,
242
242
  task: repos.task
243
243
  });
244
- // paymentMethods.length: 0の場合を考慮(2023-08-24~)
245
- if (order.paymentMethods.length === 0) {
246
- // paymentMethods.length: 0の場合に、confirmPayTransactionは実行されないので、ここで強制的にpayOrderを実行する必要がある
247
- yield (0, payOrder_1.payOrder)({
248
- project: { id: order.project.id },
249
- object: {
250
- confirmationNumber: order.confirmationNumber,
251
- orderNumber: order.orderNumber
252
- },
253
- useOnOrderStatusChanged: params.useOnOrderStatusChanged
254
- })(repos);
255
- }
256
244
  }
257
245
  else {
258
246
  throw new factory.errors.NotImplemented(`placing an order on the status '${order.orderStatus}' not implemented`);
259
247
  }
248
+ // paymentMethods.length: 0の場合を考慮(2023-08-24~)
249
+ if (order.paymentMethods.length === 0) {
250
+ // paymentMethods.length: 0の場合に、confirmPayTransactionは実行されないので、ここで強制的にpaymentDue2Processingを実行する必要がある
251
+ yield (0, onAssetTransactionStatusChanged_1.paymentDue2Processing)({
252
+ project: { id: order.project.id },
253
+ confirmationNumber: order.confirmationNumber,
254
+ orderNumber: order.orderNumber,
255
+ useOnOrderStatusChanged: params.useOnOrderStatusChanged === true
256
+ })(repos);
257
+ }
260
258
  }
261
259
  // onOrderStatusChangedへ移行(2023-08-17~)
262
260
  // await onPlaceOrder({
@@ -3,8 +3,10 @@
3
3
  */
4
4
  import { confirmPayTransaction } from './order/confirmPayTransaction';
5
5
  import { deleteOrder } from './order/deleteOrder';
6
+ import { onAssetTransactionStatusChanged, paymentDue2Processing } from './order/onAssetTransactionStatusChanged';
6
7
  import { onOrderStatusChanged } from './order/onOrderStatusChanged';
7
8
  import { onOrderUpdated } from './order/onOrderUpdated';
9
+ import { payOrder } from './order/payOrder';
8
10
  import { placeOrder, placeOrderWithoutTransaction } from './order/placeOrder';
9
11
  import { sendOrder } from './order/sendOrder';
10
- export { confirmPayTransaction, deleteOrder, onOrderStatusChanged, onOrderUpdated, placeOrder, placeOrderWithoutTransaction, sendOrder };
12
+ export { confirmPayTransaction, deleteOrder, onAssetTransactionStatusChanged, onOrderStatusChanged, onOrderUpdated, paymentDue2Processing, payOrder, placeOrder, placeOrderWithoutTransaction, sendOrder };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.onOrderUpdated = exports.onOrderStatusChanged = exports.deleteOrder = exports.confirmPayTransaction = void 0;
3
+ exports.sendOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.payOrder = exports.paymentDue2Processing = exports.onOrderUpdated = exports.onOrderStatusChanged = exports.onAssetTransactionStatusChanged = exports.deleteOrder = exports.confirmPayTransaction = void 0;
4
4
  /**
5
5
  * 注文サービス
6
6
  */
@@ -8,13 +8,17 @@ const confirmPayTransaction_1 = require("./order/confirmPayTransaction");
8
8
  Object.defineProperty(exports, "confirmPayTransaction", { enumerable: true, get: function () { return confirmPayTransaction_1.confirmPayTransaction; } });
9
9
  const deleteOrder_1 = require("./order/deleteOrder");
10
10
  Object.defineProperty(exports, "deleteOrder", { enumerable: true, get: function () { return deleteOrder_1.deleteOrder; } });
11
+ const onAssetTransactionStatusChanged_1 = require("./order/onAssetTransactionStatusChanged");
12
+ Object.defineProperty(exports, "onAssetTransactionStatusChanged", { enumerable: true, get: function () { return onAssetTransactionStatusChanged_1.onAssetTransactionStatusChanged; } });
13
+ Object.defineProperty(exports, "paymentDue2Processing", { enumerable: true, get: function () { return onAssetTransactionStatusChanged_1.paymentDue2Processing; } });
11
14
  const onOrderStatusChanged_1 = require("./order/onOrderStatusChanged");
12
15
  Object.defineProperty(exports, "onOrderStatusChanged", { enumerable: true, get: function () { return onOrderStatusChanged_1.onOrderStatusChanged; } });
13
16
  const onOrderUpdated_1 = require("./order/onOrderUpdated");
14
17
  Object.defineProperty(exports, "onOrderUpdated", { enumerable: true, get: function () { return onOrderUpdated_1.onOrderUpdated; } });
18
+ const payOrder_1 = require("./order/payOrder");
19
+ Object.defineProperty(exports, "payOrder", { enumerable: true, get: function () { return payOrder_1.payOrder; } });
15
20
  const placeOrder_1 = require("./order/placeOrder");
16
21
  Object.defineProperty(exports, "placeOrder", { enumerable: true, get: function () { return placeOrder_1.placeOrder; } });
17
22
  Object.defineProperty(exports, "placeOrderWithoutTransaction", { enumerable: true, get: function () { return placeOrder_1.placeOrderWithoutTransaction; } });
18
- // import { returnOrder } from './order/returnOrder';
19
23
  const sendOrder_1 = require("./order/sendOrder");
20
24
  Object.defineProperty(exports, "sendOrder", { enumerable: true, get: function () { return sendOrder_1.sendOrder; } });
@@ -3,11 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.optimizeAction4inform = exports.createAuthorizeResult = exports.creatPayTransactionStartParams = void 0;
4
4
  const moment = require("moment");
5
5
  const factory = require("../../../factory");
6
+ const settings_1 = require("../../../settings");
6
7
  function creatPayTransactionStartParams(params) {
7
8
  var _a, _b, _c, _d;
8
- const expires = moment(params.transaction.expires)
9
+ let expires = moment(params.transaction.expires)
9
10
  .add(1, 'month')
10
11
  .toDate(); // 余裕を持って
12
+ // 実験的にPaymentDueに対応(2023-08-30~)
13
+ if (params.paymentServiceType === factory.service.paymentService.PaymentServiceType.FaceToFace) {
14
+ if (params.object.paymentMethod.length === 0) {
15
+ expires = moment(params.transaction.expires)
16
+ .add(1, 'hour')
17
+ .toDate();
18
+ }
19
+ }
11
20
  const confirmationNumber = params.transaction.object.confirmationNumber;
12
21
  const issuedThroughId = (_a = params.object.issuedThrough) === null || _a === void 0 ? void 0 : _a.id;
13
22
  const accountId = (typeof params.accountId === 'string')
@@ -39,7 +48,9 @@ function creatPayTransactionStartParams(params) {
39
48
  typeOf: params.paymentServiceType,
40
49
  // 決済サービスIDを連携(2022-04-12~)
41
50
  id: issuedThroughId,
42
- paymentMethod: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ typeOf: params.object.paymentMethod, amount: params.object.amount, additionalProperty: (Array.isArray(params.object.additionalProperty)) ? params.object.additionalProperty : [] }, (typeof params.object.method === 'string') ? { method: params.object.method } : undefined), (typeof params.object.name === 'string') ? { name: params.object.name } : undefined), (typeof accountId === 'string') ? { accountId } : undefined), (typeof params.object.description === 'string') ? { description: params.object.description } : undefined), (typeof params.object.fromLocation === 'string') ? { fromLocation: params.object.fromLocation } : undefined), (params.object.creditCard !== undefined) ? { creditCard: params.object.creditCard } : undefined), (Array.isArray(movieTickets)) ? { movieTickets } : undefined)
51
+ paymentMethod: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ identifier: params.object.paymentMethod,
52
+ // typeOf: params.object.paymentMethod, // identifierへ移行(2023-08-30~)
53
+ amount: params.object.amount, additionalProperty: (Array.isArray(params.object.additionalProperty)) ? params.object.additionalProperty : [] }, (typeof params.object.method === 'string') ? { method: params.object.method } : undefined), (typeof params.object.name === 'string') ? { name: params.object.name } : undefined), (typeof accountId === 'string') ? { accountId } : undefined), (typeof params.object.description === 'string') ? { description: params.object.description } : undefined), (typeof params.object.fromLocation === 'string') ? { fromLocation: params.object.fromLocation } : undefined), (params.object.creditCard !== undefined) ? { creditCard: params.object.creditCard } : undefined), (Array.isArray(movieTickets)) ? { movieTickets } : undefined)
43
54
  }, expires: expires }, (typeof confirmationNumber === 'string')
44
55
  ? {
45
56
  purpose: {
@@ -80,7 +91,7 @@ function createMovieTicket(params) {
80
91
  };
81
92
  }
82
93
  function createAuthorizeResult(params) {
83
- var _a, _b, _c, _d, _e, _f, _g;
94
+ var _a, _b, _c, _d, _e, _f;
84
95
  const payTransactionObject = params.payTransaction.object;
85
96
  const totalPaymentDue = (_a = payTransactionObject.paymentMethod) === null || _a === void 0 ? void 0 : _a.totalPaymentDue;
86
97
  if (typeof (totalPaymentDue === null || totalPaymentDue === void 0 ? void 0 : totalPaymentDue.typeOf) !== 'string') {
@@ -98,7 +109,15 @@ function createAuthorizeResult(params) {
98
109
  && typeof paymentMethodAmountCurrencyByPayTransaction === 'string')
99
110
  ? { amount: { currency: paymentMethodAmountCurrencyByPayTransaction } }
100
111
  : undefined);
101
- return {
112
+ // FaceToFaceの場合、決済方法区分未指定に対応(2023-08-29~)
113
+ let paymentStatus = factory.paymentStatusType.PaymentAutomaticallyApplied;
114
+ if (issuedThrough.typeOf === factory.service.paymentService.PaymentServiceType.FaceToFace) {
115
+ if (paymentMethodAsObject.typeOf.length === 0) {
116
+ paymentStatus = factory.paymentStatusType.PaymentDue;
117
+ }
118
+ }
119
+ // Array対応(2023-09-02~)
120
+ const resultAsInvoice = {
102
121
  accountId: (typeof ((_e = payTransactionObject.paymentMethod) === null || _e === void 0 ? void 0 : _e.accountId) === 'string')
103
122
  ? payTransactionObject.paymentMethod.accountId
104
123
  : '',
@@ -108,17 +127,23 @@ function createAuthorizeResult(params) {
108
127
  // 完全廃止(paymentMethodAsObjectへ完全移行)(2023-08-16~)
109
128
  // paymentMethod: params.object.paymentMethod,
110
129
  paymentMethodAsObject,
111
- paymentStatus: factory.paymentStatusType.PaymentAutomaticallyApplied,
112
- paymentMethodId: (typeof ((_f = payTransactionObject.paymentMethod) === null || _f === void 0 ? void 0 : _f.paymentMethodId) === 'string')
113
- ? payTransactionObject.paymentMethod.paymentMethodId
130
+ paymentStatus,
131
+ paymentMethodId: (typeof payTransactionObject.paymentMethodId === 'string')
132
+ ? payTransactionObject.paymentMethodId
114
133
  : '',
115
- name: (typeof ((_g = payTransactionObject.paymentMethod) === null || _g === void 0 ? void 0 : _g.name) === 'string')
134
+ name: (typeof ((_f = payTransactionObject.paymentMethod) === null || _f === void 0 ? void 0 : _f.name) === 'string')
116
135
  ? payTransactionObject.paymentMethod.name
117
136
  : params.object.paymentMethod,
118
137
  totalPaymentDue: totalPaymentDue,
119
138
  additionalProperty: (Array.isArray(params.object.additionalProperty)) ? params.object.additionalProperty : [],
120
139
  typeOf: factory.action.authorize.paymentMethod.any.ResultType.Payment
121
140
  };
141
+ if (settings_1.USE_AUTHORIZE_PAYMENT_RESULT_AS_ARRAY) {
142
+ return [resultAsInvoice];
143
+ }
144
+ else {
145
+ return resultAsInvoice;
146
+ }
122
147
  }
123
148
  exports.createAuthorizeResult = createAuthorizeResult;
124
149
  function payActionObject2invoice(params) {
@@ -104,7 +104,7 @@ exports.invalidatePaymentUrl = invalidatePaymentUrl;
104
104
  function processVoidPayTransaction(params) {
105
105
  // tslint:disable-next-line:max-func-body-length
106
106
  return (repos) => __awaiter(this, void 0, void 0, function* () {
107
- var _a, _b;
107
+ var _a, _b, _c, _d;
108
108
  let transaction;
109
109
  // アクションID指定の場合、進行中取引検証(2023-02-24~)
110
110
  if (typeof params.id === 'string') {
@@ -145,23 +145,27 @@ function processVoidPayTransaction(params) {
145
145
  throw new factory.errors.NotImplemented(`${transaction.status} not implemented`);
146
146
  // 確定取引に対応(2023-05-03~)
147
147
  case factory.transactionStatusType.Confirmed:
148
- // アクションステータスを検証する
149
- authorizeActions = authorizeActions.filter((a) => a.actionStatus !== factory.actionStatusType.CompletedActionStatus);
150
- if (transaction.typeOf === factory.transactionType.PlaceOrder) {
151
- const paymentMethodIds = (_b = (_a = transaction.result) === null || _a === void 0 ? void 0 : _a.order) === null || _b === void 0 ? void 0 : _b.paymentMethods.map((p) => {
152
- return p.paymentMethodId;
153
- });
154
- if (!Array.isArray(paymentMethodIds)) {
155
- throw new factory.errors.Argument('Transaction', `${transaction.id} must have result.order.paymentMethods`);
156
- }
157
- if (paymentMethodIds.length > 0) {
158
- authorizeActions = authorizeActions.filter((a) => {
159
- // paymentMethodIdが存在しない、あるいは、注文のpaymentMethodIdsに含まれなければ、アクション取消対象
160
- const paymentMethodIdByAction = a.object.paymentMethodId;
161
- const includedInOrder = typeof paymentMethodIdByAction === 'string'
162
- && paymentMethodIds.includes(paymentMethodIdByAction);
163
- return !includedInOrder;
148
+ // OrderCancelledを考慮(2023-08-30~)
149
+ const orderCancelled = ((_b = (_a = params.purpose.result) === null || _a === void 0 ? void 0 : _a.order) === null || _b === void 0 ? void 0 : _b.orderStatus) === factory.orderStatus.OrderCancelled;
150
+ if (!orderCancelled) {
151
+ // 取り消すべきアクションに絞る
152
+ authorizeActions = authorizeActions.filter((a) => a.actionStatus !== factory.actionStatusType.CompletedActionStatus);
153
+ if (transaction.typeOf === factory.transactionType.PlaceOrder) {
154
+ const paymentMethodIds = (_d = (_c = transaction.result) === null || _c === void 0 ? void 0 : _c.order) === null || _d === void 0 ? void 0 : _d.paymentMethods.map((p) => {
155
+ return p.paymentMethodId;
164
156
  });
157
+ if (!Array.isArray(paymentMethodIds)) {
158
+ throw new factory.errors.Argument('Transaction', `${transaction.id} must have result.order.paymentMethods`);
159
+ }
160
+ if (paymentMethodIds.length > 0) {
161
+ authorizeActions = authorizeActions.filter((a) => {
162
+ // paymentMethodIdが存在しない、あるいは、注文のpaymentMethodIdsに含まれなければ、アクション取消対象
163
+ const paymentMethodIdByAction = a.object.paymentMethodId;
164
+ const includedInOrder = typeof paymentMethodIdByAction === 'string'
165
+ && paymentMethodIds.includes(paymentMethodIdByAction);
166
+ return !includedInOrder;
167
+ });
168
+ }
165
169
  }
166
170
  }
167
171
  break;
@@ -182,9 +186,14 @@ function processVoidPayTransaction(params) {
182
186
  project: { id: { $eq: action.project.id } },
183
187
  typeOf: factory.assetTransactionType.Pay,
184
188
  transactionNumber: { $eq: transactionNumber }
185
- });
186
- if (payTransactions.length > 0) {
187
- yield PayTransactionService.cancel({ transactionNumber })(repos);
189
+ }, ['_id', 'status']);
190
+ const payTransaction = payTransactions.shift();
191
+ if (payTransaction !== undefined) {
192
+ // ステータス検証(Expiredから実行される可能性がある)
193
+ if (payTransaction.status !== factory.transactionStatusType.Canceled
194
+ && payTransaction.status !== factory.transactionStatusType.Expired) {
195
+ yield PayTransactionService.cancel({ transactionNumber })(repos);
196
+ }
188
197
  }
189
198
  }
190
199
  yield repos.action.cancel({ typeOf: action.typeOf, id: action.id });
@@ -339,7 +348,7 @@ function authorize(params) {
339
348
  if (error.name !== 'AbortError') {
340
349
  yield processVoidPayTransaction({
341
350
  project: action.project,
342
- agent: { id: action.project.id },
351
+ // agent: { id: action.project.id },
343
352
  id: action.id,
344
353
  purpose: action.purpose
345
354
  })(repos);