@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
@@ -32,23 +32,10 @@ const transaction_1 = require("../eventEmitter/transaction");
32
32
  const factory = __importStar(require("../factory"));
33
33
  const settings_1 = require("../settings");
34
34
  const transaction_2 = require("./mongoose/schemas/transaction");
35
- const AVAILABLE_PROJECT_FIELDS = [
36
- 'project',
37
- 'status',
38
- 'typeOf',
39
- 'agent',
40
- 'recipient',
41
- 'seller',
42
- 'error',
43
- 'result',
44
- 'object',
45
- 'expires',
46
- 'startDate',
47
- 'endDate',
48
- 'tasksExportAction',
49
- 'potentialActions',
50
- 'instrument'
51
- ];
35
+ // type IOmittedFieldsInProgress = 'tasksExportAction' | 'tasksExportedAt' | 'tasksExportationStatus';
36
+ // export type IMoneyTransferTransactionInProgress = Omit<factory.transaction.moneyTransfer.ITransaction, IOmittedFieldsInProgress>;
37
+ // type IStartedTransactionFields = 'expires' | 'id' | 'startDate' | 'status';
38
+ // export type IStartedTransaction = Pick<factory.transaction.ITransaction<factory.transactionType>, IStartedTransactionFields>;
52
39
  /**
53
40
  * 取引リポジトリ
54
41
  */
@@ -57,489 +44,547 @@ class TransactionRepo {
57
44
  constructor(connection) {
58
45
  this.transactionModel = connection.model(transaction_2.modelName, (0, transaction_2.createSchema)());
59
46
  }
60
- static CREATE_MONGO_CONDITIONS(params) {
61
- const andConditions = [];
62
- const projectIdEq = params.project?.id?.$eq;
63
- /* istanbul ignore else */
64
- if (typeof projectIdEq === 'string') {
65
- andConditions.push({ 'project.id': { $eq: projectIdEq } });
66
- }
67
- /* istanbul ignore else */
68
- if (typeof params.typeOf === 'string') {
69
- andConditions.push({ typeOf: { $eq: params.typeOf } });
70
- }
71
- /* istanbul ignore else */
72
- if (params.startFrom !== undefined) {
73
- andConditions.push({
74
- startDate: { $gte: params.startFrom }
75
- });
76
- }
77
- /* istanbul ignore else */
78
- if (params.startThrough !== undefined) {
79
- andConditions.push({
80
- startDate: { $lte: params.startThrough }
81
- });
82
- }
83
- /* istanbul ignore else */
84
- if (params.endFrom !== undefined) {
85
- andConditions.push({
86
- endDate: {
87
- $exists: true,
88
- $gte: params.endFrom
89
- }
90
- });
91
- }
92
- /* istanbul ignore else */
93
- if (params.endThrough !== undefined) {
94
- andConditions.push({
95
- endDate: {
96
- $exists: true,
97
- $lt: params.endThrough
98
- }
99
- });
100
- }
101
- /* istanbul ignore else */
102
- if (Array.isArray(params.ids)) {
103
- andConditions.push({
104
- _id: { $in: params.ids }
105
- });
106
- }
107
- /* istanbul ignore else */
108
- if (Array.isArray(params.statuses)) {
109
- andConditions.push({ status: { $in: params.statuses } });
110
- }
111
- /* istanbul ignore else */
112
- const statusIn = params.status?.$in;
113
- if (Array.isArray(statusIn)) {
114
- andConditions.push({ status: { $in: statusIn } });
115
- }
116
- /* istanbul ignore else */
117
- if (params.agent !== undefined) {
118
- /* istanbul ignore else */
119
- if (params.agent.typeOf !== undefined) {
120
- andConditions.push({
121
- 'agent.typeOf': {
122
- $exists: true,
123
- $eq: params.agent.typeOf
124
- }
125
- });
126
- }
127
- /* istanbul ignore else */
128
- if (Array.isArray(params.agent.ids)) {
129
- andConditions.push({
130
- 'agent.id': {
131
- $exists: true,
132
- $in: params.agent.ids
133
- }
134
- });
135
- }
136
- /* istanbul ignore else */
137
- if (Array.isArray(params.agent.identifiers)) {
138
- andConditions.push({
139
- 'agent.identifier': {
140
- $exists: true,
141
- $in: params.agent.identifiers
142
- }
143
- });
144
- }
145
- // if (typeof params.agent.familyName === 'string' && params.agent.familyName.length > 0) {
146
- // andConditions.push({
147
- // 'agent.familyName': {
148
- // $exists: true,
149
- // $regex: new RegExp(params.agent.familyName)
150
- // }
151
- // });
152
- // }
153
- // if (typeof params.agent.givenName === 'string' && params.agent.givenName.length > 0) {
154
- // andConditions.push({
155
- // 'agent.givenName': {
156
- // $exists: true,
157
- // $regex: new RegExp(params.agent.givenName)
158
- // }
159
- // });
160
- // }
161
- // if (typeof params.agent.email === 'string' && params.agent.email.length > 0) {
162
- // andConditions.push({
163
- // 'agent.email': {
164
- // $exists: true,
165
- // $regex: new RegExp(params.agent.email)
166
- // }
167
- // });
168
- // }
169
- // if (typeof params.agent.telephone === 'string' && params.agent.telephone.length > 0) {
170
- // andConditions.push({
171
- // 'agent.telephone': {
172
- // $exists: true,
173
- // $regex: new RegExp(params.agent.telephone)
174
- // }
175
- // });
176
- // }
177
- }
178
- const tasksExportActionStatusIn = params.tasksExportAction?.actionStatus?.$in;
179
- /* istanbul ignore else */
180
- if (Array.isArray(tasksExportActionStatusIn)) {
181
- andConditions.push({ 'tasksExportAction.actionStatus': { $exists: true, $in: tasksExportActionStatusIn } });
182
- }
183
- const tasksExportActionStatusEq = params.tasksExportAction?.actionStatus?.$eq;
184
- /* istanbul ignore else */
185
- if (typeof tasksExportActionStatusEq === 'string') {
186
- andConditions.push({ 'tasksExportAction.actionStatus': { $exists: true, $eq: tasksExportActionStatusEq } });
187
- }
188
- switch (params.typeOf) {
189
- case factory.transactionType.PlaceOrder:
190
- const sellerIdIn = params.seller?.ids;
191
- if (Array.isArray(sellerIdIn)) {
192
- andConditions.push({ 'seller.id': { $exists: true, $in: sellerIdIn } });
193
- }
194
- const resultOrderNumberIn = params.result?.order?.orderNumbers;
195
- if (Array.isArray(resultOrderNumberIn)) {
196
- andConditions.push({ 'result.order.orderNumber': { $exists: true, $in: resultOrderNumberIn } });
197
- }
198
- const resultOrderConfirmationNumberEq = params.result?.order?.confirmationNumber?.$eq;
199
- if (typeof resultOrderConfirmationNumberEq === 'string') {
200
- andConditions.push({
201
- 'result.order.confirmationNumber': { $exists: true, $eq: resultOrderConfirmationNumberEq }
202
- });
203
- }
204
- const objectOrderNumberEq = params.object?.orderNumber?.$eq;
205
- if (typeof objectOrderNumberEq === 'string') {
206
- andConditions.push({ 'object.orderNumber': { $exists: true, $eq: objectOrderNumberEq } });
207
- }
208
- break;
209
- case factory.transactionType.ReturnOrder:
210
- /* istanbul ignore else */
211
- if (params.object !== undefined) {
212
- /* istanbul ignore else */
213
- if (params.object.order !== undefined) {
214
- /* istanbul ignore else */
215
- if (Array.isArray(params.object.order.orderNumbers)) {
216
- andConditions.push({
217
- 'object.order.orderNumber': {
218
- $exists: true,
219
- $in: params.object.order.orderNumbers
220
- }
221
- });
222
- }
223
- }
224
- }
225
- break;
226
- default:
227
- }
228
- return andConditions;
229
- }
230
- /**
231
- * 取引を開始する
232
- */
233
- async start(params) {
234
- const status = factory.transactionStatusType.InProgress;
235
- const tasksExportAction = { actionStatus: factory.actionStatusType.PotentialActionStatus };
236
- // const tasksExportationStatus = factory.transactionTasksExportationStatus.Unexported; // discontinue(2024-06-20~)
237
- const startDate = new Date();
238
- let expires;
239
- const { typeOf } = params;
240
- if (typeOf === factory.transactionType.PlaceOrder
241
- || typeOf === factory.transactionType.ReturnOrder) {
242
- // expiresInSecondsの指定があれば優先して適用する(2022-11-25~)
243
- if (typeof params.expiresInSeconds === 'number' && params.expiresInSeconds > 0) {
244
- expires = (0, moment_1.default)(startDate)
245
- .add(params.expiresInSeconds, 'seconds')
246
- .toDate();
247
- }
248
- else {
249
- throw new factory.errors.ArgumentNull('expiresInSeconds');
250
- }
251
- }
252
- else {
253
- expires = params.expires;
254
- }
255
- let creatingTransaction;
256
- if (typeOf === factory.transactionType.MoneyTransfer) {
257
- const { agent, project, object, seller, recipient } = params;
258
- creatingTransaction = {
259
- status, startDate, expires, typeOf, tasksExportAction,
260
- agent, project, seller, object, recipient
261
- };
262
- }
263
- else if (typeOf === factory.transactionType.PlaceOrder) {
264
- const { agent, project, object, seller, instrument } = params;
265
- creatingTransaction = {
266
- status, startDate, expires, typeOf, tasksExportAction,
267
- agent, project, seller, object,
268
- ...(typeof instrument?.id === 'string') ? { instrument } : undefined
269
- };
270
- }
271
- else if (typeOf === factory.transactionType.ReturnOrder) {
272
- const { agent, project, object, seller } = params;
273
- creatingTransaction = {
274
- status, startDate, expires, typeOf, tasksExportAction,
275
- agent, project, seller, object
276
- };
277
- }
278
- else {
279
- throw new factory.errors.NotImplemented(`${typeOf} not implemented`);
280
- }
281
- // reimplemnt with insertMany(2024-05-30~)
282
- const result = await this.transactionModel.insertMany(creatingTransaction, { rawResult: true });
283
- const id = result.insertedIds?.[0]?.toHexString();
284
- if (typeof id !== 'string') {
285
- throw new factory.errors.Internal('transaction not saved');
286
- }
287
- // 取引開始時にも取引イベントエミッター連携(2024-03-21~)
288
- transaction_1.transactionEventEmitter.emitTransactionStatusChanged({ id, typeOf, status });
289
- return { expires, id, startDate, status }; // minimize response(2024-05-30~)
290
- }
291
- /**
292
- * 特定取引検索
293
- */
294
- async projectFieldsById(params, inclusion // make required(2024-05-31~)
295
- ) {
296
- let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
297
- if (Array.isArray(inclusion) && inclusion.length > 0) {
298
- positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(key));
299
- }
300
- else {
301
- throw new factory.errors.NotImplemented('inclusion must be specified'); // 2024-08-26~
302
- }
303
- const projection = {
304
- _id: 0,
305
- id: { $toString: '$_id' },
306
- ...Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1])))
307
- };
308
- // let projection: { [key in (IKeyOfProjection<T> | '__v' | 'createdAt' | 'updatedAt')]?: AnyExpression } = {};
309
- // if (Array.isArray(inclusion) && inclusion.length > 0) {
310
- // inclusion.forEach((field) => {
311
- // projection[field] = 1;
312
- // });
313
- // } else {
314
- // projection = {
315
- // __v: 0,
316
- // createdAt: 0,
317
- // updatedAt: 0
318
- // };
319
- // }
320
- const doc = await this.transactionModel.findOne({
321
- _id: { $eq: params.id },
322
- typeOf: { $eq: params.typeOf }
323
- }, projection)
324
- .lean() // 2024-08-26~
325
- .exec();
326
- if (doc === null) {
327
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} not found`);
328
- }
329
- return doc;
330
- }
331
- /**
332
- * 進行中の取引を取得する
333
- */
334
- async projectFieldsInProgressById(params, inclusion // make required(2024-05-29~)
335
- ) {
336
- let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
337
- if (Array.isArray(inclusion) && inclusion.length > 0) {
338
- positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(key));
339
- }
340
- else {
341
- throw new factory.errors.NotImplemented('inclusion must be specified'); // 2024-08-26~
342
- }
343
- const projection = {
344
- _id: 0,
345
- id: { $toString: '$_id' },
346
- ...Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1])))
347
- };
348
- // let projection: { [key in (IKeyOfProjection<T> | '__v' | 'createdAt' | 'updatedAt')]?: ProjectionElementType } = {};
349
- // if (Array.isArray(inclusion) && inclusion.length > 0) {
350
- // inclusion.forEach((field) => {
351
- // projection[field] = 1;
352
- // });
353
- // } else {
354
- // // minimize(2024-05-29~)
355
- // projection = {
356
- // __v: 0,
357
- // createdAt: 0,
358
- // updatedAt: 0,
359
- // tasksExportAction: 0,
360
- // ...{
361
- // tasksExportedAt: 0,
362
- // tasksExportationStatus: 0
363
- // }
364
- // };
365
- // }
366
- const filter = {
367
- _id: { $eq: params.id },
368
- typeOf: { $eq: params.typeOf },
369
- status: { $eq: factory.transactionStatusType.InProgress },
370
- // expiresを条件に追加(2023-05-12~),
371
- expires: { $gt: new Date() }
372
- };
373
- const doc = await this.transactionModel.findOne(filter, projection)
374
- .lean() // 2024-08-26~
375
- .exec();
376
- if (doc === null) {
377
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
378
- }
379
- return doc;
380
- }
381
- /**
382
- * 進行中取引に保管された採用済決済方法を検索する
383
- */
384
- async findInProgressPaymentMethodId(params) {
385
- const doc = await this.transactionModel.findOne({
386
- _id: { $eq: params.id },
387
- typeOf: { $eq: factory.transactionType.PlaceOrder },
388
- status: { $eq: factory.transactionStatusType.InProgress }
389
- }, { 'object.paymentMethods': 1 })
390
- .lean() // 2024-08-26~
391
- .exec();
392
- if (doc === null) {
393
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${factory.transactionType.PlaceOrder} ${factory.transactionStatusType.InProgress} not found`);
394
- }
395
- return doc.object.paymentMethods;
396
- }
397
- /**
398
- * 取引の注文番号を検索する
399
- */
400
- async findInProgressOrderNumberById(params) {
401
- const doc = await this.transactionModel.findOne({
402
- _id: { $eq: params.id },
403
- typeOf: { $eq: factory.transactionType.PlaceOrder },
404
- status: { $eq: factory.transactionStatusType.InProgress }
405
- }, { 'object.orderNumber': 1 })
406
- .lean() // 2024-08-26~
407
- .exec();
408
- if (doc === null) {
409
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${factory.transactionType.PlaceOrder} ${factory.transactionStatusType.InProgress} not found`);
410
- }
411
- return doc.object.orderNumber;
412
- }
413
- /**
414
- * 取引の確認番号を検索する
415
- */
416
- async findInProgressConfirmationNumberById(params) {
417
- const doc = await this.transactionModel.findOne({
418
- _id: { $eq: params.id },
419
- typeOf: { $eq: factory.transactionType.PlaceOrder },
420
- status: { $in: params.status.$in }
421
- }, { 'object.confirmationNumber': 1 })
422
- .lean() // 2024-08-26~
423
- .exec();
424
- if (doc === null) {
425
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${factory.transactionType.PlaceOrder} ${params.status.$in.join(' or ')} not found`);
426
- }
427
- return doc.object.confirmationNumber;
428
- }
429
- /**
430
- * 取引進行者プロフィールを更新
431
- */
432
- async updateAgent(params) {
433
- const doc = await this.transactionModel.findOneAndUpdate({
434
- _id: { $eq: params.id },
435
- typeOf: { $eq: params.typeOf },
436
- status: { $eq: factory.transactionStatusType.InProgress }
437
- }, {
438
- $set: {
439
- 'agent.id': params.agent.id,
440
- // ...(typeof params.agent.name === 'string') ? { 'agent.name': params.agent.name } : undefined,
441
- ...(typeof params.object?.customer?.typeOf === 'string') ? { 'object.customer': params.object.customer } : undefined
442
- }
443
- }, {
444
- projection: { _id: 1 }
445
- })
446
- .lean()
447
- .exec();
448
- if (doc === null) {
449
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
450
- }
451
- }
452
- /**
453
- * 取引期限変更
454
- */
455
- async updateExpires(params) {
456
- const doc = await this.transactionModel.findOneAndUpdate({
457
- _id: { $eq: params.id },
458
- typeOf: { $eq: params.typeOf },
459
- status: { $eq: factory.transactionStatusType.InProgress }
460
- }, {
461
- $set: {
462
- expires: params.expires
463
- }
464
- }, {
465
- projection: { _id: 1 }
466
- })
467
- .lean()
468
- .exec();
469
- if (doc === null) {
470
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
471
- }
472
- }
473
- /**
474
- * 取引オブジェクトを更新
475
- * 注文名称など
476
- */
477
- async updateObject(params) {
478
- const doc = await this.transactionModel.findOneAndUpdate({
479
- _id: { $eq: params.id },
480
- typeOf: { $eq: params.typeOf },
481
- status: { $eq: factory.transactionStatusType.InProgress }
482
- }, {
483
- $set: {
484
- ...(typeof params.object?.name === 'string') ? { 'object.name': params.object.name } : undefined
485
- }
486
- }, {
487
- projection: { _id: 1 }
488
- })
489
- .lean()
490
- .exec();
491
- if (doc === null) {
492
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
493
- }
494
- }
495
- /**
496
- * 取引を確定する
497
- */
498
- async confirm(params) {
499
- const endDate = new Date();
500
- const doc = await this.transactionModel.findOneAndUpdate({
501
- _id: { $eq: params.id },
502
- typeOf: { $eq: params.typeOf },
503
- status: { $eq: factory.transactionStatusType.InProgress },
504
- expires: { $gt: endDate } // add expires(2025-02-27~)
505
- }, {
506
- status: factory.transactionStatusType.Confirmed, // ステータス変更
507
- endDate,
508
- // 'object.authorizeActions': params.authorizeActions,
509
- result: params.result, // resultを更新
510
- potentialActions: params.potentialActions // resultを更新
511
- }, {
512
- new: true,
513
- projection: { _id: 1 }
514
- })
515
- .lean()
516
- .exec();
517
- // NotFoundであれば取引状態確認
518
- if (doc === null) {
519
- const { expires, status } = await this.projectFieldsById({ typeOf: params.typeOf, id: params.id }, ['expires', 'status']);
520
- if (status === factory.transactionStatusType.Confirmed) {
521
- // すでに確定済の場合スルー
522
- }
523
- else if (status === factory.transactionStatusType.Expired) {
524
- throw new factory.errors.Argument('Transaction id', 'Already expired');
525
- }
526
- else if (status === factory.transactionStatusType.Canceled) {
527
- throw new factory.errors.Argument('Transaction id', 'Already canceled');
528
- }
529
- else {
530
- if ((0, moment_1.default)(expires)
531
- .isSameOrBefore((0, moment_1.default)(endDate))) {
532
- throw new factory.errors.Argument('Transaction id', 'potentially expired');
533
- }
534
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
535
- }
536
- }
537
- transaction_1.transactionEventEmitter.emitTransactionStatusChanged({
538
- id: params.id,
539
- typeOf: params.typeOf,
540
- status: factory.transactionStatusType.Confirmed
541
- });
542
- }
47
+ // public static CREATE_MONGO_CONDITIONS(params: factory.transaction.ISearchConditions<factory.transactionType.MoneyTransfer>) {
48
+ // if (params.typeOf !== factory.transactionType.MoneyTransfer) {
49
+ // throw new factory.errors.Argument('typeOf', `must be ${factory.transactionType.MoneyTransfer}`);
50
+ // }
51
+ // const andConditions: FilterQuery<factory.assetTransaction.ITransaction<factory.assetTransactionType>>[] = [];
52
+ // const projectIdEq = params.project?.id?.$eq;
53
+ // if (typeof projectIdEq === 'string') {
54
+ // andConditions.push({ 'project.id': { $eq: projectIdEq } });
55
+ // }
56
+ // if (typeof params.typeOf === 'string') {
57
+ // andConditions.push({ typeOf: { $eq: params.typeOf } });
58
+ // }
59
+ // if (params.startFrom !== undefined) {
60
+ // andConditions.push({
61
+ // startDate: { $gte: params.startFrom }
62
+ // });
63
+ // }
64
+ // if (params.startThrough !== undefined) {
65
+ // andConditions.push({
66
+ // startDate: { $lte: params.startThrough }
67
+ // });
68
+ // }
69
+ // if (params.endFrom !== undefined) {
70
+ // andConditions.push({
71
+ // endDate: {
72
+ // $exists: true,
73
+ // $gte: params.endFrom
74
+ // }
75
+ // });
76
+ // }
77
+ // if (params.endThrough !== undefined) {
78
+ // andConditions.push({
79
+ // endDate: {
80
+ // $exists: true,
81
+ // $lt: params.endThrough
82
+ // }
83
+ // });
84
+ // }
85
+ // if (Array.isArray(params.ids)) {
86
+ // andConditions.push({
87
+ // _id: { $in: params.ids }
88
+ // });
89
+ // }
90
+ // if (Array.isArray(params.statuses)) {
91
+ // andConditions.push({ status: { $in: params.statuses } });
92
+ // }
93
+ // const statusIn = params.status?.$in;
94
+ // if (Array.isArray(statusIn)) {
95
+ // andConditions.push({ status: { $in: statusIn } });
96
+ // }
97
+ // if (params.agent !== undefined) {
98
+ // if (params.agent.typeOf !== undefined) {
99
+ // andConditions.push({
100
+ // 'agent.typeOf': {
101
+ // $exists: true,
102
+ // $eq: params.agent.typeOf
103
+ // }
104
+ // });
105
+ // }
106
+ // if (Array.isArray(params.agent.ids)) {
107
+ // andConditions.push({
108
+ // 'agent.id': {
109
+ // $exists: true,
110
+ // $in: params.agent.ids
111
+ // }
112
+ // });
113
+ // }
114
+ // if (Array.isArray(params.agent.identifiers)) {
115
+ // andConditions.push({
116
+ // 'agent.identifier': {
117
+ // $exists: true,
118
+ // $in: params.agent.identifiers
119
+ // }
120
+ // });
121
+ // }
122
+ // }
123
+ // const tasksExportActionStatusIn = params.tasksExportAction?.actionStatus?.$in;
124
+ // if (Array.isArray(tasksExportActionStatusIn)) {
125
+ // andConditions.push({ 'tasksExportAction.actionStatus': { $exists: true, $in: tasksExportActionStatusIn } });
126
+ // }
127
+ // const tasksExportActionStatusEq = params.tasksExportAction?.actionStatus?.$eq;
128
+ // if (typeof tasksExportActionStatusEq === 'string') {
129
+ // andConditions.push({ 'tasksExportAction.actionStatus': { $exists: true, $eq: tasksExportActionStatusEq } });
130
+ // }
131
+ // switch (params.typeOf) {
132
+ // case factory.transactionType.PlaceOrder as any:
133
+ // throw new factory.errors.NotImplemented(`use PlaceOrderRepo`);
134
+ // // const sellerIdIn = params.seller?.ids;
135
+ // // if (Array.isArray(sellerIdIn)) {
136
+ // // andConditions.push({ 'seller.id': { $exists: true, $in: sellerIdIn } });
137
+ // // }
138
+ // // const resultOrderNumberIn = params.result?.order?.orderNumbers;
139
+ // // if (Array.isArray(resultOrderNumberIn)) {
140
+ // // andConditions.push({ 'result.order.orderNumber': { $exists: true, $in: resultOrderNumberIn } });
141
+ // // }
142
+ // // const resultOrderConfirmationNumberEq = params.result?.order?.confirmationNumber?.$eq;
143
+ // // if (typeof resultOrderConfirmationNumberEq === 'string') {
144
+ // // andConditions.push({
145
+ // // 'result.order.confirmationNumber': { $exists: true, $eq: resultOrderConfirmationNumberEq }
146
+ // // });
147
+ // // }
148
+ // // const objectOrderNumberEq = params.object?.orderNumber?.$eq;
149
+ // // if (typeof objectOrderNumberEq === 'string') {
150
+ // // andConditions.push({ 'object.orderNumber': { $exists: true, $eq: objectOrderNumberEq } });
151
+ // // }
152
+ // // break;
153
+ // case factory.transactionType.ReturnOrder as any:
154
+ // throw new factory.errors.NotImplemented(`use ReturnOrderRepo`);
155
+ // // if (params.object !== undefined) {
156
+ // // if (params.object.order !== undefined) {
157
+ // // if (Array.isArray(params.object.order.orderNumbers)) {
158
+ // // andConditions.push({
159
+ // // 'object.order.orderNumber': {
160
+ // // $exists: true,
161
+ // // $in: params.object.order.orderNumbers
162
+ // // }
163
+ // // });
164
+ // // }
165
+ // // }
166
+ // // }
167
+ // // break;
168
+ // default:
169
+ // }
170
+ // return andConditions;
171
+ // }
172
+ // /**
173
+ // * 取引を開始する
174
+ // */
175
+ // // public async startNoPlaceOrder<
176
+ // public async startMoneyTransfer(
177
+ // params: factory.transaction.IStartParams<factory.transactionType.MoneyTransfer>
178
+ // ): Promise<IStartedTransaction> {
179
+ // const status = factory.transactionStatusType.InProgress;
180
+ // const tasksExportAction: factory.transaction.ITasksExportAction = { actionStatus: factory.actionStatusType.PotentialActionStatus };
181
+ // // const tasksExportationStatus = factory.transactionTasksExportationStatus.Unexported; // discontinue(2024-06-20~)
182
+ // const startDate: Date = new Date();
183
+ // // let expires: Date;
184
+ // const { typeOf } = params;
185
+ // // if (typeOf === factory.transactionType.ReturnOrder) {
186
+ // // // expiresInSecondsの指定があれば優先して適用する(2022-11-25~)
187
+ // // if (typeof params.expiresInSeconds === 'number' && params.expiresInSeconds > 0) {
188
+ // // expires = moment(startDate)
189
+ // // .add(params.expiresInSeconds, 'seconds')
190
+ // // .toDate();
191
+ // // } else {
192
+ // // throw new factory.errors.ArgumentNull('expiresInSeconds');
193
+ // // }
194
+ // // } else {
195
+ // // expires = params.expires;
196
+ // // }
197
+ // const expires = params.expires;
198
+ // let creatingTransaction: factory.transaction.IAttributes<factory.transactionType.MoneyTransfer>;
199
+ // if (typeOf === factory.transactionType.MoneyTransfer) {
200
+ // const { agent, project, object, seller, recipient } = params;
201
+ // creatingTransaction = {
202
+ // status, startDate, expires, typeOf, tasksExportAction,
203
+ // agent, project, seller, object, recipient
204
+ // };
205
+ // // } else if (typeOf === factory.transactionType.ReturnOrder) {
206
+ // // const { agent, project, object, seller } = params;
207
+ // // creatingTransaction = {
208
+ // // status, startDate, expires, typeOf, tasksExportAction,
209
+ // // agent, project, seller, object
210
+ // // };
211
+ // } else {
212
+ // throw new factory.errors.NotImplemented(`${typeOf} not implemented`);
213
+ // }
214
+ // // reimplemnt with insertMany(2024-05-30~)
215
+ // const result = await this.transactionModel.insertMany(
216
+ // creatingTransaction,
217
+ // { rawResult: true }
218
+ // );
219
+ // const id = result.insertedIds?.[0]?.toHexString();
220
+ // if (typeof id !== 'string') {
221
+ // throw new factory.errors.Internal('transaction not saved');
222
+ // }
223
+ // // 取引開始時にも取引イベントエミッター連携(2024-03-21~)
224
+ // transactionEventEmitter.emitTransactionStatusChanged({ id, typeOf, status });
225
+ // return { expires, id, startDate, status }; // minimize response(2024-05-30~)
226
+ // }
227
+ // /**
228
+ // * 特定取引検索
229
+ // */
230
+ // public async findMoneyTransferById(
231
+ // params: { typeOf: factory.transactionType.MoneyTransfer; id: string },
232
+ // inclusion: IKeyOfProjection[] // make required(2024-05-31~)
233
+ // ): Promise<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>> {
234
+ // let positiveProjectionFields: IKeyOfProjection[] = AVAILABLE_PROJECT_FIELDS;
235
+ // if (Array.isArray(inclusion) && inclusion.length > 0) {
236
+ // positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(<IKeyOfProjection>key));
237
+ // } else {
238
+ // throw new factory.errors.NotImplemented('inclusion must be specified'); // 2024-08-26~
239
+ // }
240
+ // const projection: ProjectionType<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>> = {
241
+ // _id: 0,
242
+ // id: { $toString: '$_id' },
243
+ // ...Object.fromEntries<1>(positiveProjectionFields.map((key) => ([key, 1])))
244
+ // };
245
+ // // let projection: { [key in (IKeyOfProjection<T> | '__v' | 'createdAt' | 'updatedAt')]?: AnyExpression } = {};
246
+ // // if (Array.isArray(inclusion) && inclusion.length > 0) {
247
+ // // inclusion.forEach((field) => {
248
+ // // projection[field] = 1;
249
+ // // });
250
+ // // } else {
251
+ // // projection = {
252
+ // // __v: 0,
253
+ // // createdAt: 0,
254
+ // // updatedAt: 0
255
+ // // };
256
+ // // }
257
+ // const doc = await this.transactionModel.findOne(
258
+ // {
259
+ // _id: { $eq: params.id },
260
+ // typeOf: { $eq: params.typeOf }
261
+ // },
262
+ // projection
263
+ // )
264
+ // .lean<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>>() // 2024-08-26~
265
+ // .exec();
266
+ // if (doc === null) {
267
+ // throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} not found`);
268
+ // }
269
+ // return doc;
270
+ // }
271
+ // /**
272
+ // * 進行中の取引を取得する
273
+ // */
274
+ // public async findMoneyTransferInProgressById(
275
+ // params: {
276
+ // typeOf: factory.transactionType.MoneyTransfer;
277
+ // id: string;
278
+ // },
279
+ // inclusion: IKeyOfProjection[] // make required(2024-05-29~)
280
+ // ): Promise<IMoneyTransferTransactionInProgress> {
281
+ // let positiveProjectionFields: IKeyOfProjection[] = AVAILABLE_PROJECT_FIELDS;
282
+ // if (Array.isArray(inclusion) && inclusion.length > 0) {
283
+ // positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(<IKeyOfProjection>key));
284
+ // } else {
285
+ // throw new factory.errors.NotImplemented('inclusion must be specified'); // 2024-08-26~
286
+ // }
287
+ // const projection: ProjectionType<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>> = {
288
+ // _id: 0,
289
+ // id: { $toString: '$_id' },
290
+ // ...Object.fromEntries<1>(positiveProjectionFields.map((key) => ([key, 1])))
291
+ // };
292
+ // const filter: FilterQuery<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>> = {
293
+ // _id: { $eq: params.id },
294
+ // typeOf: { $eq: params.typeOf },
295
+ // status: { $eq: factory.transactionStatusType.InProgress },
296
+ // // expiresを条件に追加(2023-05-12~),
297
+ // expires: { $gt: new Date() }
298
+ // };
299
+ // const doc = await this.transactionModel.findOne(filter, projection)
300
+ // .lean<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>>() // 2024-08-26~
301
+ // .exec();
302
+ // if (doc === null) {
303
+ // throw new factory.errors.NotFound(
304
+ // this.transactionModel.modelName,
305
+ // `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`
306
+ // );
307
+ // }
308
+ // return doc;
309
+ // }
310
+ // /**
311
+ // * 進行中の取引を取得する
312
+ // */
313
+ // public async projectFieldsInProgressById<T extends factory.transactionType.MoneyTransfer>(
314
+ // params: {
315
+ // typeOf: T;
316
+ // id: string;
317
+ // },
318
+ // inclusion: IKeyOfProjection<T>[] // make required(2024-05-29~)
319
+ // ): Promise<ITransactionInProgress<T>> {
320
+ // let positiveProjectionFields: (IKeyOfProjection<factory.transactionType.MoneyTransfer>
321
+ // | IKeyOfProjection<factory.transactionType.PlaceOrder>
322
+ // | IKeyOfProjection<factory.transactionType.ReturnOrder>
323
+ // )[] = AVAILABLE_PROJECT_FIELDS;
324
+ // if (Array.isArray(inclusion) && inclusion.length > 0) {
325
+ // positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(<IKeyOfProjection<T>>key));
326
+ // } else {
327
+ // throw new factory.errors.NotImplemented('inclusion must be specified'); // 2024-08-26~
328
+ // }
329
+ // const projection: ProjectionType<factory.transaction.ITransaction<T>> = {
330
+ // _id: 0,
331
+ // id: { $toString: '$_id' },
332
+ // ...Object.fromEntries<1>(positiveProjectionFields.map((key) => ([key, 1])))
333
+ // };
334
+ // const filter: FilterQuery<factory.transaction.ITransaction<T>> = {
335
+ // _id: { $eq: params.id },
336
+ // typeOf: { $eq: params.typeOf },
337
+ // status: { $eq: factory.transactionStatusType.InProgress },
338
+ // // expiresを条件に追加(2023-05-12~),
339
+ // expires: { $gt: new Date() }
340
+ // };
341
+ // const doc = await this.transactionModel.findOne(filter, projection)
342
+ // .lean<factory.transaction.ITransaction<T>>() // 2024-08-26~
343
+ // .exec();
344
+ // if (doc === null) {
345
+ // throw new factory.errors.NotFound(
346
+ // this.transactionModel.modelName,
347
+ // `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`
348
+ // );
349
+ // }
350
+ // return doc;
351
+ // }
352
+ // /**
353
+ // * 進行中取引に保管された採用済決済方法を検索する
354
+ // */
355
+ // public async findInProgressPaymentMethodId(params: {
356
+ // id: string;
357
+ // }): Promise<factory.transaction.placeOrder.IPaymentMethodByPaymentUrl | undefined> {
358
+ // const doc = await this.transactionModel.findOne(
359
+ // {
360
+ // _id: { $eq: params.id },
361
+ // typeOf: { $eq: factory.transactionType.PlaceOrder },
362
+ // status: { $eq: factory.transactionStatusType.InProgress }
363
+ // },
364
+ // { 'object.paymentMethods': 1 }
365
+ // )
366
+ // .lean<{ object: Pick<factory.transaction.placeOrder.IObject, 'paymentMethods'> }>() // 2024-08-26~
367
+ // .exec();
368
+ // if (doc === null) {
369
+ // throw new factory.errors.NotFound(
370
+ // this.transactionModel.modelName,
371
+ // `${factory.transactionType.PlaceOrder} ${factory.transactionStatusType.InProgress} not found`
372
+ // );
373
+ // }
374
+ // return doc.object.paymentMethods;
375
+ // }
376
+ // /**
377
+ // * 取引の注文番号を検索する
378
+ // */
379
+ // public async findInProgressOrderNumberById(params: {
380
+ // id: string;
381
+ // }): Promise<string | undefined> {
382
+ // const doc = await this.transactionModel.findOne(
383
+ // {
384
+ // _id: { $eq: params.id },
385
+ // typeOf: { $eq: factory.transactionType.PlaceOrder },
386
+ // status: { $eq: factory.transactionStatusType.InProgress }
387
+ // },
388
+ // { 'object.orderNumber': 1 }
389
+ // )
390
+ // .lean<{ object: Pick<factory.transaction.placeOrder.IObject, 'orderNumber'> }>() // 2024-08-26~
391
+ // .exec();
392
+ // if (doc === null) {
393
+ // throw new factory.errors.NotFound(
394
+ // this.transactionModel.modelName,
395
+ // `${factory.transactionType.PlaceOrder} ${factory.transactionStatusType.InProgress} not found`
396
+ // );
397
+ // }
398
+ // return doc.object.orderNumber;
399
+ // }
400
+ // /**
401
+ // * 取引の確認番号を検索する
402
+ // */
403
+ // public async findInProgressConfirmationNumberById(params: {
404
+ // id: string;
405
+ // status: { $in: factory.transactionStatusType[] };
406
+ // }): Promise<string | undefined> {
407
+ // const doc = await this.transactionModel.findOne(
408
+ // {
409
+ // _id: { $eq: params.id },
410
+ // typeOf: { $eq: factory.transactionType.PlaceOrder },
411
+ // status: { $in: params.status.$in }
412
+ // },
413
+ // { 'object.confirmationNumber': 1 }
414
+ // )
415
+ // .lean<{ object: Pick<factory.transaction.placeOrder.IObject, 'confirmationNumber'> }>() // 2024-08-26~
416
+ // .exec();
417
+ // if (doc === null) {
418
+ // throw new factory.errors.NotFound(
419
+ // this.transactionModel.modelName,
420
+ // `${factory.transactionType.PlaceOrder} ${params.status.$in.join(' or ')} not found`
421
+ // );
422
+ // }
423
+ // return doc.object.confirmationNumber;
424
+ // }
425
+ // /**
426
+ // * 取引進行者プロフィールを更新
427
+ // */
428
+ // public async updateAgent<T extends factory.transactionType>(params: {
429
+ // typeOf: T;
430
+ // id: string;
431
+ // agent: Pick<factory.transaction.IAgent, 'id'>;
432
+ // object?: {
433
+ // customer?: factory.order.ICustomer;
434
+ // };
435
+ // }): Promise<void> {
436
+ // const doc = await this.transactionModel.findOneAndUpdate(
437
+ // {
438
+ // _id: { $eq: params.id },
439
+ // typeOf: { $eq: params.typeOf },
440
+ // status: { $eq: factory.transactionStatusType.InProgress }
441
+ // },
442
+ // {
443
+ // $set: {
444
+ // 'agent.id': params.agent.id,
445
+ // // ...(typeof params.agent.name === 'string') ? { 'agent.name': params.agent.name } : undefined,
446
+ // ...(typeof params.object?.customer?.typeOf === 'string') ? { 'object.customer': params.object.customer } : undefined
447
+ // }
448
+ // },
449
+ // {
450
+ // projection: { _id: 1 }
451
+ // }
452
+ // )
453
+ // .lean<{ _id: ObjectId }>()
454
+ // .exec();
455
+ // if (doc === null) {
456
+ // throw new factory.errors.NotFound(
457
+ // this.transactionModel.modelName,
458
+ // `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`
459
+ // );
460
+ // }
461
+ // }
462
+ // /**
463
+ // * 取引期限変更
464
+ // */
465
+ // public async updateExpires<T extends factory.transactionType>(params: {
466
+ // typeOf: T;
467
+ // id: string;
468
+ // expires: Date;
469
+ // }): Promise<void> {
470
+ // const doc = await this.transactionModel.findOneAndUpdate(
471
+ // {
472
+ // _id: { $eq: params.id },
473
+ // typeOf: { $eq: params.typeOf },
474
+ // status: { $eq: factory.transactionStatusType.InProgress }
475
+ // },
476
+ // {
477
+ // $set: {
478
+ // expires: params.expires
479
+ // }
480
+ // },
481
+ // {
482
+ // projection: { _id: 1 }
483
+ // }
484
+ // )
485
+ // .lean<{ _id: ObjectId }>()
486
+ // .exec();
487
+ // if (doc === null) {
488
+ // throw new factory.errors.NotFound(
489
+ // this.transactionModel.modelName,
490
+ // `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`
491
+ // );
492
+ // }
493
+ // }
494
+ // /**
495
+ // * 取引オブジェクトを更新
496
+ // * 注文名称など
497
+ // */
498
+ // public async updateObject<T extends factory.transactionType>(params: {
499
+ // typeOf: T;
500
+ // id: string;
501
+ // object?: {
502
+ // name?: string;
503
+ // };
504
+ // }): Promise<void> {
505
+ // const doc = await this.transactionModel.findOneAndUpdate(
506
+ // {
507
+ // _id: { $eq: params.id },
508
+ // typeOf: { $eq: params.typeOf },
509
+ // status: { $eq: factory.transactionStatusType.InProgress }
510
+ // },
511
+ // {
512
+ // $set: {
513
+ // ...(typeof params.object?.name === 'string') ? { 'object.name': params.object.name } : undefined
514
+ // }
515
+ // },
516
+ // {
517
+ // projection: { _id: 1 }
518
+ // }
519
+ // )
520
+ // .lean<{ _id: ObjectId }>()
521
+ // .exec();
522
+ // if (doc === null) {
523
+ // throw new factory.errors.NotFound(
524
+ // this.transactionModel.modelName,
525
+ // `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`
526
+ // );
527
+ // }
528
+ // }
529
+ // /**
530
+ // * 取引を確定する
531
+ // */
532
+ // // public async confirmNoPlaceOrder<
533
+ // public async confirmMoneyTransfer(params: {
534
+ // typeOf: factory.transactionType.MoneyTransfer;
535
+ // id: string;
536
+ // result: factory.transaction.IResult<factory.transactionType.MoneyTransfer>;
537
+ // potentialActions: factory.transaction.IPotentialActions<factory.transactionType.MoneyTransfer>;
538
+ // }): Promise<void> {
539
+ // const endDate = new Date();
540
+ // const doc = await this.transactionModel.findOneAndUpdate(
541
+ // {
542
+ // _id: { $eq: params.id },
543
+ // typeOf: { $eq: params.typeOf },
544
+ // status: { $eq: factory.transactionStatusType.InProgress },
545
+ // expires: { $gt: endDate } // add expires(2025-02-27~)
546
+ // },
547
+ // {
548
+ // status: factory.transactionStatusType.Confirmed, // ステータス変更
549
+ // endDate,
550
+ // // 'object.authorizeActions': params.authorizeActions,
551
+ // result: params.result, // resultを更新
552
+ // potentialActions: params.potentialActions // resultを更新
553
+ // },
554
+ // {
555
+ // new: true,
556
+ // projection: { _id: 1 }
557
+ // }
558
+ // )
559
+ // .lean<{ _id: ObjectId }>()
560
+ // .exec();
561
+ // // NotFoundであれば取引状態確認
562
+ // if (doc === null) {
563
+ // const { expires, status } = <Pick<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>, 'expires' | 'status'>>
564
+ // await this.findMoneyTransferById({ typeOf: params.typeOf, id: params.id }, ['expires', 'status']);
565
+ // if (status === factory.transactionStatusType.Confirmed) {
566
+ // // すでに確定済の場合スルー
567
+ // } else if (status === factory.transactionStatusType.Expired) {
568
+ // throw new factory.errors.Argument('Transaction id', 'Already expired');
569
+ // } else if (status === factory.transactionStatusType.Canceled) {
570
+ // throw new factory.errors.Argument('Transaction id', 'Already canceled');
571
+ // } else {
572
+ // if (moment(expires)
573
+ // .isSameOrBefore(moment(endDate))) {
574
+ // throw new factory.errors.Argument('Transaction id', 'potentially expired');
575
+ // }
576
+ // throw new factory.errors.NotFound(
577
+ // this.transactionModel.modelName,
578
+ // `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`
579
+ // );
580
+ // }
581
+ // }
582
+ // transactionEventEmitter.emitTransactionStatusChanged({
583
+ // id: params.id,
584
+ // typeOf: params.typeOf,
585
+ // status: factory.transactionStatusType.Confirmed
586
+ // });
587
+ // }
543
588
  async countPotentiallyExportTasks(params) {
544
589
  const { endDate, limit } = params;
545
590
  const endDateLt = endDate?.$lt;
@@ -861,138 +906,187 @@ class TransactionRepo {
861
906
  }
862
907
  return expiringTransactions;
863
908
  }
864
- /**
865
- * 取引を中止する
866
- */
867
- async cancel(params) {
868
- const endDate = new Date();
869
- // 進行中ステータスの取引を中止する
870
- const doc = await this.transactionModel.findOneAndUpdate({
871
- typeOf: params.typeOf,
872
- _id: params.id,
873
- status: factory.transactionStatusType.InProgress
874
- }, {
875
- status: factory.transactionStatusType.Canceled,
876
- endDate: endDate
877
- }, {
878
- new: true,
879
- projection: { _id: 1 }
880
- })
881
- .lean()
882
- .exec();
883
- // NotFoundであれば取引状態確認
884
- if (doc === null) {
885
- const { status } = await this.projectFieldsById(params, ['status']);
886
- if (status === factory.transactionStatusType.Canceled) {
887
- // すでに中止済の場合スルー
888
- }
889
- else if (status === factory.transactionStatusType.Expired) {
890
- throw new factory.errors.Argument('Transaction id', 'Transaction already expired');
891
- }
892
- else if (status === factory.transactionStatusType.Confirmed) {
893
- throw new factory.errors.Argument('Transaction id', 'Confirmed transaction unable to cancel');
894
- }
895
- else {
896
- throw new factory.errors.NotFound(this.transactionModel.modelName, `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`);
897
- }
898
- }
899
- transaction_1.transactionEventEmitter.emitTransactionStatusChanged({
900
- id: params.id,
901
- typeOf: params.typeOf,
902
- status: factory.transactionStatusType.Canceled
903
- });
904
- }
905
- async count(params) {
906
- const { limit } = params;
907
- const conditions = TransactionRepo.CREATE_MONGO_CONDITIONS(params);
908
- const query = this.transactionModel.countDocuments((conditions.length > 0) ? { $and: conditions } : {});
909
- if (typeof limit === 'number' && limit >= 0) {
910
- query.limit(limit);
911
- }
912
- const count = await query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
913
- .exec();
914
- return { count };
915
- }
916
- /**
917
- * 取引を検索する
918
- */
919
- async projectFields(params) {
920
- const { inclusion } = params;
921
- const conditions = TransactionRepo.CREATE_MONGO_CONDITIONS(params);
922
- let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
923
- if (Array.isArray(inclusion) && inclusion.length > 0) {
924
- positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(key));
925
- }
926
- const projection = {
927
- _id: 0,
928
- id: { $toString: '$_id' },
929
- ...Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1])))
930
- };
931
- // let projection: { [key in (IKeyOfProjection<T> | '__v' | 'createdAt' | 'updatedAt')]?: AnyExpression } = {};
932
- // if (Array.isArray(params.inclusion) && params.inclusion.length > 0) {
933
- // params.inclusion.forEach((field) => {
934
- // projection[field] = 1;
935
- // });
936
- // } else {
937
- // projection = {
938
- // __v: 0,
939
- // createdAt: 0,
940
- // updatedAt: 0
941
- // };
942
- // }
943
- const query = this.transactionModel.find((conditions.length > 0) ? { $and: conditions } : {})
944
- .select(projection);
945
- if (typeof params.limit === 'number' && params.limit > 0) {
946
- const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
947
- query.limit(params.limit)
948
- .skip(params.limit * (page - 1));
949
- }
950
- /* istanbul ignore else */
951
- if (params.sort?.startDate !== undefined) {
952
- query.sort({ startDate: params.sort.startDate });
953
- }
954
- // const explainResult = await (<any>query).explain();
955
- // console.log(explainResult[0].executionStats.allPlansExecution.map((e: any) => e.executionStages.inputStage));
956
- return query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
957
- .lean() // 2024-08-26~
958
- .exec();
959
- }
960
- /**
961
- * 特定の進行中取引を更新する(汎用)
962
- */
963
- async findByIdAndUpdateInProgress(params) {
964
- await this.transactionModel.findOneAndUpdate({
965
- _id: { $eq: params.id },
966
- status: { $eq: factory.transactionStatusType.InProgress }
967
- }, params.update, {
968
- // new: true,
969
- projection: { _id: 1 }
970
- })
971
- .lean()
972
- .exec()
973
- .then((doc) => {
974
- if (doc === null) {
975
- throw new factory.errors.ArgumentNull(this.transactionModel.modelName);
976
- }
977
- });
978
- }
979
- async saveOrderNumberIfNotExist(params) {
980
- await this.transactionModel.updateOne({
981
- _id: { $eq: params.id },
982
- status: { $eq: factory.transactionStatusType.InProgress },
983
- 'object.orderNumber': { $exists: false }
984
- }, { 'object.orderNumber': params.orderNumber })
985
- .exec();
986
- }
987
- async saveConfirmationNumberIfNotExist(params) {
988
- await this.transactionModel.updateOne({
989
- _id: { $eq: params.id },
990
- // status: { $eq: factory.transactionStatusType.InProgress },
991
- status: { $in: params.status.$in },
992
- 'object.confirmationNumber': { $exists: false }
993
- }, { $set: { 'object.confirmationNumber': params.confirmationNumber } })
994
- .exec();
995
- }
909
+ // /**
910
+ // * 取引を中止する
911
+ // */
912
+ // public async cancelMoneyTransfer(params: {
913
+ // typeOf: factory.transactionType.MoneyTransfer;
914
+ // id: string;
915
+ // }): Promise<void> {
916
+ // const endDate = new Date();
917
+ // // 進行中ステータスの取引を中止する
918
+ // const doc = await this.transactionModel.findOneAndUpdate(
919
+ // {
920
+ // typeOf: params.typeOf,
921
+ // _id: params.id,
922
+ // status: factory.transactionStatusType.InProgress
923
+ // },
924
+ // {
925
+ // status: factory.transactionStatusType.Canceled,
926
+ // endDate: endDate
927
+ // },
928
+ // {
929
+ // new: true,
930
+ // projection: { _id: 1 }
931
+ // }
932
+ // )
933
+ // .lean<{ _id: ObjectId }>()
934
+ // .exec();
935
+ // // NotFoundであれば取引状態確認
936
+ // if (doc === null) {
937
+ // const { status } = <Pick<factory.transaction.ITransaction<factory.transactionType.MoneyTransfer>, 'status'>>
938
+ // await this.findMoneyTransferById(params, ['status']);
939
+ // if (status === factory.transactionStatusType.Canceled) {
940
+ // // すでに中止済の場合スルー
941
+ // } else if (status === factory.transactionStatusType.Expired) {
942
+ // throw new factory.errors.Argument('Transaction id', 'Transaction already expired');
943
+ // } else if (status === factory.transactionStatusType.Confirmed) {
944
+ // throw new factory.errors.Argument('Transaction id', 'Confirmed transaction unable to cancel');
945
+ // } else {
946
+ // throw new factory.errors.NotFound(
947
+ // this.transactionModel.modelName,
948
+ // `${params.typeOf} ${factory.transactionStatusType.InProgress} not found`
949
+ // );
950
+ // }
951
+ // }
952
+ // transactionEventEmitter.emitTransactionStatusChanged({
953
+ // id: params.id,
954
+ // typeOf: params.typeOf,
955
+ // status: factory.transactionStatusType.Canceled
956
+ // });
957
+ // }
958
+ // public async countMoneyTransfer<
959
+ // // T extends factory.transactionType
960
+ // T extends factory.transactionType.MoneyTransfer
961
+ // >(params: factory.transaction.ISearchConditions<T>): Promise<{ count: number }> {
962
+ // const { limit } = params;
963
+ // const conditions = TransactionRepo.CREATE_MONGO_CONDITIONS(params);
964
+ // const query = this.transactionModel.countDocuments((conditions.length > 0) ? { $and: conditions } : {});
965
+ // if (typeof limit === 'number' && limit >= 0) {
966
+ // query.limit(limit);
967
+ // }
968
+ // const count = await query.setOptions({ maxTimeMS: MONGO_MAX_TIME_MS })
969
+ // .exec();
970
+ // return { count };
971
+ // }
972
+ // /**
973
+ // * 取引を検索する
974
+ // */
975
+ // public async findMoneyTransferTransactions<
976
+ // // T extends factory.transactionType,
977
+ // T extends factory.transactionType.MoneyTransfer,
978
+ // F extends IKeyOfProjection
979
+ // >(
980
+ // params: factory.transaction.ISearchConditions<T> & {
981
+ // inclusion: F[];
982
+ // }
983
+ // ): Promise<(Pick<factory.transaction.ITransaction<T>, F> & { id: string })[]> {
984
+ // const { inclusion } = params;
985
+ // const conditions = TransactionRepo.CREATE_MONGO_CONDITIONS(params);
986
+ // let positiveProjectionFields: IKeyOfProjection[] = AVAILABLE_PROJECT_FIELDS;
987
+ // if (Array.isArray(inclusion) && inclusion.length > 0) {
988
+ // positiveProjectionFields = positiveProjectionFields.filter((key) => inclusion.includes(<F>key));
989
+ // }
990
+ // const projection: ProjectionType<factory.transaction.ITransaction<T>> = {
991
+ // _id: 0,
992
+ // id: { $toString: '$_id' },
993
+ // ...Object.fromEntries<1>(positiveProjectionFields.map((key) => ([key, 1])))
994
+ // };
995
+ // // let projection: { [key in (IKeyOfProjection<T> | '__v' | 'createdAt' | 'updatedAt')]?: AnyExpression } = {};
996
+ // // if (Array.isArray(params.inclusion) && params.inclusion.length > 0) {
997
+ // // params.inclusion.forEach((field) => {
998
+ // // projection[field] = 1;
999
+ // // });
1000
+ // // } else {
1001
+ // // projection = {
1002
+ // // __v: 0,
1003
+ // // createdAt: 0,
1004
+ // // updatedAt: 0
1005
+ // // };
1006
+ // // }
1007
+ // const query = this.transactionModel.find(
1008
+ // (conditions.length > 0) ? { $and: conditions } : {}
1009
+ // )
1010
+ // .select(projection);
1011
+ // if (typeof params.limit === 'number' && params.limit > 0) {
1012
+ // const page: number = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
1013
+ // query.limit(params.limit)
1014
+ // .skip(params.limit * (page - 1));
1015
+ // }
1016
+ // if (params.sort?.startDate !== undefined) {
1017
+ // query.sort({ startDate: params.sort.startDate });
1018
+ // }
1019
+ // // const explainResult = await (<any>query).explain();
1020
+ // // console.log(explainResult[0].executionStats.allPlansExecution.map((e: any) => e.executionStages.inputStage));
1021
+ // return query.setOptions({ maxTimeMS: MONGO_MAX_TIME_MS })
1022
+ // .lean<(Pick<factory.transaction.ITransaction<T>, F> & { id: string })[]>()
1023
+ // .exec();
1024
+ // }
1025
+ // /**
1026
+ // * 特定の進行中取引を更新する(汎用)
1027
+ // */
1028
+ // public async findByIdAndUpdateInProgress(params: {
1029
+ // id: string;
1030
+ // update: {
1031
+ // $set?: { 'object.paymentMethods'?: factory.transaction.placeOrder.IPaymentMethodByPaymentUrl };
1032
+ // // $unset?: any;
1033
+ // // $pull?: any;
1034
+ // // $push?: any;
1035
+ // };
1036
+ // }): Promise<void> {
1037
+ // await this.transactionModel.findOneAndUpdate(
1038
+ // {
1039
+ // _id: { $eq: params.id },
1040
+ // status: { $eq: factory.transactionStatusType.InProgress }
1041
+ // },
1042
+ // params.update,
1043
+ // {
1044
+ // // new: true,
1045
+ // projection: { _id: 1 }
1046
+ // }
1047
+ // )
1048
+ // .lean<{ _id: ObjectId }>()
1049
+ // .exec()
1050
+ // .then((doc) => {
1051
+ // if (doc === null) {
1052
+ // throw new factory.errors.ArgumentNull(this.transactionModel.modelName);
1053
+ // }
1054
+ // });
1055
+ // }
1056
+ // /**
1057
+ // * 進行中取引のobjectに注文番号を保管する
1058
+ // */
1059
+ // public async saveOrderNumberIfNotExist(params: {
1060
+ // id: string;
1061
+ // orderNumber: string;
1062
+ // }): Promise<{ modifiedCount: number }> {
1063
+ // const result = await this.transactionModel.updateOne(
1064
+ // {
1065
+ // _id: { $eq: params.id },
1066
+ // status: { $eq: factory.transactionStatusType.InProgress },
1067
+ // 'object.orderNumber': { $exists: false }
1068
+ // },
1069
+ // { $set: { 'object.orderNumber': params.orderNumber } }
1070
+ // )
1071
+ // .exec();
1072
+ // return { modifiedCount: result.modifiedCount };
1073
+ // }
1074
+ // public async saveConfirmationNumberIfNotExist(params: {
1075
+ // id: string;
1076
+ // status: { $in: factory.transactionStatusType[] };
1077
+ // confirmationNumber: string;
1078
+ // }): Promise<void> {
1079
+ // await this.transactionModel.updateOne(
1080
+ // {
1081
+ // _id: { $eq: params.id },
1082
+ // // status: { $eq: factory.transactionStatusType.InProgress },
1083
+ // status: { $in: params.status.$in },
1084
+ // 'object.confirmationNumber': { $exists: false }
1085
+ // },
1086
+ // { $set: { 'object.confirmationNumber': params.confirmationNumber } }
1087
+ // )
1088
+ // .exec();
1089
+ // }
996
1090
  async findByIdAndDelete(params) {
997
1091
  await this.transactionModel.findByIdAndDelete(params.id)
998
1092
  .exec();