@chevre/domain 24.0.0-alpha.2 → 24.0.0-alpha.21

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 (177) hide show
  1. package/lib/chevre/repo/action/acceptCOAOffer.d.ts +23 -0
  2. package/lib/chevre/repo/action/acceptCOAOffer.js +64 -0
  3. package/lib/chevre/repo/action/acceptPay.d.ts +8 -0
  4. package/lib/chevre/repo/action/acceptPay.js +13 -0
  5. package/lib/chevre/repo/action/actionProcess.d.ts +115 -0
  6. package/lib/chevre/repo/action/actionProcess.js +293 -0
  7. package/lib/chevre/repo/action/authorizeOffer.d.ts +21 -0
  8. package/lib/chevre/repo/action/authorizeOffer.js +85 -0
  9. package/lib/chevre/repo/action/checkMovieTicket.d.ts +111 -0
  10. package/lib/chevre/repo/action/checkMovieTicket.js +200 -0
  11. package/lib/chevre/repo/action/checkThing.d.ts +8 -0
  12. package/lib/chevre/repo/action/checkThing.js +13 -0
  13. package/lib/chevre/repo/action.d.ts +9 -249
  14. package/lib/chevre/repo/action.js +308 -708
  15. package/lib/chevre/repo/aggregateAction.d.ts +102 -0
  16. package/lib/chevre/repo/aggregateAction.js +379 -0
  17. package/lib/chevre/repo/mongoose/schemas/transaction.js +31 -0
  18. package/lib/chevre/repo/orderInTransaction.d.ts +8 -0
  19. package/lib/chevre/repo/orderInTransaction.js +16 -2
  20. package/lib/chevre/repo/orderNumber.d.ts +3 -2
  21. package/lib/chevre/repo/orderNumber.js +23 -28
  22. package/lib/chevre/repo/transaction/moneyTransfer.d.ts +61 -0
  23. package/lib/chevre/repo/transaction/moneyTransfer.js +379 -0
  24. package/lib/chevre/repo/transaction/placeOrder.d.ts +140 -0
  25. package/lib/chevre/repo/transaction/placeOrder.js +528 -0
  26. package/lib/chevre/repo/transaction/returnOrder.d.ts +45 -0
  27. package/lib/chevre/repo/transaction/returnOrder.js +341 -0
  28. package/lib/chevre/repo/transaction.d.ts +1 -125
  29. package/lib/chevre/repo/transaction.js +726 -632
  30. package/lib/chevre/repository.d.ts +49 -0
  31. package/lib/chevre/repository.js +107 -2
  32. package/lib/chevre/service/aggregation/system.d.ts +10 -10
  33. package/lib/chevre/service/aggregation/system.js +9 -9
  34. package/lib/chevre/service/assetTransaction/pay/check.d.ts +5 -4
  35. package/lib/chevre/service/assetTransaction/pay/publishPaymentUrl.d.ts +5 -2
  36. package/lib/chevre/service/assetTransaction/pay/publishPaymentUrl.js +3 -3
  37. package/lib/chevre/service/assetTransaction/pay/start/factory.d.ts +51 -3
  38. package/lib/chevre/service/assetTransaction/pay/start/factory.js +58 -21
  39. package/lib/chevre/service/assetTransaction/pay/start/preStart/fixPaymentService.d.ts +10 -0
  40. package/lib/chevre/service/assetTransaction/pay/start/preStart/fixPaymentService.js +88 -0
  41. package/lib/chevre/service/assetTransaction/pay/start/processAuthorize.d.ts +55 -0
  42. package/lib/chevre/service/assetTransaction/pay/start/processAuthorize.js +56 -0
  43. package/lib/chevre/service/assetTransaction/pay/start/processAuthorizeMovieTicket.d.ts +3 -1
  44. package/lib/chevre/service/assetTransaction/pay/start/processAuthorizeMovieTicket.js +1 -11
  45. package/lib/chevre/service/assetTransaction/pay/start.d.ts +2 -0
  46. package/lib/chevre/service/assetTransaction/pay/start.js +8 -132
  47. package/lib/chevre/service/notification/triggerWebhook.d.ts +7 -6
  48. package/lib/chevre/service/offer/event/authorize.d.ts +2 -2
  49. package/lib/chevre/service/offer/event/authorize.js +3 -3
  50. package/lib/chevre/service/offer/event/issueEventOfferTicket.d.ts +2 -2
  51. package/lib/chevre/service/offer/event/issueEventOfferTicket.js +1 -1
  52. package/lib/chevre/service/offer/event/voidTransaction/processVoidTransaction4chevre.d.ts +0 -2
  53. package/lib/chevre/service/offer/event/voidTransaction/processVoidTransaction4chevre.js +1 -0
  54. package/lib/chevre/service/offer/event/voidTransaction.d.ts +2 -2
  55. package/lib/chevre/service/offer/event/voidTransaction.js +2 -2
  56. package/lib/chevre/service/offer/event/voidTransactionByActionId.d.ts +3 -3
  57. package/lib/chevre/service/offer/event/voidTransactionByActionId.js +2 -2
  58. package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.d.ts +16 -5
  59. package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.js +7 -7
  60. package/lib/chevre/service/offer/eventServiceByCOA/authorize.d.ts +6 -4
  61. package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +3 -10
  62. package/lib/chevre/service/offer/eventServiceByCOA/authorizeByAcceptAction.js +21 -13
  63. package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +19 -10
  64. package/lib/chevre/service/offer/eventServiceByCOA/findAcceptAction.d.ts +2 -2
  65. package/lib/chevre/service/offer/moneyTransfer/authorize.d.ts +2 -2
  66. package/lib/chevre/service/offer/moneyTransfer/authorize.js +6 -3
  67. package/lib/chevre/service/offer/moneyTransfer/voidTransaction.d.ts +2 -2
  68. package/lib/chevre/service/offer/moneyTransfer/voidTransaction.js +4 -1
  69. package/lib/chevre/service/offer/product.d.ts +3 -3
  70. package/lib/chevre/service/offer/product.js +4 -4
  71. package/lib/chevre/service/order/confirmPayTransaction.d.ts +0 -2
  72. package/lib/chevre/service/order/confirmPayTransaction.js +1 -0
  73. package/lib/chevre/service/order/findPlaceOrderTransaction.d.ts +2 -2
  74. package/lib/chevre/service/order/findPlaceOrderTransaction.js +1 -1
  75. package/lib/chevre/service/order/onAssetTransactionStatusChanged/isDeliverable.d.ts +16 -0
  76. package/lib/chevre/service/order/onAssetTransactionStatusChanged/isDeliverable.js +97 -0
  77. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionCanceled.d.ts +21 -0
  78. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionCanceled.js +86 -0
  79. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionConfirmed.d.ts +22 -0
  80. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onPayTransactionConfirmed.js +112 -0
  81. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.d.ts +22 -0
  82. package/lib/chevre/service/order/onAssetTransactionStatusChanged/onReserveTransactionConfirmed.js +74 -0
  83. package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.d.ts +25 -0
  84. package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.js +111 -0
  85. package/lib/chevre/service/order/onAssetTransactionStatusChanged/processing2inTransit.d.ts +16 -0
  86. package/lib/chevre/service/order/onAssetTransactionStatusChanged/processing2inTransit.js +74 -0
  87. package/lib/chevre/service/order/onAssetTransactionStatusChanged.d.ts +8 -30
  88. package/lib/chevre/service/order/onAssetTransactionStatusChanged.js +37 -348
  89. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDelivered.d.ts +6 -7
  90. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially.d.ts +6 -5
  91. package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.d.ts +7 -6
  92. package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.js +1 -1
  93. package/lib/chevre/service/order/payOrder.d.ts +2 -2
  94. package/lib/chevre/service/order/placeOrder/createPlacingOrderFromExistingTransaction.d.ts +2 -2
  95. package/lib/chevre/service/order/placeOrder/createPlacingOrderFromExistingTransaction.js +1 -1
  96. package/lib/chevre/service/order/placeOrder.d.ts +13 -12
  97. package/lib/chevre/service/order/returnOrder.d.ts +2 -2
  98. package/lib/chevre/service/order/returnOrder.js +1 -1
  99. package/lib/chevre/service/order/sendOrder.d.ts +6 -6
  100. package/lib/chevre/service/order/sendOrder.js +10 -8
  101. package/lib/chevre/service/order.d.ts +3 -6
  102. package/lib/chevre/service/order.js +3 -9
  103. package/lib/chevre/service/payment/any/{fixOrderAsNeeded.d.ts → authorize/fixOrderAsNeeded.d.ts} +6 -6
  104. package/lib/chevre/service/payment/any/{fixOrderAsNeeded.js → authorize/fixOrderAsNeeded.js} +5 -8
  105. package/lib/chevre/service/payment/any/authorize/fixTransactionNumber.d.ts +3 -3
  106. package/lib/chevre/service/payment/any/authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.d.ts +3 -3
  107. package/lib/chevre/service/payment/any/authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.js +1 -1
  108. package/lib/chevre/service/payment/any/authorize.d.ts +92 -0
  109. package/lib/chevre/service/payment/any/authorize.js +225 -0
  110. package/lib/chevre/service/payment/any/findAcceptAction.d.ts +43 -0
  111. package/lib/chevre/service/payment/any/findAcceptAction.js +94 -0
  112. package/lib/chevre/service/payment/any/findAuthorizeAction.d.ts +41 -0
  113. package/lib/chevre/service/payment/any/findAuthorizeAction.js +83 -0
  114. package/lib/chevre/service/payment/any/findCheckAction.d.ts +45 -0
  115. package/lib/chevre/service/payment/any/findCheckAction.js +89 -0
  116. package/lib/chevre/service/payment/any/invalidatePaymentUrl.d.ts +28 -0
  117. package/lib/chevre/service/payment/any/invalidatePaymentUrl.js +185 -0
  118. package/lib/chevre/service/payment/any/onPayActionCompleted.d.ts +7 -3
  119. package/lib/chevre/service/payment/any/onPayActionCompleted.js +3 -0
  120. package/lib/chevre/service/payment/any/processVoidPayTransaction.d.ts +29 -0
  121. package/lib/chevre/service/payment/any/processVoidPayTransaction.js +125 -0
  122. package/lib/chevre/service/payment/any/publishPaymentUrl/fixTransactionNumberOnPublishPaymentUrl.d.ts +2 -2
  123. package/lib/chevre/service/payment/any/publishPaymentUrl.d.ts +66 -0
  124. package/lib/chevre/service/payment/any/publishPaymentUrl.js +133 -0
  125. package/lib/chevre/service/payment/any/voidPayTransaction.d.ts +31 -0
  126. package/lib/chevre/service/payment/any/voidPayTransaction.js +38 -0
  127. package/lib/chevre/service/payment/any.d.ts +8 -305
  128. package/lib/chevre/service/payment/any.js +17 -857
  129. package/lib/chevre/service/payment/movieTicket/authorize.d.ts +2 -0
  130. package/lib/chevre/service/payment/movieTicket/checkMovieTicket.d.ts +3 -3
  131. package/lib/chevre/service/payment/movieTicket/checkMovieTicket.js +3 -3
  132. package/lib/chevre/service/payment/movieTicket/validation.d.ts +11 -10
  133. package/lib/chevre/service/payment/movieTicket/validation.js +19 -15
  134. package/lib/chevre/service/report/telemetry.d.ts +4 -0
  135. package/lib/chevre/service/report/telemetry.js +7 -12
  136. package/lib/chevre/service/task/acceptCOAOffer.js +11 -6
  137. package/lib/chevre/service/task/authorizePayment.js +6 -2
  138. package/lib/chevre/service/task/checkMovieTicket.js +3 -3
  139. package/lib/chevre/service/task/checkResource.js +2 -2
  140. package/lib/chevre/service/task/confirmPayTransaction.js +2 -2
  141. package/lib/chevre/service/task/deleteTransaction.js +7 -1
  142. package/lib/chevre/service/task/onAssetTransactionStatusChanged.js +4 -2
  143. package/lib/chevre/service/task/onOrderPaymentCompleted.js +2 -2
  144. package/lib/chevre/service/task/payment/payByTask.d.ts +14 -12
  145. package/lib/chevre/service/task/placeOrder.js +6 -4
  146. package/lib/chevre/service/task/publishPaymentUrl.js +8 -4
  147. package/lib/chevre/service/task/returnOrder.js +4 -4
  148. package/lib/chevre/service/task/returnPayTransaction.js +4 -3
  149. package/lib/chevre/service/task/sendOrder.js +4 -4
  150. package/lib/chevre/service/task/voidMoneyTransferTransaction.js +6 -3
  151. package/lib/chevre/service/task/voidPayTransaction.js +4 -2
  152. package/lib/chevre/service/task/voidRegisterServiceTransaction.js +3 -3
  153. package/lib/chevre/service/task/voidReserveTransaction.js +4 -3
  154. package/lib/chevre/service/transaction/deleteTransaction.d.ts +6 -0
  155. package/lib/chevre/service/transaction/deleteTransaction.js +56 -14
  156. package/lib/chevre/service/transaction/moneyTransfer.d.ts +5 -5
  157. package/lib/chevre/service/transaction/moneyTransfer.js +5 -5
  158. package/lib/chevre/service/transaction/placeOrder/confirm.d.ts +2 -2
  159. package/lib/chevre/service/transaction/placeOrder/confirm.js +10 -9
  160. package/lib/chevre/service/transaction/placeOrder/exportTasksById.d.ts +7 -6
  161. package/lib/chevre/service/transaction/placeOrder/exportTasksById.js +1 -1
  162. package/lib/chevre/service/transaction/placeOrder/{publishOrderNumberIfNotExist.d.ts → issueOrderNumberIfNotExist.d.ts} +4 -4
  163. package/lib/chevre/service/transaction/placeOrder/{publishOrderNumberIfNotExist.js → issueOrderNumberIfNotExist.js} +21 -13
  164. package/lib/chevre/service/transaction/placeOrder/publishConfirmationNumberIfNotExist.d.ts +2 -2
  165. package/lib/chevre/service/transaction/placeOrder/publishConfirmationNumberIfNotExist.js +3 -3
  166. package/lib/chevre/service/transaction/placeOrder/start.d.ts +3 -3
  167. package/lib/chevre/service/transaction/placeOrder/start.js +2 -2
  168. package/lib/chevre/service/transaction/placeOrder/updateAgent.d.ts +23 -0
  169. package/lib/chevre/service/transaction/placeOrder/updateAgent.js +126 -0
  170. package/lib/chevre/service/transaction/placeOrder.d.ts +2 -1
  171. package/lib/chevre/service/transaction/placeOrder.js +3 -1
  172. package/lib/chevre/service/transaction/returnOrder/preStart.d.ts +1 -1
  173. package/lib/chevre/service/transaction/returnOrder.d.ts +16 -14
  174. package/lib/chevre/service/transaction/returnOrder.js +4 -4
  175. package/lib/chevre/service/transaction.d.ts +9 -21
  176. package/lib/chevre/service/transaction.js +5 -111
  177. package/package.json +4 -8
@@ -0,0 +1,528 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.PlaceOrderRepo = void 0;
30
+ const moment_1 = __importDefault(require("moment"));
31
+ const transaction_1 = require("../../eventEmitter/transaction");
32
+ const factory = __importStar(require("../../factory"));
33
+ const settings_1 = require("../../settings");
34
+ const transaction_2 = require("../mongoose/schemas/transaction");
35
+ const AVAILABLE_PROJECT_FIELDS = [
36
+ 'project',
37
+ 'status',
38
+ 'typeOf',
39
+ 'agent',
40
+ 'seller',
41
+ 'object',
42
+ 'expires',
43
+ 'startDate',
44
+ 'endDate',
45
+ 'instrument',
46
+ 'result',
47
+ 'potentialActions',
48
+ // 'recipient',
49
+ 'error',
50
+ 'tasksExportAction',
51
+ ];
52
+ /**
53
+ * 注文取引リポジトリ
54
+ */
55
+ class PlaceOrderRepo {
56
+ transactionModel;
57
+ constructor(connection) {
58
+ this.transactionModel = connection.model(transaction_2.modelName, (0, transaction_2.createSchema)());
59
+ }
60
+ static CREATE_MONGO_CONDITIONS(params) {
61
+ if (params.typeOf !== factory.transactionType.PlaceOrder) {
62
+ throw new factory.errors.Argument('typeOf', `must be ${factory.transactionType.PlaceOrder}`);
63
+ }
64
+ const andConditions = [];
65
+ const projectIdEq = params.project?.id?.$eq;
66
+ if (typeof projectIdEq === 'string') {
67
+ andConditions.push({ 'project.id': { $eq: projectIdEq } });
68
+ }
69
+ if (typeof params.typeOf === 'string') {
70
+ andConditions.push({ typeOf: { $eq: params.typeOf } });
71
+ }
72
+ if (params.startFrom !== undefined) {
73
+ andConditions.push({
74
+ startDate: { $gte: params.startFrom }
75
+ });
76
+ }
77
+ if (params.startThrough !== undefined) {
78
+ andConditions.push({
79
+ startDate: { $lte: params.startThrough }
80
+ });
81
+ }
82
+ if (params.endFrom !== undefined) {
83
+ andConditions.push({
84
+ endDate: {
85
+ $exists: true,
86
+ $gte: params.endFrom
87
+ }
88
+ });
89
+ }
90
+ if (params.endThrough !== undefined) {
91
+ andConditions.push({
92
+ endDate: {
93
+ $exists: true,
94
+ $lt: params.endThrough
95
+ }
96
+ });
97
+ }
98
+ if (Array.isArray(params.ids)) {
99
+ andConditions.push({
100
+ _id: { $in: params.ids }
101
+ });
102
+ }
103
+ if (Array.isArray(params.statuses)) {
104
+ andConditions.push({ status: { $in: params.statuses } });
105
+ }
106
+ const statusIn = params.status?.$in;
107
+ if (Array.isArray(statusIn)) {
108
+ andConditions.push({ status: { $in: statusIn } });
109
+ }
110
+ if (params.agent !== undefined) {
111
+ if (params.agent.typeOf !== undefined) {
112
+ andConditions.push({
113
+ 'agent.typeOf': {
114
+ $exists: true,
115
+ $eq: params.agent.typeOf
116
+ }
117
+ });
118
+ }
119
+ if (Array.isArray(params.agent.ids)) {
120
+ andConditions.push({
121
+ 'agent.id': {
122
+ $exists: true,
123
+ $in: params.agent.ids
124
+ }
125
+ });
126
+ }
127
+ if (Array.isArray(params.agent.identifiers)) {
128
+ andConditions.push({
129
+ 'agent.identifier': {
130
+ $exists: true,
131
+ $in: params.agent.identifiers
132
+ }
133
+ });
134
+ }
135
+ }
136
+ const tasksExportActionStatusIn = params.tasksExportAction?.actionStatus?.$in;
137
+ if (Array.isArray(tasksExportActionStatusIn)) {
138
+ andConditions.push({ 'tasksExportAction.actionStatus': { $exists: true, $in: tasksExportActionStatusIn } });
139
+ }
140
+ const tasksExportActionStatusEq = params.tasksExportAction?.actionStatus?.$eq;
141
+ if (typeof tasksExportActionStatusEq === 'string') {
142
+ andConditions.push({ 'tasksExportAction.actionStatus': { $exists: true, $eq: tasksExportActionStatusEq } });
143
+ }
144
+ const sellerIdIn = params.seller?.ids;
145
+ if (Array.isArray(sellerIdIn)) {
146
+ andConditions.push({ 'seller.id': { $exists: true, $in: sellerIdIn } });
147
+ }
148
+ const resultOrderNumberIn = params.result?.order?.orderNumbers;
149
+ if (Array.isArray(resultOrderNumberIn)) {
150
+ andConditions.push({ 'result.order.orderNumber': { $exists: true, $in: resultOrderNumberIn } });
151
+ }
152
+ const resultOrderConfirmationNumberEq = params.result?.order?.confirmationNumber?.$eq;
153
+ if (typeof resultOrderConfirmationNumberEq === 'string') {
154
+ andConditions.push({
155
+ 'result.order.confirmationNumber': { $exists: true, $eq: resultOrderConfirmationNumberEq }
156
+ });
157
+ }
158
+ const objectOrderNumberEq = params.object?.orderNumber?.$eq;
159
+ if (typeof objectOrderNumberEq === 'string') {
160
+ andConditions.push({ 'object.orderNumber': { $exists: true, $eq: objectOrderNumberEq } });
161
+ }
162
+ return andConditions;
163
+ }
164
+ async countPlaceOrder(params) {
165
+ const { limit } = params;
166
+ const conditions = PlaceOrderRepo.CREATE_MONGO_CONDITIONS(params);
167
+ const query = this.transactionModel.countDocuments((conditions.length > 0) ? { $and: conditions } : {});
168
+ if (typeof limit === 'number' && limit >= 0) {
169
+ query.limit(limit);
170
+ }
171
+ const count = await query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
172
+ .exec();
173
+ return { count };
174
+ }
175
+ /**
176
+ * 取引を検索する
177
+ */
178
+ async findPlaceOrderTransactions(params) {
179
+ const { inclusion } = params;
180
+ const conditions = PlaceOrderRepo.CREATE_MONGO_CONDITIONS(params);
181
+ let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
182
+ if (Array.isArray(inclusion) && inclusion.length > 0) {
183
+ positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(key));
184
+ }
185
+ const projection = {
186
+ _id: 0,
187
+ id: { $toString: '$_id' },
188
+ ...Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1])))
189
+ };
190
+ const query = this.transactionModel.find((conditions.length > 0) ? { $and: conditions } : {})
191
+ .select(projection);
192
+ if (typeof params.limit === 'number' && params.limit > 0) {
193
+ const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
194
+ query.limit(params.limit)
195
+ .skip(params.limit * (page - 1));
196
+ }
197
+ if (params.sort?.startDate !== undefined) {
198
+ query.sort({ startDate: params.sort.startDate });
199
+ }
200
+ // const explainResult = await (<any>query).explain();
201
+ // console.log(explainResult[0].executionStats.allPlansExecution.map((e: any) => e.executionStages.inputStage));
202
+ return query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
203
+ .lean()
204
+ .exec();
205
+ }
206
+ /**
207
+ * 進行中取引に保管された採用済決済方法を検索する
208
+ */
209
+ async findInProgressPaymentMethodId(params) {
210
+ const doc = await this.transactionModel.findOne({
211
+ _id: { $eq: params.id },
212
+ typeOf: { $eq: factory.transactionType.PlaceOrder },
213
+ status: { $eq: factory.transactionStatusType.InProgress }
214
+ }, { 'object.paymentMethods': 1 })
215
+ .lean() // 2024-08-26~
216
+ .exec();
217
+ if (doc === null) {
218
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${factory.transactionType.PlaceOrder} ${factory.transactionStatusType.InProgress} not found`);
219
+ }
220
+ return doc.object.paymentMethods;
221
+ }
222
+ /**
223
+ * 取引の注文番号を検索する
224
+ */
225
+ async findInProgressOrderNumberById(params) {
226
+ const doc = await this.transactionModel.findOne({
227
+ _id: { $eq: params.id },
228
+ typeOf: { $eq: factory.transactionType.PlaceOrder },
229
+ status: { $eq: factory.transactionStatusType.InProgress }
230
+ }, { 'object.orderNumber': 1 })
231
+ .lean() // 2024-08-26~
232
+ .exec();
233
+ if (doc === null) {
234
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${factory.transactionType.PlaceOrder} ${factory.transactionStatusType.InProgress} not found`);
235
+ }
236
+ return doc.object.orderNumber;
237
+ }
238
+ /**
239
+ * 取引の確認番号を検索する
240
+ */
241
+ async findInProgressConfirmationNumberById(params) {
242
+ const doc = await this.transactionModel.findOne({
243
+ _id: { $eq: params.id },
244
+ typeOf: { $eq: factory.transactionType.PlaceOrder },
245
+ status: { $in: params.status.$in }
246
+ }, { 'object.confirmationNumber': 1 })
247
+ .lean() // 2024-08-26~
248
+ .exec();
249
+ if (doc === null) {
250
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${factory.transactionType.PlaceOrder} ${params.status.$in.join(' or ')} not found`);
251
+ }
252
+ return doc.object.confirmationNumber;
253
+ }
254
+ /**
255
+ * 取引期限変更
256
+ */
257
+ async updateExpires(params) {
258
+ const doc = await this.transactionModel.findOneAndUpdate({
259
+ _id: { $eq: params.id },
260
+ typeOf: { $eq: params.typeOf },
261
+ status: { $eq: factory.transactionStatusType.InProgress }
262
+ }, {
263
+ $set: {
264
+ expires: params.expires
265
+ }
266
+ }, {
267
+ projection: { _id: 1 }
268
+ })
269
+ .lean()
270
+ .exec();
271
+ if (doc === null) {
272
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
273
+ }
274
+ }
275
+ /**
276
+ * 取引オブジェクトを更新
277
+ * 注文名称など
278
+ */
279
+ async updateObject(params) {
280
+ const doc = await this.transactionModel.findOneAndUpdate({
281
+ _id: { $eq: params.id },
282
+ typeOf: { $eq: params.typeOf },
283
+ status: { $eq: factory.transactionStatusType.InProgress }
284
+ }, {
285
+ $set: {
286
+ ...(typeof params.object?.name === 'string') ? { 'object.name': params.object.name } : undefined
287
+ }
288
+ }, {
289
+ projection: { _id: 1 }
290
+ })
291
+ .lean()
292
+ .exec();
293
+ if (doc === null) {
294
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
295
+ }
296
+ }
297
+ /**
298
+ * 特定の進行中取引を更新する(汎用)
299
+ */
300
+ async findByIdAndUpdateInProgress(params) {
301
+ await this.transactionModel.findOneAndUpdate({
302
+ _id: { $eq: params.id },
303
+ status: { $eq: factory.transactionStatusType.InProgress }
304
+ }, params.update, {
305
+ // new: true,
306
+ projection: { _id: 1 }
307
+ })
308
+ .lean()
309
+ .exec()
310
+ .then((doc) => {
311
+ if (doc === null) {
312
+ throw new factory.errors.ArgumentNull(this.transactionModel.modelName);
313
+ }
314
+ });
315
+ }
316
+ /**
317
+ * 進行中取引のobjectに注文番号を保管する
318
+ */
319
+ async saveOrderNumberIfNotExist(params) {
320
+ const result = await this.transactionModel.updateOne({
321
+ _id: { $eq: params.id },
322
+ status: { $eq: factory.transactionStatusType.InProgress },
323
+ 'object.orderNumber': { $exists: false }
324
+ }, { $set: { 'object.orderNumber': params.orderNumber } })
325
+ .exec();
326
+ return { modifiedCount: result.modifiedCount };
327
+ }
328
+ async saveConfirmationNumberIfNotExist(params) {
329
+ await this.transactionModel.updateOne({
330
+ _id: { $eq: params.id },
331
+ // status: { $eq: factory.transactionStatusType.InProgress },
332
+ status: { $in: params.status.$in },
333
+ 'object.confirmationNumber': { $exists: false }
334
+ }, { $set: { 'object.confirmationNumber': params.confirmationNumber } })
335
+ .exec();
336
+ }
337
+ /**
338
+ * 進行中の注文取引を取得する
339
+ */
340
+ async findPlaceOrderInProgressById(params, inclusion // make required(2024-05-29~)
341
+ ) {
342
+ let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
343
+ if (Array.isArray(inclusion) && inclusion.length > 0) {
344
+ positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(key));
345
+ }
346
+ else {
347
+ throw new factory.errors.NotImplemented('inclusion must be specified'); // 2024-08-26~
348
+ }
349
+ const projection = {
350
+ _id: 0,
351
+ id: { $toString: '$_id' },
352
+ ...Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1])))
353
+ };
354
+ const filter = {
355
+ _id: { $eq: params.id },
356
+ typeOf: { $eq: params.typeOf },
357
+ status: { $eq: factory.transactionStatusType.InProgress },
358
+ // expiresを条件に追加(2023-05-12~),
359
+ expires: { $gt: new Date() }
360
+ };
361
+ const doc = await this.transactionModel.findOne(filter, projection)
362
+ .lean()
363
+ .exec();
364
+ if (doc === null) {
365
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
366
+ }
367
+ return doc;
368
+ }
369
+ /**
370
+ * 特定注文取引参照
371
+ */
372
+ async findPlaceOrderById(params, inclusion // make required(2024-05-31~)
373
+ ) {
374
+ let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
375
+ if (Array.isArray(inclusion) && inclusion.length > 0) {
376
+ positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(key));
377
+ }
378
+ else {
379
+ throw new factory.errors.NotImplemented('inclusion must be specified'); // 2024-08-26~
380
+ }
381
+ const projection = {
382
+ _id: 0,
383
+ id: { $toString: '$_id' },
384
+ ...Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1])))
385
+ };
386
+ const doc = await this.transactionModel.findOne({
387
+ _id: { $eq: params.id },
388
+ typeOf: { $eq: params.typeOf }
389
+ }, projection)
390
+ .lean() // 2024-08-26~
391
+ .exec();
392
+ if (doc === null) {
393
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} not found`);
394
+ }
395
+ return doc;
396
+ }
397
+ /**
398
+ * 取引を開始する
399
+ */
400
+ async startPlaceOrder(params) {
401
+ const status = factory.transactionStatusType.InProgress;
402
+ const tasksExportAction = { actionStatus: factory.actionStatusType.PotentialActionStatus };
403
+ // const tasksExportationStatus = factory.transactionTasksExportationStatus.Unexported; // discontinue(2024-06-20~)
404
+ const startDate = new Date();
405
+ let expires;
406
+ const { typeOf } = params;
407
+ // expiresInSecondsの指定があれば優先して適用する(2022-11-25~)
408
+ if (typeof params.expiresInSeconds === 'number' && params.expiresInSeconds > 0) {
409
+ expires = (0, moment_1.default)(startDate)
410
+ .add(params.expiresInSeconds, 'seconds')
411
+ .toDate();
412
+ }
413
+ else {
414
+ throw new factory.errors.ArgumentNull('expiresInSeconds');
415
+ }
416
+ let creatingTransaction;
417
+ if (typeOf === factory.transactionType.PlaceOrder) {
418
+ const { agent, project, object, seller, instrument } = params;
419
+ creatingTransaction = {
420
+ status, startDate, expires, typeOf, tasksExportAction,
421
+ agent, project, seller, object,
422
+ ...(typeof instrument?.id === 'string') ? { instrument } : undefined
423
+ };
424
+ }
425
+ else {
426
+ throw new factory.errors.NotImplemented(`${typeOf} not implemented`);
427
+ }
428
+ // reimplemnt with insertMany(2024-05-30~)
429
+ const result = await this.transactionModel.insertMany(creatingTransaction, { rawResult: true });
430
+ const id = result.insertedIds?.[0]?.toHexString();
431
+ if (typeof id !== 'string') {
432
+ throw new factory.errors.Internal('transaction not saved');
433
+ }
434
+ // 取引開始時にも取引イベントエミッター連携(2024-03-21~)
435
+ transaction_1.transactionEventEmitter.emitTransactionStatusChanged({ id, typeOf, status });
436
+ return { expires, id, startDate, status }; // minimize response(2024-05-30~)
437
+ }
438
+ /**
439
+ * 取引を確定する
440
+ */
441
+ async confirmPlaceOrder(params) {
442
+ const endDate = new Date();
443
+ const doc = await this.transactionModel.findOneAndUpdate({
444
+ _id: { $eq: params.id },
445
+ typeOf: { $eq: params.typeOf },
446
+ status: { $eq: factory.transactionStatusType.InProgress },
447
+ expires: { $gt: endDate } // add expires(2025-02-27~)
448
+ }, {
449
+ status: factory.transactionStatusType.Confirmed, // ステータス変更
450
+ endDate,
451
+ // 'object.authorizeActions': params.authorizeActions,
452
+ result: params.result, // resultを更新
453
+ potentialActions: params.potentialActions // resultを更新
454
+ }, {
455
+ new: true,
456
+ projection: { _id: 1 }
457
+ })
458
+ .lean()
459
+ .exec();
460
+ // NotFoundであれば取引状態確認
461
+ if (doc === null) {
462
+ const { expires, status } = await this.findPlaceOrderById({ typeOf: params.typeOf, id: params.id }, ['expires', 'status']);
463
+ if (status === factory.transactionStatusType.Confirmed) {
464
+ // すでに確定済の場合スルー
465
+ }
466
+ else if (status === factory.transactionStatusType.Expired) {
467
+ throw new factory.errors.Argument('Transaction id', 'Already expired');
468
+ }
469
+ else if (status === factory.transactionStatusType.Canceled) {
470
+ throw new factory.errors.Argument('Transaction id', 'Already canceled');
471
+ }
472
+ else {
473
+ if ((0, moment_1.default)(expires)
474
+ .isSameOrBefore((0, moment_1.default)(endDate))) {
475
+ throw new factory.errors.Argument('Transaction id', 'potentially expired');
476
+ }
477
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
478
+ }
479
+ }
480
+ transaction_1.transactionEventEmitter.emitTransactionStatusChanged({
481
+ id: params.id,
482
+ typeOf: params.typeOf,
483
+ status: factory.transactionStatusType.Confirmed
484
+ });
485
+ }
486
+ /**
487
+ * 取引を中止する
488
+ */
489
+ async cancelPlaceOrder(params) {
490
+ const endDate = new Date();
491
+ // 進行中ステータスの取引を中止する
492
+ const doc = await this.transactionModel.findOneAndUpdate({
493
+ typeOf: params.typeOf,
494
+ _id: params.id,
495
+ status: factory.transactionStatusType.InProgress
496
+ }, {
497
+ status: factory.transactionStatusType.Canceled,
498
+ endDate: endDate
499
+ }, {
500
+ new: true,
501
+ projection: { _id: 1 }
502
+ })
503
+ .lean()
504
+ .exec();
505
+ // NotFoundであれば取引状態確認
506
+ if (doc === null) {
507
+ const { status } = await this.findPlaceOrderById(params, ['status']);
508
+ if (status === factory.transactionStatusType.Canceled) {
509
+ // すでに中止済の場合スルー
510
+ }
511
+ else if (status === factory.transactionStatusType.Expired) {
512
+ throw new factory.errors.Argument('Transaction id', 'Transaction already expired');
513
+ }
514
+ else if (status === factory.transactionStatusType.Confirmed) {
515
+ throw new factory.errors.Argument('Transaction id', 'Confirmed transaction unable to cancel');
516
+ }
517
+ else {
518
+ throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
519
+ }
520
+ }
521
+ transaction_1.transactionEventEmitter.emitTransactionStatusChanged({
522
+ id: params.id,
523
+ typeOf: params.typeOf,
524
+ status: factory.transactionStatusType.Canceled
525
+ });
526
+ }
527
+ }
528
+ exports.PlaceOrderRepo = PlaceOrderRepo;
@@ -0,0 +1,45 @@
1
+ import type { Connection, FilterQuery } from 'mongoose';
2
+ import * as factory from '../../factory';
3
+ type IKeyOfProjection = keyof Pick<factory.transaction.ITransaction<factory.transactionType.ReturnOrder>, 'agent' | 'endDate' | 'expires' | 'project' | 'startDate' | 'status' | 'typeOf'> | Exclude<keyof factory.transaction.ITransaction<factory.transactionType.ReturnOrder>, 'id'>;
4
+ type IStartedTransactionFields = 'expires' | 'id' | 'startDate' | 'status';
5
+ export type IStartedTransaction = Pick<factory.transaction.ITransaction<factory.transactionType.ReturnOrder>, IStartedTransactionFields>;
6
+ /**
7
+ * 返品取引リポジトリ
8
+ */
9
+ export declare class ReturnOrderRepo {
10
+ private readonly transactionModel;
11
+ constructor(connection: Connection);
12
+ static CREATE_MONGO_CONDITIONS(params: factory.transaction.ISearchConditions<factory.transactionType.ReturnOrder>): FilterQuery<import("@chevre/factory/lib/transaction/returnOrder").ITransaction>[];
13
+ countReturnOrder(params: factory.transaction.ISearchConditions<factory.transactionType.ReturnOrder>): Promise<{
14
+ count: number;
15
+ }>;
16
+ /**
17
+ * 取引を検索する
18
+ */
19
+ findReturnOrderTransactions(params: factory.transaction.ISearchConditions<factory.transactionType.ReturnOrder> & {
20
+ inclusion: IKeyOfProjection[];
21
+ }): Promise<(Pick<factory.transaction.ITransaction<factory.transactionType.ReturnOrder>, IKeyOfProjection> & {
22
+ id: string;
23
+ })[]>;
24
+ /**
25
+ * 取引を開始する
26
+ */
27
+ startReturnOrder(params: factory.transaction.IStartParams<factory.transactionType.ReturnOrder>): Promise<IStartedTransaction>;
28
+ /**
29
+ * 特定取引検索
30
+ */
31
+ findReturnOrderById(params: {
32
+ typeOf: factory.transactionType.ReturnOrder;
33
+ id: string;
34
+ }, inclusion: IKeyOfProjection[]): Promise<factory.transaction.ITransaction<factory.transactionType.ReturnOrder>>;
35
+ /**
36
+ * 取引を確定する
37
+ */
38
+ confirmReturnOrder(params: {
39
+ typeOf: factory.transactionType.ReturnOrder;
40
+ id: string;
41
+ result: factory.transaction.IResult<factory.transactionType.ReturnOrder>;
42
+ potentialActions: factory.transaction.IPotentialActions<factory.transactionType.ReturnOrder>;
43
+ }): Promise<void>;
44
+ }
45
+ export {};