@chevre/domain 21.35.0-alpha.8 → 21.35.0

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 (98) hide show
  1. package/example/src/chevre/checkReserveTransactionSizes.ts +46 -0
  2. package/example/src/chevre/findCustomerByOrderNumber.ts +19 -0
  3. package/example/src/chevre/investigateMovieTicketIdentifier.ts +78 -0
  4. package/example/src/chevre/migrateAuthorizeEventServiceOfferCOA.ts +84 -0
  5. package/example/src/chevre/migrateAuthorizeEventServiceOfferChevre.ts +84 -0
  6. package/example/src/chevre/migrateAuthorizeEventServiceOfferInstrument.ts +128 -0
  7. package/example/src/chevre/migrateAuthorizeEventServiceOfferResult.ts +163 -0
  8. package/example/src/chevre/unsetUnnecessaryFieldsInAction.ts +55 -0
  9. package/example/src/chevre/{unsetUnnecessaryFields.ts → unsetUnnecessaryFieldsInTransaction.ts} +15 -6
  10. package/lib/chevre/factory/taskIdentifier.d.ts +29 -0
  11. package/lib/chevre/factory/taskIdentifier.js +10 -0
  12. package/lib/chevre/repo/action.d.ts +5 -5
  13. package/lib/chevre/repo/action.js +30 -29
  14. package/lib/chevre/repo/assetTransaction.js +10 -8
  15. package/lib/chevre/repo/mongoose/schemas/accountTransaction.js +0 -25
  16. package/lib/chevre/repo/mongoose/schemas/assetTransaction.js +2 -2
  17. package/lib/chevre/repo/mongoose/schemas/order.js +2 -4
  18. package/lib/chevre/repo/mongoose/schemas/transaction.js +2 -2
  19. package/lib/chevre/repo/orderInTransaction.d.ts +12 -1
  20. package/lib/chevre/repo/orderInTransaction.js +38 -0
  21. package/lib/chevre/repo/project.d.ts +1 -1
  22. package/lib/chevre/repo/project.js +11 -8
  23. package/lib/chevre/repo/seller.d.ts +9 -4
  24. package/lib/chevre/repo/seller.js +21 -15
  25. package/lib/chevre/repo/task.d.ts +12 -0
  26. package/lib/chevre/repo/task.js +17 -0
  27. package/lib/chevre/repo/transaction.d.ts +1 -1
  28. package/lib/chevre/repo/transaction.js +13 -17
  29. package/lib/chevre/service/assetTransaction/cancelReservation.js +1 -1
  30. package/lib/chevre/service/assetTransaction/pay.d.ts +6 -0
  31. package/lib/chevre/service/assetTransaction/pay.js +4 -4
  32. package/lib/chevre/service/notification.d.ts +5 -1
  33. package/lib/chevre/service/notification.js +6 -2
  34. package/lib/chevre/service/offer/event/authorize.js +2 -2
  35. package/lib/chevre/service/offer/event/factory.d.ts +6 -2
  36. package/lib/chevre/service/offer/event/factory.js +45 -47
  37. package/lib/chevre/service/offer/event/voidTransaction/processVoidTransaction4chevre.js +2 -2
  38. package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.js +2 -2
  39. package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +2 -1
  40. package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +34 -16
  41. package/lib/chevre/service/offer/eventServiceByCOA/factory.js +16 -15
  42. package/lib/chevre/service/order/onAssetTransactionStatusChanged.js +1 -1
  43. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDelivered/factory.d.ts +1 -4
  44. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDelivered/factory.js +1 -63
  45. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDelivered.js +11 -11
  46. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/createSendEmailMessageTaskIfNotExist.d.ts +3 -1
  47. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/createSendEmailMessageTaskIfNotExist.js +2 -9
  48. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/factory.js +1 -1
  49. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing.js +6 -8
  50. package/lib/chevre/service/order/onOrderStatusChanged/onOrderReturned/factory.d.ts +1 -0
  51. package/lib/chevre/service/order/onOrderStatusChanged/onOrderReturned/factory.js +18 -2
  52. package/lib/chevre/service/order/onOrderStatusChanged/onOrderReturned.js +5 -5
  53. package/lib/chevre/service/order/placeOrder/createPlacingOrderFromExistingTransaction.d.ts +21 -0
  54. package/lib/chevre/service/order/placeOrder/createPlacingOrderFromExistingTransaction.js +97 -0
  55. package/lib/chevre/service/order/placeOrder/factory.d.ts +3 -1
  56. package/lib/chevre/service/order/placeOrder/factory.js +34 -5
  57. package/lib/chevre/service/order/placeOrder/voidAcceptedOfferIfNecessary.d.ts +10 -0
  58. package/lib/chevre/service/order/placeOrder/voidAcceptedOfferIfNecessary.js +34 -0
  59. package/lib/chevre/service/order/placeOrder.d.ts +1 -17
  60. package/lib/chevre/service/order/placeOrder.js +10 -178
  61. package/lib/chevre/service/order/placeOrderWithoutTransaction.d.ts +22 -0
  62. package/lib/chevre/service/order/placeOrderWithoutTransaction.js +60 -0
  63. package/lib/chevre/service/order/sendOrder.js +1 -1
  64. package/lib/chevre/service/order.d.ts +2 -1
  65. package/lib/chevre/service/order.js +2 -1
  66. package/lib/chevre/service/payment/any/factory.d.ts +2 -2
  67. package/lib/chevre/service/payment/any.js +13 -4
  68. package/lib/chevre/service/payment/movieTicket/authorize.d.ts +6 -0
  69. package/lib/chevre/service/payment/movieTicket/authorize.js +1 -1
  70. package/lib/chevre/service/payment/movieTicket/checkMovieTicket.js +3 -3
  71. package/lib/chevre/service/payment/movieTicket/validation.d.ts +9 -2
  72. package/lib/chevre/service/payment/movieTicket/validation.js +32 -11
  73. package/lib/chevre/service/task/confirmReserveTransaction.js +3 -3
  74. package/lib/chevre/service/task/returnPayTransaction.d.ts +2 -2
  75. package/lib/chevre/service/task/returnPayTransaction.js +77 -23
  76. package/lib/chevre/service/task/sendEmailMessage.d.ts +2 -2
  77. package/lib/chevre/service/task/sendEmailMessage.js +3 -2
  78. package/lib/chevre/service/task.js +2 -0
  79. package/lib/chevre/service/transaction/deleteTransaction.js +3 -3
  80. package/lib/chevre/service/transaction/placeOrderInProgress/confirm.d.ts +8 -5
  81. package/lib/chevre/service/transaction/placeOrderInProgress/confirm.js +43 -41
  82. package/lib/chevre/service/transaction/placeOrderInProgress/potentialActions/sendEmailMessage.d.ts +1 -1
  83. package/lib/chevre/service/transaction/placeOrderInProgress/result.d.ts +1 -4
  84. package/lib/chevre/service/transaction/placeOrderInProgress/result.js +50 -30
  85. package/lib/chevre/service/transaction/placeOrderInProgress/validation.d.ts +5 -2
  86. package/lib/chevre/service/transaction/placeOrderInProgress/validation.js +57 -31
  87. package/lib/chevre/service/transaction/returnOrder/potentialActions/returnPaymentMethod.js +62 -58
  88. package/lib/chevre/service/transaction/returnOrder/potentialActions/sendEmailMessage.d.ts +3 -1
  89. package/lib/chevre/service/transaction/returnOrder/potentialActions/sendEmailMessage.js +14 -27
  90. package/lib/chevre/service/transaction/returnOrder/preStart.js +17 -19
  91. package/lib/chevre/service/transaction.d.ts +13 -2
  92. package/lib/chevre/service/transaction.js +42 -13
  93. package/lib/chevre/service.d.ts +2 -0
  94. package/lib/chevre/service.js +2 -0
  95. package/lib/chevre/settings.d.ts +0 -1
  96. package/lib/chevre/settings.js +1 -2
  97. package/package.json +3 -3
  98. package/example/src/chevre/investigateCheckMovieTicketActions.ts +0 -60
@@ -6,22 +6,6 @@ import type { MongoRepository as OrderInTransactionRepo } from '../../repo/order
6
6
  import type { MongoRepository as TaskRepo } from '../../repo/task';
7
7
  import type { MongoRepository as TransactionRepo } from '../../repo/transaction';
8
8
  import * as factory from '../../factory';
9
- import { IExternalOrder } from './onOrderStatusChanged';
10
- /**
11
- * 注文取引なしに注文を作成する
12
- */
13
- declare function placeOrderWithoutTransaction(params: {
14
- agent?: factory.action.trade.order.IAgent;
15
- project: {
16
- id: string;
17
- };
18
- object: IExternalOrder;
19
- }): (repos: {
20
- accountingReport: AccountingReportRepo;
21
- action: ActionRepo;
22
- order: OrderRepo;
23
- task: TaskRepo;
24
- }) => Promise<void>;
25
9
  /**
26
10
  * 注文を作成する
27
11
  */
@@ -46,4 +30,4 @@ declare function placeOrder(params: {
46
30
  }) => Promise<{
47
31
  order: factory.transaction.placeOrder.IOrderAsResult;
48
32
  }>;
49
- export { placeOrder, placeOrderWithoutTransaction };
33
+ export { placeOrder };
@@ -9,141 +9,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.placeOrderWithoutTransaction = exports.placeOrder = void 0;
13
- const createDebug = require("debug");
12
+ exports.placeOrder = void 0;
14
13
  const factory = require("../../factory");
15
14
  const onAssetTransactionStatusChanged_1 = require("./onAssetTransactionStatusChanged");
16
15
  const onOrderStatusChanged_1 = require("./onOrderStatusChanged");
17
- const factory_1 = require("./placeOrder/factory");
18
- const debug = createDebug('chevre-domain:service:order');
19
- function createPlacingOrderFromExistingTransaction(params) {
20
- return (repos) => __awaiter(this, void 0, void 0, function* () {
21
- var _a;
22
- const confirmationNumber = String(params.confirmationNumber);
23
- const orderNumber = params.orderNumber;
24
- let order;
25
- const placeOrderTransactions = yield repos.transaction.search({
26
- limit: 1,
27
- page: 1,
28
- project: { id: { $eq: params.project.id } },
29
- typeOf: factory.transactionType.PlaceOrder,
30
- statuses: [factory.transactionStatusType.Confirmed],
31
- result: {
32
- order: {
33
- confirmationNumber: { $eq: confirmationNumber },
34
- orderNumbers: [orderNumber]
35
- }
36
- },
37
- inclusion: ['project', 'typeOf', 'result', 'object', 'seller'] // potentialActionsは必要なし(2024-01-19~)
38
- });
39
- const placeOrderTransactionWithResult = placeOrderTransactions.shift();
40
- if (placeOrderTransactionWithResult === undefined) {
41
- throw new factory.errors.NotFound(factory.transactionType.PlaceOrder);
42
- }
43
- let authorizePaymentActions = [];
44
- const authorizeActionsAsResult = (_a = placeOrderTransactionWithResult.result) === null || _a === void 0 ? void 0 : _a.authorizeActions;
45
- if (Array.isArray(authorizeActionsAsResult) && authorizeActionsAsResult.length > 0) {
46
- const completedAuthorizeActionIds = authorizeActionsAsResult.map(({ id }) => id);
47
- if (completedAuthorizeActionIds.length > 0) {
48
- authorizePaymentActions = yield repos.action.search({
49
- typeOf: factory.actionType.AuthorizeAction,
50
- purpose: {
51
- typeOf: { $in: [factory.transactionType.PlaceOrder] },
52
- id: { $in: [placeOrderTransactionWithResult.id] }
53
- },
54
- object: { typeOf: { $eq: factory.action.authorize.paymentMethod.any.ResultType.Payment } },
55
- id: { $in: completedAuthorizeActionIds }
56
- }, ['result'], []);
57
- debug('createPlacingOrderFromExistingTransaction: authorizePaymentActions found:', JSON.stringify(authorizePaymentActions));
58
- }
59
- }
60
- order = (0, factory_1.createPlacingOrder)({ transaction: placeOrderTransactionWithResult, authorizePaymentActions });
61
- return { order, placeOrderTransaction: placeOrderTransactionWithResult };
62
- });
63
- }
64
- /**
65
- * 注文取引なしに注文を作成する
66
- */
67
- function placeOrderWithoutTransaction(params) {
68
- return (repos) => __awaiter(this, void 0, void 0, function* () {
69
- var _a;
70
- const order = params.object;
71
- const simpleOrder = {
72
- typeOf: order.typeOf,
73
- // seller: {
74
- // id: order.seller.id,
75
- // typeOf: order.seller.typeOf,
76
- // name: order.seller.name
77
- // }, // 廃止(2024-03-06~)
78
- // customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id }, // 廃止(2024-03-06~)
79
- orderNumber: order.orderNumber,
80
- price: order.price,
81
- priceCurrency: order.priceCurrency,
82
- orderDate: order.orderDate
83
- };
84
- const orderActionAttributes = {
85
- agent: (typeof ((_a = params.agent) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? params.agent : order.project,
86
- object: simpleOrder,
87
- potentialActions: {},
88
- project: order.project,
89
- // purpose: { typeOf: placeOrderTransaction.typeOf, id: placeOrderTransaction.id },
90
- typeOf: factory.actionType.OrderAction
91
- };
92
- const action = yield repos.action.start(orderActionAttributes);
93
- try {
94
- yield repos.order.createIfNotExist(Object.assign(Object.assign({}, order), {
95
- // discounts: [], // 廃止(2024-04-16~)
96
- acceptedOffers: [] }));
97
- }
98
- catch (error) {
99
- try {
100
- yield repos.action.giveUp({ typeOf: orderActionAttributes.typeOf, id: action.id, error });
101
- }
102
- catch (__) {
103
- // 失敗したら仕方ない
104
- }
105
- throw error;
106
- }
107
- yield repos.action.completeWithVoid({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
108
- });
109
- }
110
- exports.placeOrderWithoutTransaction = placeOrderWithoutTransaction;
111
- function voidAcceptedOfferIfNecessary(params) {
112
- return (repos) => __awaiter(this, void 0, void 0, function* () {
113
- var _a;
114
- // 取引に保管された承認アクション以外のアクションについて、オファーを除外する
115
- const authorizeActionsAsResult = (_a = params.purpose.result) === null || _a === void 0 ? void 0 : _a.authorizeActions;
116
- if (Array.isArray(authorizeActionsAsResult) && authorizeActionsAsResult.length > 0) {
117
- const completedAuthorizeActionIds = authorizeActionsAsResult.map(({ id }) => id);
118
- debug(completedAuthorizeActionIds.length, 'completedAuthorizeActionIds found from transaction', params.purpose.id);
119
- const authorizeActionsWithInstrument = yield repos.action.search({
120
- typeOf: factory.actionType.AuthorizeAction,
121
- purpose: {
122
- typeOf: { $in: [factory.transactionType.PlaceOrder] },
123
- id: { $in: [params.purpose.id] }
124
- },
125
- object: {
126
- typeOf: {
127
- $in: [
128
- factory.action.authorize.offer.eventService.ObjectType.SeatReservation,
129
- factory.offerType.Offer
130
- ]
131
- }
132
- },
133
- id: { $in: completedAuthorizeActionIds }
134
- }, ['instrument'], []);
135
- const serialNumbersMustBeIn = authorizeActionsWithInstrument
136
- .filter(({ instrument }) => typeof instrument.transactionNumber === 'string')
137
- .map(({ instrument }) => String(instrument.transactionNumber));
138
- debug('voidAcceptedOfferBySerialNumber processing...', params.object.orderNumber, 'serialNumbersMustBeIn:', serialNumbersMustBeIn);
139
- const voidAcceptedOfferBySerialNumberResult = yield repos.orderInTransaction.voidAcceptedOfferBySerialNumber({
140
- orderNumber: params.object.orderNumber,
141
- acceptedOffers: { serialNumber: { $nin: serialNumbersMustBeIn } }
142
- });
143
- debug('voidAcceptedOfferBySerialNumber processed.', params.object.orderNumber, 'voidAcceptedOfferBySerialNumberResult:', voidAcceptedOfferBySerialNumberResult);
144
- }
145
- });
146
- }
16
+ const createPlacingOrderFromExistingTransaction_1 = require("./placeOrder/createPlacingOrderFromExistingTransaction");
17
+ const voidAcceptedOfferIfNecessary_1 = require("./placeOrder/voidAcceptedOfferIfNecessary");
147
18
  /**
148
19
  * 注文を作成する
149
20
  */
@@ -155,19 +26,15 @@ function placeOrder(params) {
155
26
  throw new factory.errors.Argument('useOnOrderStatusChanged', 'must be boolean');
156
27
  }
157
28
  // 注文番号から取引と注文をfixする
158
- const { order, placeOrderTransaction } = yield createPlacingOrderFromExistingTransaction({
29
+ const { order, placeOrderTransaction, serialNumbers } = yield (0, createPlacingOrderFromExistingTransaction_1.createPlacingOrderFromExistingTransaction)({
159
30
  project: { id: params.project.id },
160
31
  confirmationNumber: params.object.confirmationNumber,
161
32
  orderNumber: params.object.orderNumber
162
- })({
163
- action: repos.action,
164
- transaction: repos.transaction
165
- });
33
+ })(repos);
166
34
  // USE_ORDER_PAYMENT_DUE_ON_PLACED設定を廃止したので、必ずOrderPaymentDueのはず(2024-01-10~)
167
35
  if (order.orderStatus !== factory.orderStatus.OrderPaymentDue) {
168
36
  throw new factory.errors.ServiceUnavailable(`orderStatus must be ${factory.orderStatus.OrderPaymentDue}`);
169
37
  }
170
- // const maskedCustomer = createMaskedCustomer(order, { noProfile: true });
171
38
  const simpleOrder = {
172
39
  typeOf: order.typeOf,
173
40
  // seller: {
@@ -198,9 +65,7 @@ function placeOrder(params) {
198
65
  page: 1,
199
66
  actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] },
200
67
  typeOf: { $eq: orderActionAttributes.typeOf },
201
- object: {
202
- orderNumber: { $in: [orderActionAttributes.object.orderNumber] }
203
- },
68
+ object: { orderNumber: { $in: [orderActionAttributes.object.orderNumber] } },
204
69
  purpose: {
205
70
  id: { $in: [orderActionPurpose.id] },
206
71
  typeOf: { $in: [orderActionPurpose.typeOf] }
@@ -210,22 +75,12 @@ function placeOrder(params) {
210
75
  const action = yield repos.action.start(orderActionAttributes);
211
76
  try {
212
77
  // 冗長なオファーを除外する(念のため)
213
- yield voidAcceptedOfferIfNecessary({
78
+ yield (0, voidAcceptedOfferIfNecessary_1.voidAcceptedOfferIfNecessary)({
214
79
  object: { orderNumber: order.orderNumber },
215
- purpose: placeOrderTransaction
80
+ // purpose: placeOrderTransaction,
81
+ serialNumbers
216
82
  })(repos);
217
- // acceptedOffersの内容検証(開発)
218
- // if (USE_ACCEPTED_OFFERS_AS_TRANSACTION_RESULT) {
219
- // if (USE_VERIFY_ACCEPTED_OFFERS) {
220
- // await verifyAcceptedOffers({ order })(repos);
221
- // }
222
- // }
223
- // const ignoreAccpetedOffersFromResult = placeOrderTransaction.result?.options?.ignoreAccpetedOffersFromResult === true;
224
- // orderInTransactionを考慮(2024-01-14~)
225
83
  yield repos.orderInTransaction.placeOrder(order);
226
- // if (!ignoreAccpetedOffersFromResult) {
227
- // await repos.order.createIfNotExist(order);
228
- // }
229
84
  }
230
85
  catch (error) {
231
86
  try {
@@ -239,9 +94,7 @@ function placeOrder(params) {
239
94
  yield repos.action.completeWithVoid({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
240
95
  }
241
96
  if (params.useOnOrderStatusChanged) {
242
- // 経理レポートを保管
243
- // CreateAccountingReportへ移行(2024-02-02~)
244
- // await createAccountingReportIfNotExist(order)({ accountingReport: repos.accountingReport });
97
+ // 経理レポートを保管->CreateAccountingReportへ移行(2024-02-02~)
245
98
  // PaymentDueであればonOrderStatusChangedを実行(2023-08-23~)
246
99
  if (order.orderStatus === factory.orderStatus.OrderPaymentDue) {
247
100
  yield (0, onOrderStatusChanged_1.onOrderPaymentDue)({
@@ -250,7 +103,6 @@ function placeOrder(params) {
250
103
  project: placeOrderTransaction.project,
251
104
  orderNumber: order.orderNumber,
252
105
  confirmationNumber: order.confirmationNumber,
253
- // customer: order.customer,
254
106
  orderDate: order.orderDate,
255
107
  seller: order.seller,
256
108
  typeOf: order.typeOf,
@@ -261,26 +113,6 @@ function placeOrder(params) {
261
113
  })({
262
114
  task: repos.task
263
115
  });
264
- // } else if (order.orderStatus === factory.orderStatus.OrderProcessing) {
265
- // // OrderPaymentDueをスキップしてOrderProcessingから開始する場合(2023-08-23~)
266
- // // OrderPaymentDueに対する処理をまず強制的に実行する(2023-08-24~)
267
- // await onOrderPaymentDue({
268
- // order: {
269
- // paymentMethods: order.paymentMethods,
270
- // project: order.project,
271
- // orderNumber: order.orderNumber,
272
- // confirmationNumber: order.confirmationNumber,
273
- // customer: order.customer,
274
- // orderDate: order.orderDate,
275
- // seller: order.seller,
276
- // typeOf: order.typeOf,
277
- // price: order.price,
278
- // priceCurrency: order.priceCurrency,
279
- // orderStatus: factory.orderStatus.OrderPaymentDue
280
- // }
281
- // })({
282
- // task: repos.task
283
- // });
284
116
  }
285
117
  else {
286
118
  throw new factory.errors.NotImplemented(`placing an order on the status '${order.orderStatus}' not implemented`);
@@ -0,0 +1,22 @@
1
+ import type { MongoRepository as AccountingReportRepo } from '../../repo/accountingReport';
2
+ import type { MongoRepository as ActionRepo } from '../../repo/action';
3
+ import type { MongoRepository as OrderRepo } from '../../repo/order';
4
+ import type { MongoRepository as TaskRepo } from '../../repo/task';
5
+ import * as factory from '../../factory';
6
+ import { IExternalOrder } from './onOrderStatusChanged';
7
+ /**
8
+ * 注文取引なしに注文を作成する
9
+ */
10
+ declare function placeOrderWithoutTransaction(params: {
11
+ agent?: factory.action.trade.order.IAgent;
12
+ project: {
13
+ id: string;
14
+ };
15
+ object: IExternalOrder;
16
+ }): (repos: {
17
+ accountingReport: AccountingReportRepo;
18
+ action: ActionRepo;
19
+ order: OrderRepo;
20
+ task: TaskRepo;
21
+ }) => Promise<void>;
22
+ export { placeOrderWithoutTransaction };
@@ -0,0 +1,60 @@
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.placeOrderWithoutTransaction = void 0;
13
+ const factory = require("../../factory");
14
+ /**
15
+ * 注文取引なしに注文を作成する
16
+ */
17
+ function placeOrderWithoutTransaction(params) {
18
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
19
+ var _a;
20
+ const order = params.object;
21
+ const simpleOrder = {
22
+ typeOf: order.typeOf,
23
+ // seller: {
24
+ // id: order.seller.id,
25
+ // typeOf: order.seller.typeOf,
26
+ // name: order.seller.name
27
+ // }, // 廃止(2024-03-06~)
28
+ // customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id }, // 廃止(2024-03-06~)
29
+ orderNumber: order.orderNumber,
30
+ price: order.price,
31
+ priceCurrency: order.priceCurrency,
32
+ orderDate: order.orderDate
33
+ };
34
+ const orderActionAttributes = {
35
+ agent: (typeof ((_a = params.agent) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? params.agent : order.project,
36
+ object: simpleOrder,
37
+ potentialActions: {},
38
+ project: order.project,
39
+ // purpose: { typeOf: placeOrderTransaction.typeOf, id: placeOrderTransaction.id },
40
+ typeOf: factory.actionType.OrderAction
41
+ };
42
+ const action = yield repos.action.start(orderActionAttributes);
43
+ try {
44
+ yield repos.order.createIfNotExist(Object.assign(Object.assign({}, order), {
45
+ // discounts: [], // 廃止(2024-04-16~)
46
+ acceptedOffers: [] }));
47
+ }
48
+ catch (error) {
49
+ try {
50
+ yield repos.action.giveUp({ typeOf: orderActionAttributes.typeOf, id: action.id, error });
51
+ }
52
+ catch (__) {
53
+ // 失敗したら仕方ない
54
+ }
55
+ throw error;
56
+ }
57
+ yield repos.action.completeWithVoid({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
58
+ });
59
+ }
60
+ exports.placeOrderWithoutTransaction = placeOrderWithoutTransaction;
@@ -81,7 +81,7 @@ function sendOrder(params) {
81
81
  const sendOrderActionAttributes = {
82
82
  agent: (typeof ((_c = params.agent) === null || _c === void 0 ? void 0 : _c.typeOf) === 'string') ? params.agent : order.project,
83
83
  object: sendOrderObject,
84
- potentialActions: {},
84
+ // potentialActions: {},
85
85
  project: order.project,
86
86
  recipient: { id: order.customer.id, typeOf: order.customer.typeOf },
87
87
  typeOf: factory.actionType.SendAction
@@ -7,6 +7,7 @@ import { onAssetTransactionStatusChanged, paymentDue2Processing } from './order/
7
7
  import { onOrderProcessing } from './order/onOrderStatusChanged';
8
8
  import { onOrderUpdated } from './order/onOrderUpdated';
9
9
  import { payOrder } from './order/payOrder';
10
- import { placeOrder, placeOrderWithoutTransaction } from './order/placeOrder';
10
+ import { placeOrder } from './order/placeOrder';
11
+ import { placeOrderWithoutTransaction } from './order/placeOrderWithoutTransaction';
11
12
  import { sendOrder } from './order/sendOrder';
12
13
  export { confirmPayTransaction, deleteOrder, onAssetTransactionStatusChanged, onOrderProcessing, onOrderUpdated, paymentDue2Processing, payOrder, placeOrder, placeOrderWithoutTransaction, sendOrder };
@@ -19,6 +19,7 @@ const payOrder_1 = require("./order/payOrder");
19
19
  Object.defineProperty(exports, "payOrder", { enumerable: true, get: function () { return payOrder_1.payOrder; } });
20
20
  const placeOrder_1 = require("./order/placeOrder");
21
21
  Object.defineProperty(exports, "placeOrder", { enumerable: true, get: function () { return placeOrder_1.placeOrder; } });
22
- Object.defineProperty(exports, "placeOrderWithoutTransaction", { enumerable: true, get: function () { return placeOrder_1.placeOrderWithoutTransaction; } });
22
+ const placeOrderWithoutTransaction_1 = require("./order/placeOrderWithoutTransaction");
23
+ Object.defineProperty(exports, "placeOrderWithoutTransaction", { enumerable: true, get: function () { return placeOrderWithoutTransaction_1.placeOrderWithoutTransaction; } });
23
24
  const sendOrder_1 = require("./order/sendOrder");
24
25
  Object.defineProperty(exports, "sendOrder", { enumerable: true, get: function () { return sendOrder_1.sendOrder; } });
@@ -12,7 +12,7 @@ export interface IOnPaymentStatusChangedRefundAction {
12
12
  export type IOnPaymentStatusChangedParams = IOnPaymentStatusChangedPayAction | IOnPaymentStatusChangedRefundAction;
13
13
  export declare function creatPayTransactionStartParams(params: {
14
14
  accountId?: string;
15
- object: factory.action.authorize.paymentMethod.any.IObject;
15
+ object: factory.action.authorize.paymentMethod.any.IObjectIncludingPaymentMethodDetails;
16
16
  paymentServiceType: factory.service.paymentService.PaymentServiceType;
17
17
  transaction: Pick<factory.transaction.ITransaction<factory.transactionType.PlaceOrder>, 'expires' | 'seller' | 'project'>;
18
18
  transactionNumber: string;
@@ -26,7 +26,7 @@ export declare function creatPayTransactionStartParams(params: {
26
26
  }): factory.assetTransaction.pay.IStartParamsWithoutDetail;
27
27
  export declare function createMovieTicket(params: factory.action.trade.pay.IMovieTicket): factory.action.trade.pay.IMovieTicket;
28
28
  export declare function createAuthorizeResult(params: {
29
- object: factory.action.authorize.paymentMethod.any.IObject;
29
+ object: factory.action.authorize.paymentMethod.any.IObjectIncludingPaymentMethodDetails;
30
30
  payTransaction: factory.assetTransaction.pay.ITransaction;
31
31
  }): factory.action.authorize.paymentMethod.any.IResultAsInvoice[];
32
32
  /**
@@ -289,6 +289,14 @@ function publishPaymentUrl(params) {
289
289
  });
290
290
  }
291
291
  exports.publishPaymentUrl = publishPaymentUrl;
292
+ /**
293
+ * 承認アクションオブジェクトから冗長な属性を排除する
294
+ */
295
+ function minimizeObjectIncludingPaymentMethodDetails(authorizeObjectIncludingPaymentMethodDetails) {
296
+ const { accountId, paymentMethodId, typeOf } = authorizeObjectIncludingPaymentMethodDetails;
297
+ return { authorizeObject: { accountId, paymentMethodId, typeOf } }; // optimize(2024-06-26~)
298
+ // return { authorizeObject: authorizeObjectIncludingPaymentMethodDetails };
299
+ }
292
300
  /**
293
301
  * 決済承認
294
302
  */
@@ -345,7 +353,8 @@ function authorize(params) {
345
353
  }
346
354
  const movieTickets = (Array.isArray(params.object.movieTickets)) ? params.object.movieTickets.map(factory_1.createMovieTicket) : undefined;
347
355
  const { accountId } = yield fixAccountIdIfPossible({ object: params.object, project: { id: transaction.project.id } })(repos);
348
- const authorizeObject = Object.assign(Object.assign(Object.assign(Object.assign({}, params.object), { accountId, paymentMethodId: transactionNumber, typeOf: factory.action.authorize.paymentMethod.any.ResultType.Payment }), (creditCard !== undefined) ? { creditCard } : undefined), (Array.isArray(movieTickets)) ? { movieTickets } : undefined);
356
+ const authorizeObjectIncludingPaymentMethodDetails = Object.assign(Object.assign(Object.assign(Object.assign({}, params.object), { accountId, paymentMethodId: transactionNumber, typeOf: factory.action.authorize.paymentMethod.any.ResultType.Payment }), (creditCard !== undefined) ? { creditCard } : undefined), (Array.isArray(movieTickets)) ? { movieTickets } : undefined);
357
+ const { authorizeObject } = minimizeObjectIncludingPaymentMethodDetails(authorizeObjectIncludingPaymentMethodDetails);
349
358
  // 承認アクションを開始する
350
359
  const taskId = (_a = params.sameAs) === null || _a === void 0 ? void 0 : _a.id;
351
360
  const actionAttributes = Object.assign({ project: transaction.project, typeOf: factory.actionType.AuthorizeAction, object: authorizeObject, agent: {
@@ -368,14 +377,14 @@ function authorize(params) {
368
377
  try {
369
378
  const startParams = (0, factory_1.creatPayTransactionStartParams)({
370
379
  accountId,
371
- object: authorizeObject,
380
+ object: authorizeObjectIncludingPaymentMethodDetails,
372
381
  paymentServiceType,
373
382
  transaction: transaction,
374
383
  transactionNumber: transactionNumber,
375
384
  location: params.location,
376
385
  order: Object.assign({}, (typeof confirmationNumber === 'string') ? { confirmationNumber } : undefined)
377
386
  });
378
- payTransaction = yield PayTransactionService.start(startParams, Object.assign({ useCheckByIdentifierIfNotYet: params.options.useCheckByIdentifierIfNotYet, executor: (typeof taskId === 'string') ? { id: taskId } : {} }, (pendingPaymentAgencyTransaction !== undefined) ? { pendingPaymentAgencyTransaction } : undefined))(repos);
387
+ payTransaction = yield PayTransactionService.start(startParams, Object.assign({ useCheckByIdentifierIfNotYet: params.options.useCheckByIdentifierIfNotYet, executor: (typeof taskId === 'string') ? { id: taskId } : {}, purpose: { id: transaction.id } }, (pendingPaymentAgencyTransaction !== undefined) ? { pendingPaymentAgencyTransaction } : undefined))(repos);
379
388
  }
380
389
  catch (error) {
381
390
  try {
@@ -409,7 +418,7 @@ function authorize(params) {
409
418
  throw error;
410
419
  }
411
420
  }
412
- const result = (0, factory_1.createAuthorizeResult)({ payTransaction, object: authorizeObject });
421
+ const result = (0, factory_1.createAuthorizeResult)({ payTransaction, object: authorizeObjectIncludingPaymentMethodDetails });
413
422
  yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: result });
414
423
  return { id: action.id };
415
424
  });
@@ -26,6 +26,12 @@ declare function authorize(params: factory.assetTransaction.pay.IStartParamsWith
26
26
  */
27
27
  id?: string;
28
28
  };
29
+ purpose: {
30
+ /**
31
+ * placeOrder ID
32
+ */
33
+ id?: string;
34
+ };
29
35
  }): (repos: {
30
36
  action: ActionRepo;
31
37
  accountingReport: AccountingReportRepo;
@@ -26,7 +26,7 @@ function authorize(params, transaction, paymentServiceId, useCheckByIdentifierIf
26
26
  let accountsReceivablesByServiceType = [];
27
27
  try {
28
28
  // MovieTicket決済の場合、認証
29
- const validateMovieTicketResult = yield (0, validation_1.validateMovieTicket)(params, paymentServiceId, useCheckByIdentifierIfNotYet)(repos);
29
+ const validateMovieTicketResult = yield (0, validation_1.validateMovieTicket)(params, paymentServiceId, useCheckByIdentifierIfNotYet, options.purpose)(repos);
30
30
  accountsReceivablesByServiceType = validateMovieTicketResult.accountsReceivablesByServiceType;
31
31
  const paymentMethod = transaction.object.paymentMethod;
32
32
  const paymentMethodType = String(paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.identifier);
@@ -21,11 +21,11 @@ function checkMovieTicket(params) {
21
21
  return (repos) => __awaiter(this, void 0, void 0, function* () {
22
22
  var _a, _b, _c, _d, _e, _f;
23
23
  // 不要な属性がリクエストに含まれているのでmovieTicketsを最適化(2024-03-15~)
24
- let movieTickets = (_a = params.object[0]) === null || _a === void 0 ? void 0 : _a.movieTickets;
25
- if (!Array.isArray(movieTickets)) {
24
+ const movieTicketsBeforeOptimize = (_a = params.object[0]) === null || _a === void 0 ? void 0 : _a.movieTickets;
25
+ if (!Array.isArray(movieTicketsBeforeOptimize)) {
26
26
  throw new factory.errors.Argument('object.movieTickets must be an array');
27
27
  }
28
- movieTickets = movieTickets.map(({ accessCode, category, identifier, serviceOutput }) => {
28
+ const movieTickets = movieTicketsBeforeOptimize.map(({ accessCode, category, identifier, serviceOutput }) => {
29
29
  return {
30
30
  accessCode, category, identifier,
31
31
  serviceOutput: { reservationFor: serviceOutput.reservationFor } // 最適化(2024-03-15~)
@@ -1,15 +1,22 @@
1
- import * as factory from '../../../factory';
2
1
  import type { MongoRepository as ActionRepo } from '../../../repo/action';
3
2
  import type { MongoRepository as EventRepo } from '../../../repo/event';
4
3
  import type { MongoRepository as PaymentServiceRepo } from '../../../repo/paymentService';
5
4
  import type { MongoRepository as PaymentServiceProviderRepo } from '../../../repo/paymentServiceProvider';
6
5
  import type { MongoRepository as PaymentAcceptedRepo } from '../../../repo/sellerPaymentAccepted';
7
- export declare function validateMovieTicket(params: factory.assetTransaction.pay.IStartParamsWithoutDetail, paymentServiceId: string, useCheckByIdentifierIfNotYet: boolean): (repos: {
6
+ import type { MongoRepository as TaskRepo } from '../../../repo/task';
7
+ import * as factory from '../../../factory';
8
+ export declare function validateMovieTicket(params: factory.assetTransaction.pay.IStartParamsWithoutDetail, paymentServiceId: string, useCheckByIdentifierIfNotYet: boolean, purpose: {
9
+ /**
10
+ * placeOrder ID
11
+ */
12
+ id?: string;
13
+ }): (repos: {
8
14
  action: ActionRepo;
9
15
  event: EventRepo;
10
16
  paymentAccepted: PaymentAcceptedRepo;
11
17
  paymentService: PaymentServiceRepo;
12
18
  paymentServiceProvider: PaymentServiceProviderRepo;
19
+ task: TaskRepo;
13
20
  }) => Promise<{
14
21
  accountsReceivablesByServiceType: factory.assetTransaction.pay.IAccountsReceivableByServiceType[];
15
22
  }>;
@@ -12,9 +12,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.validateMovieTicket = void 0;
13
13
  const createDebug = require("debug");
14
14
  const factory = require("../../../factory");
15
+ const taskIdentifier_1 = require("../../../factory/taskIdentifier");
16
+ const settings_1 = require("../../../settings");
15
17
  const processPurchaseNumberAuth_1 = require("./processPurchaseNumberAuth");
16
18
  const debug = createDebug('chevre-domain:service:payment');
17
- function validateMovieTicket(params, paymentServiceId, useCheckByIdentifierIfNotYet) {
19
+ function validateMovieTicket(params, paymentServiceId, useCheckByIdentifierIfNotYet, purpose) {
18
20
  // tslint:disable-next-line:max-func-body-length
19
21
  return (repos) => __awaiter(this, void 0, void 0, function* () {
20
22
  var _a, _b, _c;
@@ -79,7 +81,8 @@ function validateMovieTicket(params, paymentServiceId, useCheckByIdentifierIfNot
79
81
  seller: { id: sellerId },
80
82
  screeningEvent: screeningEvent,
81
83
  paymentServiceId,
82
- useCheckByIdentifierIfNotYet
84
+ useCheckByIdentifierIfNotYet,
85
+ purpose
83
86
  })(repos);
84
87
  const accountsReceivablesByServiceType = [];
85
88
  // 券種ごとに枚数が足りているか
@@ -114,13 +117,31 @@ function checkByIdentifierIfNotYet(params) {
114
117
  let checkResult;
115
118
  if (params.useCheckByIdentifierIfNotYet === true) {
116
119
  // すでにCheckActionが存在すれば認証しない(2023-06-06~)
117
- const alreadyCheckedAction = (yield repos.action.search({
118
- limit: 1,
119
- page: 1,
120
- sort: { startDate: factory.sortType.Descending },
121
- typeOf: { $eq: factory.actionType.CheckAction },
122
- actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] },
123
- object: {
120
+ let alreadyCheckedAction;
121
+ // search from checkMovieTicketTask(2024-06-26~)
122
+ const placeOrderId = params.purpose.id;
123
+ if (typeof placeOrderId === 'string') {
124
+ if (settings_1.USE_EXPERIMENTAL_FEATURE) {
125
+ const taskIdentifier = (0, taskIdentifier_1.createCheckMovieTicketTaskIdentifier)({
126
+ project: { id: params.screeningEvent.project.id },
127
+ purpose: { id: placeOrderId },
128
+ object: {
129
+ id: params.paymentServiceId,
130
+ movieTicket: {
131
+ identifier: params.movieTicketIdentifier,
132
+ serviceOutput: { reservationFor: { id: params.screeningEvent.id } }
133
+ }
134
+ }
135
+ });
136
+ const existingCheckMovieTicketTask = yield repos.task.findByIdentifier({
137
+ project: { id: params.screeningEvent.project.id },
138
+ name: factory.taskName.CheckMovieTicket,
139
+ identifier: taskIdentifier
140
+ });
141
+ debug('existingCheckMovieTicketTask:', JSON.stringify(existingCheckMovieTicketTask), 'placeOrderId:', placeOrderId);
142
+ }
143
+ }
144
+ alreadyCheckedAction = (yield repos.action.search(Object.assign({ limit: 1, page: 1, sort: { startDate: factory.sortType.Descending }, typeOf: { $eq: factory.actionType.CheckAction }, actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] }, object: {
124
145
  typeOf: { $eq: factory.service.paymentService.PaymentServiceType.MovieTicket },
125
146
  id: { $eq: params.paymentServiceId },
126
147
  movieTickets: {
@@ -129,8 +150,8 @@ function checkByIdentifierIfNotYet(params) {
129
150
  reservationFor: { id: { $eq: params.screeningEvent.id } } // 指定のイベントにおいて
130
151
  }
131
152
  }
132
- }
133
- }, ['_id'], [])).shift();
153
+ } }, (typeof placeOrderId === 'string') ? { purpose: { id: { $in: [placeOrderId] } } } : undefined), ['_id'], [])).shift();
154
+ debug('alreadyCheckedAction:', JSON.stringify(alreadyCheckedAction), 'placeOrderId:', placeOrderId);
134
155
  if (alreadyCheckedAction !== undefined) {
135
156
  const recipe = yield repos.action.findRecipeByAction({
136
157
  project: { id: params.screeningEvent.project.id },
@@ -134,14 +134,14 @@ function confirmReserveTransaction(params, options) {
134
134
  // let updReserveResult: COA.factory.reserve.IUpdReserveResult | undefined;
135
135
  let recipe;
136
136
  switch (params.object.typeOf) {
137
- case 'COAReserveTransaction':
137
+ case factory.assetTransactionType.COAReserveTransaction:
138
138
  // 最適化されたタスクに対応するため、ここでIObject4COAを注文から生成する(2024-01-24~)
139
139
  const order = yield fixOrderAsPurpose({
140
140
  project: { id: params.project.id },
141
141
  purpose: params.purpose
142
142
  })(repos);
143
143
  const updReserveArgs = createConfirmObject4COAByOrder({ order, reservationNumber: params.object.transactionNumber });
144
- const object4coa = Object.assign(Object.assign({}, updReserveArgs), { transactionNumber: params.object.transactionNumber, typeOf: 'COAReserveTransaction' });
144
+ const object4coa = Object.assign(Object.assign({}, updReserveArgs), { transactionNumber: params.object.transactionNumber, typeOf: factory.assetTransactionType.COAReserveTransaction });
145
145
  confirmActionObject = object4coa;
146
146
  recipe = (0, factory_1.processConfirmCOAReserveResult2recipe)({
147
147
  processConfirmCOAReserveResult: { updReserveArgs: object4coa },
@@ -159,7 +159,7 @@ function confirmReserveTransaction(params, options) {
159
159
  try {
160
160
  const object = confirmActionAttributes.object;
161
161
  switch (object.typeOf) {
162
- case 'COAReserveTransaction':
162
+ case factory.assetTransactionType.COAReserveTransaction:
163
163
  // COA本予約
164
164
  const processConfirmCOAReserveResult = yield COAReserveService.confirm({
165
165
  project: { id: confirmActionAttributes.project.id },
@@ -1,6 +1,6 @@
1
- import type { IOperationExecute } from '../task';
1
+ import type { ICallResult, IExecutableTaskKeys, IOperationExecute } from '../task';
2
2
  import * as factory from '../../factory';
3
3
  /**
4
4
  * タスク実行関数
5
5
  */
6
- export declare function call(data: factory.task.IData<factory.taskName.ReturnPayTransaction>): IOperationExecute<void>;
6
+ export declare function call(params: Pick<factory.task.ITask<factory.taskName.ReturnPayTransaction>, IExecutableTaskKeys>): IOperationExecute<ICallResult>;