@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
@@ -30,45 +30,19 @@ exports.ActionRepo = void 0;
30
30
  const moment_1 = __importDefault(require("moment"));
31
31
  const factory = __importStar(require("../factory"));
32
32
  const settings_1 = require("../settings");
33
- const action_1 = require("./mongoose/schemas/action");
34
- const actionRecipe_1 = require("./mongoose/schemas/actionRecipe");
35
- const AVAILABLE_PROJECT_FIELDS = [
36
- 'project',
37
- 'actionStatus',
38
- 'typeOf',
39
- 'description',
40
- 'agent',
41
- 'recipient',
42
- 'result',
43
- 'error',
44
- 'object',
45
- 'startDate',
46
- 'endDate',
47
- 'purpose',
48
- 'potentialActions',
49
- 'amount',
50
- 'fromLocation',
51
- 'toLocation',
52
- 'instrument',
53
- 'location',
54
- 'replacer',
55
- 'targetCollection',
56
- 'sameAs',
57
- 'cancelAction',
58
- 'about',
59
- 'target',
60
- 'identifier'
61
- ];
33
+ // import { createSchema, IModel as IActionModel, modelName } from './mongoose/schemas/action';
34
+ // import { createSchema as createRecipeSchema, IModel as IActionRecipeModel, modelName as recipeModelName } from './mongoose/schemas/actionRecipe';
35
+ const actionProcess_1 = require("./action/actionProcess");
62
36
  /**
63
37
  * アクションリポジトリ
64
38
  */
65
- class ActionRepo {
66
- actionModel;
67
- actionRecipeModel;
68
- constructor(connection) {
69
- this.actionModel = connection.model(action_1.modelName, (0, action_1.createSchema)());
70
- this.actionRecipeModel = connection.model(actionRecipe_1.modelName, (0, actionRecipe_1.createSchema)());
71
- }
39
+ class ActionRepo extends actionProcess_1.ActionProcessRepo {
40
+ // private readonly actionModel: IActionModel;
41
+ // private readonly actionRecipeModel: IActionRecipeModel;
42
+ // constructor(connection: Connection) {
43
+ // this.actionModel = connection.model(modelName, createSchema());
44
+ // this.actionRecipeModel = connection.model(recipeModelName, createRecipeSchema());
45
+ // }
72
46
  static CREATE_MONGO_CONDITIONS(params) {
73
47
  const andConditions = [];
74
48
  const idIn = params.id?.$in;
@@ -480,9 +454,9 @@ class ActionRepo {
480
454
  */
481
455
  async search(params, inclusion) {
482
456
  const conditions = ActionRepo.CREATE_MONGO_CONDITIONS(params);
483
- let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
457
+ let positiveProjectionFields = actionProcess_1.AVAILABLE_PROJECT_FIELDS;
484
458
  if (Array.isArray(inclusion) && inclusion.length > 0) {
485
- positiveProjectionFields = inclusion.filter((key) => AVAILABLE_PROJECT_FIELDS.includes(key));
459
+ positiveProjectionFields = inclusion.filter((key) => actionProcess_1.AVAILABLE_PROJECT_FIELDS.includes(key));
486
460
  }
487
461
  const projection = {
488
462
  _id: 0,
@@ -505,180 +479,239 @@ class ActionRepo {
505
479
  .lean() // 2024-08-26~
506
480
  .exec();
507
481
  }
508
- /**
509
- * アクション開始
510
- */
511
- async start(attributes, options) {
512
- const startDate = new Date();
513
- const creatingAction = {
514
- ...attributes,
515
- actionStatus: factory.actionStatusType.ActiveActionStatus,
516
- startDate
517
- };
518
- // reimplemnt with insertMany(2024-08-29~)
519
- const result = await this.actionModel.insertMany(creatingAction, { rawResult: true });
520
- const id = result.insertedIds?.[0]?.toHexString();
521
- if (typeof id !== 'string') {
522
- throw new factory.errors.Internal('action not saved');
523
- }
524
- // add recipe(2024-06-09~)
525
- const savingRecipe = options?.recipe;
526
- if (savingRecipe?.typeOf === 'Recipe') {
527
- await this.upsertRecipe({ ...savingRecipe, recipeFor: { id, typeOf: creatingAction.typeOf } });
528
- }
529
- return { id, startDate, typeOf: creatingAction.typeOf };
530
- }
531
- async completeWithVoid(params) {
532
- if (params.recipe?.typeOf === 'Recipe') {
533
- await this.upsertRecipe({ ...params.recipe, recipeFor: { id: params.id, typeOf: params.typeOf } });
534
- }
535
- const doc = await this.actionModel.findOneAndUpdate({
536
- _id: { $eq: params.id },
537
- typeOf: { $eq: params.typeOf }
538
- }, {
539
- $set: {
540
- actionStatus: factory.actionStatusType.CompletedActionStatus,
541
- result: params.result,
542
- endDate: new Date()
543
- }
544
- }, { new: false, projection: { _id: 1 } })
545
- .lean()
546
- .exec();
547
- if (doc === null) {
548
- throw new factory.errors.NotFound(this.actionModel.modelName);
549
- }
550
- }
551
- /**
552
- * アクション取消
553
- */
554
- async cancelWithVoid(params) {
555
- const cancelDate = new Date();
556
- const cancelAction = (params.cancelAction !== undefined)
557
- ? {
558
- ...params.cancelAction,
559
- endTime: cancelDate,
560
- typeOf: factory.actionType.CancelAction
561
- }
562
- : undefined;
563
- const doc = await this.actionModel.findOneAndUpdate({
564
- _id: { $eq: params.id },
565
- typeOf: { $eq: params.typeOf },
566
- actionStatus: { $ne: factory.actionStatusType.CanceledActionStatus } // 冪等性確保(2024-05-26~)
567
- }, {
568
- $set: {
569
- actionStatus: factory.actionStatusType.CanceledActionStatus,
570
- ...(cancelAction !== undefined) ? { cancelAction } : undefined // cancelAction連携(2024-05-26~)
571
- }
572
- }, { new: false, projection: { _id: 1 } })
573
- .lean()
574
- .exec();
575
- if (doc === null) {
576
- // 既にCanceledActionStatusであればok
577
- const existingAction = await this.findById({ id: params.id, typeOf: params.typeOf }, ['actionStatus'], []);
578
- if (existingAction.actionStatus !== factory.actionStatusType.CanceledActionStatus) {
579
- throw new factory.errors.NotFound(this.actionModel.modelName);
580
- }
581
- }
582
- // endDateが存在しなければセット(2024-04-22~)
583
- await this.actionModel.updateOne({
584
- _id: { $eq: params.id },
585
- endDate: { $exists: false }
586
- }, { $set: { endDate: cancelDate } })
587
- .exec();
588
- }
589
- /**
590
- * アクション失敗
591
- */
592
- async giveUp(params) {
593
- const actionError = (Array.isArray(params.error))
594
- ? params.error.map((e) => ({ ...e, message: e.message, name: e.name }))
595
- : { ...params.error, message: params.error.message, name: params.error.name };
596
- if (params.recipe?.typeOf === 'Recipe') {
597
- await this.upsertRecipe({ ...params.recipe, recipeFor: { id: params.id, typeOf: params.typeOf } });
598
- }
599
- const doc = await this.actionModel.findOneAndUpdate({
600
- typeOf: { $eq: params.typeOf },
601
- _id: { $eq: params.id }
602
- }, {
603
- $set: {
604
- actionStatus: factory.actionStatusType.FailedActionStatus,
605
- error: actionError,
606
- endDate: new Date()
607
- }
608
- }, { new: true, projection: { _id: 1 } })
609
- .lean()
610
- .exec();
611
- if (doc === null) {
612
- throw new factory.errors.NotFound(this.actionModel.modelName);
613
- }
614
- }
615
- /**
616
- * アクション再開
617
- */
618
- async reStart(params) {
619
- const doc = await this.actionModel.findOneAndUpdate({
620
- _id: { $eq: params.id },
621
- typeOf: { $eq: params.typeOf },
622
- actionStatus: { $eq: factory.actionStatusType.CompletedActionStatus }
623
- }, {
624
- $set: {
625
- actionStatus: factory.actionStatusType.ActiveActionStatus,
626
- startDate: new Date()
627
- },
628
- $unset: { endDate: 1 }
629
- }, { new: false, projection: { _id: 1 } })
630
- .lean()
631
- .exec();
632
- if (doc === null) {
633
- throw new factory.errors.NotFound(this.actionModel.modelName);
634
- }
635
- // add recipe(2024-06-09~)
636
- if (params.recipe?.typeOf === 'Recipe') {
637
- await this.upsertRecipe({ ...params.recipe, recipeFor: { id: params.id, typeOf: params.typeOf } });
638
- }
639
- }
640
- /**
641
- * 一定期間ActiveActionStatusのアクションをFailedActionStatusにする
642
- */
643
- async giveUpStartDatePassedCertainPeriod(params) {
644
- return this.actionModel.updateMany({
645
- actionStatus: { $eq: factory.actionStatusType.ActiveActionStatus },
646
- // 一定期間過ぎたもの
647
- startDate: { $lt: params.startDate.$lt },
648
- ...(typeof params.id?.$eq === 'string') ? { _id: { $eq: params.id.$eq } } : undefined
649
- }, {
650
- actionStatus: factory.actionStatusType.FailedActionStatus,
651
- error: params.error,
652
- endDate: new Date()
653
- })
654
- .exec();
655
- }
656
- async findById(params, inclusion, exclusion) {
657
- let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
658
- if (Array.isArray(inclusion) && inclusion.length > 0) {
659
- positiveProjectionFields = inclusion.filter((key) => AVAILABLE_PROJECT_FIELDS.includes(key));
660
- }
661
- else {
662
- if (Array.isArray(exclusion) && exclusion.length > 0) {
663
- positiveProjectionFields = positiveProjectionFields.filter((key) => !exclusion.includes(key));
664
- }
665
- }
666
- const projection = {
667
- _id: 0,
668
- id: { $toString: '$_id' },
669
- ...Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1])))
670
- };
671
- const doc = await this.actionModel.findOne({
672
- typeOf: { $eq: params.typeOf },
673
- _id: { $eq: params.id }
674
- }, projection)
675
- .lean() // 2024-08-26~
676
- .exec();
677
- if (doc === null) {
678
- throw new factory.errors.NotFound(this.actionModel.modelName);
679
- }
680
- return doc;
681
- }
482
+ // /**
483
+ // * アクション開始
484
+ // */
485
+ // public async start<T extends factory.actionType>(
486
+ // attributes: factory.action.IAttributes<T, any, any>,
487
+ // options?: {
488
+ // recipe?: IRecipeAsActionAttributes;
489
+ // }
490
+ // ): Promise<Pick<IAction<T>, 'id' | 'typeOf' | 'startDate'>> {
491
+ // const startDate = new Date();
492
+ // const creatingAction: Omit<factory.action.IAction<factory.action.IAttributes<T, any, any>>, 'id'> = {
493
+ // ...attributes,
494
+ // actionStatus: factory.actionStatusType.ActiveActionStatus,
495
+ // startDate
496
+ // };s
497
+ // // reimplemnt with insertMany(2024-08-29~)
498
+ // const result = await this.actionModel.insertMany(creatingAction, { rawResult: true });
499
+ // const id = result.insertedIds?.[0]?.toHexString();
500
+ // if (typeof id !== 'string') {
501
+ // throw new factory.errors.Internal('action not saved');
502
+ // }
503
+ // // add recipe(2024-06-09~)
504
+ // const savingRecipe = options?.recipe;
505
+ // if (savingRecipe?.typeOf === 'Recipe') {
506
+ // await this.upsertRecipe({ ...savingRecipe, recipeFor: { id, typeOf: creatingAction.typeOf } });
507
+ // }
508
+ // return { id, startDate, typeOf: creatingAction.typeOf };
509
+ // }
510
+ // public async completeWithVoid(params: {
511
+ // typeOf: factory.actionType;
512
+ // id: string;
513
+ // result: any;
514
+ // recipe?: IRecipeAsActionAttributes;
515
+ // }): Promise<void> {
516
+ // if (params.recipe?.typeOf === 'Recipe') {
517
+ // await this.upsertRecipe({ ...params.recipe, recipeFor: { id: params.id, typeOf: params.typeOf } });
518
+ // }
519
+ // const doc = await this.actionModel.findOneAndUpdate(
520
+ // {
521
+ // _id: { $eq: params.id },
522
+ // typeOf: { $eq: params.typeOf }
523
+ // },
524
+ // {
525
+ // $set: {
526
+ // actionStatus: factory.actionStatusType.CompletedActionStatus,
527
+ // result: params.result,
528
+ // endDate: new Date()
529
+ // }
530
+ // },
531
+ // { new: false, projection: { _id: 1 } }
532
+ // )
533
+ // .lean<{ _id: ObjectId }>()
534
+ // .exec();
535
+ // if (doc === null) {
536
+ // throw new factory.errors.NotFound(this.actionModel.modelName);
537
+ // }
538
+ // }
539
+ // /**
540
+ // * アクション取消
541
+ // */
542
+ // public async cancelWithVoid(params: {
543
+ // typeOf: factory.actionType.AcceptAction | factory.actionType.AuthorizeAction; // 現時点でAcceptAction,AuthorizeActionのみ対応
544
+ // id: string;
545
+ // cancelAction?: Pick<ICancelActionAction, 'agent' | 'sameAs' | 'startTime'>;
546
+ // }): Promise<void> {
547
+ // const cancelDate = new Date();
548
+ // const cancelAction: ICancelActionAction | undefined = (params.cancelAction !== undefined)
549
+ // ? {
550
+ // ...params.cancelAction,
551
+ // endTime: cancelDate,
552
+ // typeOf: factory.actionType.CancelAction
553
+ // }
554
+ // : undefined;
555
+ // const doc = await this.actionModel.findOneAndUpdate(
556
+ // {
557
+ // _id: { $eq: params.id },
558
+ // typeOf: { $eq: params.typeOf },
559
+ // actionStatus: { $ne: factory.actionStatusType.CanceledActionStatus } // 冪等性確保(2024-05-26~)
560
+ // },
561
+ // {
562
+ // $set: {
563
+ // actionStatus: factory.actionStatusType.CanceledActionStatus,
564
+ // ...(cancelAction !== undefined) ? { cancelAction } : undefined // cancelAction連携(2024-05-26~)
565
+ // }
566
+ // },
567
+ // { new: false, projection: { _id: 1 } }
568
+ // )
569
+ // .lean<{ _id: ObjectId }>()
570
+ // .exec();
571
+ // if (doc === null) {
572
+ // // 既にCanceledActionStatusであればok
573
+ // const existingAction = <Pick<IAction<typeof params.typeOf>, 'actionStatus'>>
574
+ // await this.findById({ id: params.id, typeOf: params.typeOf }, ['actionStatus'], []);
575
+ // if (existingAction.actionStatus !== factory.actionStatusType.CanceledActionStatus) {
576
+ // throw new factory.errors.NotFound(this.actionModel.modelName);
577
+ // }
578
+ // }
579
+ // // endDateが存在しなければセット(2024-04-22~)
580
+ // await this.actionModel.updateOne(
581
+ // {
582
+ // _id: { $eq: params.id },
583
+ // endDate: { $exists: false }
584
+ // },
585
+ // { $set: { endDate: cancelDate } }
586
+ // )
587
+ // .exec();
588
+ // }
589
+ // /**
590
+ // * アクション失敗
591
+ // */
592
+ // public async giveUp(params: {
593
+ // typeOf: factory.actionType;
594
+ // id: string;
595
+ // error: Error | Error[];
596
+ // recipe?: IRecipeAsActionAttributes;
597
+ // }): Promise<void> {
598
+ // const actionError: IActionError | IActionError[] = (Array.isArray(params.error))
599
+ // ? params.error.map((e) => ({ ...e, message: e.message, name: e.name }))
600
+ // : { ...params.error, message: params.error.message, name: params.error.name };
601
+ // if (params.recipe?.typeOf === 'Recipe') {
602
+ // await this.upsertRecipe({ ...params.recipe, recipeFor: { id: params.id, typeOf: params.typeOf } });
603
+ // }
604
+ // const doc = await this.actionModel.findOneAndUpdate(
605
+ // {
606
+ // typeOf: { $eq: params.typeOf },
607
+ // _id: { $eq: params.id }
608
+ // },
609
+ // {
610
+ // $set: {
611
+ // actionStatus: factory.actionStatusType.FailedActionStatus,
612
+ // error: actionError,
613
+ // endDate: new Date()
614
+ // }
615
+ // },
616
+ // { new: true, projection: { _id: 1 } }
617
+ // )
618
+ // .lean<{ _id: ObjectId }>()
619
+ // .exec();
620
+ // if (doc === null) {
621
+ // throw new factory.errors.NotFound(this.actionModel.modelName);
622
+ // }
623
+ // }
624
+ // /**
625
+ // * アクション再開
626
+ // */
627
+ // public async reStart(params: {
628
+ // typeOf: factory.actionType;
629
+ // id: string;
630
+ // recipe?: IRecipeAsActionAttributes;
631
+ // }): Promise<void> {
632
+ // const doc = await this.actionModel.findOneAndUpdate(
633
+ // {
634
+ // _id: { $eq: params.id },
635
+ // typeOf: { $eq: params.typeOf },
636
+ // actionStatus: { $eq: factory.actionStatusType.CompletedActionStatus }
637
+ // },
638
+ // {
639
+ // $set: {
640
+ // actionStatus: factory.actionStatusType.ActiveActionStatus,
641
+ // startDate: new Date()
642
+ // },
643
+ // $unset: { endDate: 1 }
644
+ // },
645
+ // { new: false, projection: { _id: 1 } }
646
+ // )
647
+ // .lean<{ _id: ObjectId }>()
648
+ // .exec();
649
+ // if (doc === null) {
650
+ // throw new factory.errors.NotFound(this.actionModel.modelName);
651
+ // }
652
+ // // add recipe(2024-06-09~)
653
+ // if (params.recipe?.typeOf === 'Recipe') {
654
+ // await this.upsertRecipe({ ...params.recipe, recipeFor: { id: params.id, typeOf: params.typeOf } });
655
+ // }
656
+ // }
657
+ // /**
658
+ // * 一定期間ActiveActionStatusのアクションをFailedActionStatusにする
659
+ // */
660
+ // public async giveUpStartDatePassedCertainPeriod(params: {
661
+ // id?: { $eq?: string };
662
+ // error: any;
663
+ // startDate: { $lt: Date };
664
+ // }): Promise<any> {
665
+ // return this.actionModel.updateMany(
666
+ // {
667
+ // actionStatus: { $eq: factory.actionStatusType.ActiveActionStatus },
668
+ // // 一定期間過ぎたもの
669
+ // startDate: { $lt: params.startDate.$lt },
670
+ // ...(typeof params.id?.$eq === 'string') ? { _id: { $eq: params.id.$eq } } : undefined
671
+ // },
672
+ // {
673
+ // actionStatus: factory.actionStatusType.FailedActionStatus,
674
+ // error: params.error,
675
+ // endDate: new Date()
676
+ // }
677
+ // )
678
+ // .exec();
679
+ // }
680
+ // public async findById<T extends factory.actionType>(
681
+ // params: {
682
+ // typeOf: T;
683
+ // id: string;
684
+ // },
685
+ // inclusion?: IKeyOfProjection[],
686
+ // exclusion?: IKeyOfProjection[]
687
+ // ): Promise<IAction<T>> {
688
+ // let positiveProjectionFields: IKeyOfProjection[] = AVAILABLE_PROJECT_FIELDS;
689
+ // if (Array.isArray(inclusion) && inclusion.length > 0) {
690
+ // positiveProjectionFields = inclusion.filter((key) => AVAILABLE_PROJECT_FIELDS.includes(key));
691
+ // } else {
692
+ // if (Array.isArray(exclusion) && exclusion.length > 0) {
693
+ // positiveProjectionFields = positiveProjectionFields.filter((key) => !exclusion.includes(key));
694
+ // }
695
+ // }
696
+ // const projection: ProjectionType<IAction<T>> = {
697
+ // _id: 0,
698
+ // id: { $toString: '$_id' },
699
+ // ...Object.fromEntries<1>(positiveProjectionFields.map((key) => ([key, 1])))
700
+ // };
701
+ // const doc = await this.actionModel.findOne(
702
+ // {
703
+ // typeOf: { $eq: params.typeOf },
704
+ // _id: { $eq: params.id }
705
+ // },
706
+ // projection
707
+ // )
708
+ // .lean<IAction<T>>() // 2024-08-26~
709
+ // .exec();
710
+ // if (doc === null) {
711
+ // throw new factory.errors.NotFound(this.actionModel.modelName);
712
+ // }
713
+ // return doc;
714
+ // }
682
715
  async findPayAction(params) {
683
716
  const payActions = await this.search({
684
717
  limit: 1,
@@ -791,7 +824,7 @@ class ActionRepo {
791
824
  const projection = {
792
825
  _id: 0,
793
826
  id: { $toString: '$_id' },
794
- ...Object.fromEntries(AVAILABLE_PROJECT_FIELDS.map((key) => ([key, 1])))
827
+ ...Object.fromEntries(actionProcess_1.AVAILABLE_PROJECT_FIELDS.map((key) => ([key, 1])))
795
828
  };
796
829
  const query = this.actionModel.find(filter, projection);
797
830
  // .select({ __v: 0, createdAt: 0, updatedAt: 0 });
@@ -803,56 +836,43 @@ class ActionRepo {
803
836
  .lean() // 2024-08-26~
804
837
  .exec();
805
838
  }
806
- async searchBySameAs(params) {
807
- const projection = {
808
- _id: 0,
809
- id: { $toString: '$_id' },
810
- actionStatus: 1,
811
- error: 1,
812
- purpose: 1
813
- };
814
- const query = this.actionModel.find({
815
- typeOf: { $eq: params.typeOf.$eq },
816
- 'sameAs.id': { $exists: true, $eq: params.sameAs.id.$eq },
817
- ...(typeof params.purpose?.id.$eq === 'string')
818
- ? { 'purpose.id': { $exists: true, $eq: params.purpose.id.$eq } }
819
- : undefined
820
- }, projection)
821
- // .select({ _id: 1, actionStatus: 1, error: 1, purpose: 1 })
822
- .limit(1);
823
- return query
824
- .lean() // 2024-08-26~
825
- .exec();
826
- }
827
839
  async deleteByProject(params) {
828
840
  await this.actionModel.deleteMany({
829
841
  'project.id': { $eq: params.project.id }
830
842
  })
831
843
  .exec();
832
844
  }
833
- async reCompleteAuthorizeEventOfferAction(params) {
834
- return this.actionModel.findOneAndUpdate({
835
- // typeOf: factory.actionType.AuthorizeAction,
836
- _id: { $eq: params.id },
837
- // ActiveActionStatus->CompletedActionStatusで再実装(2024-01-15~)
838
- // actionStatus: factory.actionStatusType.CompletedActionStatus
839
- actionStatus: { $eq: factory.actionStatusType.ActiveActionStatus }
840
- }, {
841
- $set: {
842
- actionStatus: factory.actionStatusType.CompletedActionStatus,
843
- object: params.object,
844
- result: params.result,
845
- endDate: new Date()
846
- }
847
- }, { new: true, projection: { _id: 1 } })
848
- .lean()
849
- .exec()
850
- .then((doc) => {
851
- if (doc === null) {
852
- throw new factory.errors.NotFound(this.actionModel.modelName);
853
- }
854
- });
855
- }
845
+ // public async reCompleteAuthorizeEventOfferAction(params: {
846
+ // id: string;
847
+ // object: factory.action.authorize.offer.eventService.IObject;
848
+ // result: factory.action.authorize.offer.eventService.IResult;
849
+ // }): Promise<void> {
850
+ // return this.actionModel.findOneAndUpdate(
851
+ // {
852
+ // // typeOf: factory.actionType.AuthorizeAction,
853
+ // _id: { $eq: params.id },
854
+ // // ActiveActionStatus->CompletedActionStatusで再実装(2024-01-15~)
855
+ // // actionStatus: factory.actionStatusType.CompletedActionStatus
856
+ // actionStatus: { $eq: factory.actionStatusType.ActiveActionStatus }
857
+ // },
858
+ // {
859
+ // $set: {
860
+ // actionStatus: factory.actionStatusType.CompletedActionStatus,
861
+ // object: params.object,
862
+ // result: params.result,
863
+ // endDate: new Date()
864
+ // }
865
+ // },
866
+ // { new: true, projection: { _id: 1 } }
867
+ // )
868
+ // .lean<{ _id: ObjectId }>()
869
+ // .exec()
870
+ // .then((doc) => {
871
+ // if (doc === null) {
872
+ // throw new factory.errors.NotFound(this.actionModel.modelName);
873
+ // }
874
+ // });
875
+ // }
856
876
  async updateById(params) {
857
877
  await this.actionModel.updateOne({ _id: { $eq: params.id } }, params.update)
858
878
  .exec();
@@ -927,96 +947,6 @@ class ActionRepo {
927
947
  // ])
928
948
  // .exec();
929
949
  // }
930
- async searchYkknInfoByCheckRecipe(filter) {
931
- const filterQuery = {
932
- _id: { $eq: filter.id },
933
- 'project.id': { $eq: filter.project.id },
934
- 'purpose.id': { $exists: true, $eq: filter.purpose.id },
935
- typeOf: { $eq: factory.actionType.CheckAction },
936
- actionStatus: { $eq: factory.actionStatusType.CompletedActionStatus }
937
- };
938
- const actionDoc = await this.actionModel.findOne(filterQuery, { _id: 1 }, { lean: true })
939
- .exec();
940
- if (actionDoc === null) {
941
- throw new factory.errors.NotFound(this.actionModel.modelName);
942
- }
943
- const filterQuery4recipe = {
944
- 'recipeFor.id': { $eq: filter.id }
945
- };
946
- const projectStage = {
947
- _id: 0,
948
- knyknrNo: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.knyknrNo',
949
- ykknshTyp: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.ykknInfo.ykknshTyp',
950
- eishhshkTyp: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.ykknInfo.eishhshkTyp',
951
- ykknKnshbtsmiNum: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.ykknInfo.ykknKnshbtsmiNum',
952
- knshknhmbiUnip: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.ykknInfo.knshknhmbiUnip',
953
- kijUnip: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.ykknInfo.kijUnip'
954
- };
955
- const aggregate = this.actionRecipeModel.aggregate([
956
- { $unwind: '$step' },
957
- { $unwind: '$step.itemListElement' },
958
- { $unwind: '$step.itemListElement.itemListElement' },
959
- { $unwind: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut' },
960
- { $unwind: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.ykknInfo' },
961
- { $match: filterQuery4recipe },
962
- { $project: projectStage }
963
- ]);
964
- if (typeof filter.limit === 'number' && filter.limit > 0) {
965
- const page = (typeof filter.page === 'number' && filter.page > 0) ? filter.page : 1;
966
- aggregate.limit(filter.limit * page)
967
- .skip(filter.limit * (page - 1));
968
- }
969
- return aggregate
970
- .option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
971
- .exec();
972
- }
973
- async searchMkknInfoByCheckRecipe(filter) {
974
- const filterQuery = {
975
- _id: { $eq: filter.id },
976
- 'project.id': { $eq: filter.project.id },
977
- 'purpose.id': { $exists: true, $eq: filter.purpose.id },
978
- typeOf: { $eq: factory.actionType.CheckAction },
979
- actionStatus: { $eq: factory.actionStatusType.CompletedActionStatus }
980
- };
981
- const actionDoc = this.actionModel.findOne(filterQuery, { _id: 1 }, { lean: true })
982
- .exec();
983
- if (actionDoc === null) {
984
- throw new factory.errors.NotFound(this.actionModel.modelName);
985
- }
986
- const filterQuery4recipe = {
987
- 'recipeFor.id': { $eq: filter.id }
988
- };
989
- const projectStage = {
990
- _id: 0,
991
- knyknrNo: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.knyknrNo',
992
- mkknshTyp: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.mkknshTyp',
993
- mkknKnshbtsmiNum: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.mkknKnshbtsmiNum',
994
- mkjyTyp: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.mkjyTyp',
995
- yykDt: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.yykDt',
996
- shyJeiDt: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.shyJeiDt',
997
- shyStCd: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.shyStCd',
998
- shyScrnCd: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.shyScrnCd',
999
- shySkhnCd: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.shySkhnCd',
1000
- shySkhnNm: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo.shySkhnNm'
1001
- };
1002
- const aggregate = this.actionRecipeModel.aggregate([
1003
- { $unwind: '$step' },
1004
- { $unwind: '$step.itemListElement' },
1005
- { $unwind: '$step.itemListElement.itemListElement' },
1006
- { $unwind: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut' },
1007
- { $unwind: '$step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo' },
1008
- { $match: filterQuery4recipe },
1009
- { $project: projectStage }
1010
- ]);
1011
- if (typeof filter.limit === 'number' && filter.limit > 0) {
1012
- const page = (typeof filter.page === 'number' && filter.page > 0) ? filter.page : 1;
1013
- aggregate.limit(filter.limit * page)
1014
- .skip(filter.limit * (page - 1));
1015
- }
1016
- return aggregate
1017
- .option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
1018
- .exec();
1019
- }
1020
950
  /**
1021
951
  * 開始日時を一定期間過ぎたアクションを削除する
1022
952
  */
@@ -1071,20 +1001,23 @@ class ActionRepo {
1071
1001
  };
1072
1002
  });
1073
1003
  }
1074
- // public async saveRecipeWithDateCreated(savingRecipe: IRecipeAsDocument & {
1075
- // dateModified: Date;
1076
- // }) {
1077
- // const { typeOf, project, recipeCategory, recipeFor, step, dateCreated, dateModified } = savingRecipe;
1004
+ // public async saveActionWithEndDate(savingAction: Omit<factory.action.authorize.invoice.IAction, 'id'>) {
1005
+ // const { sameAs, typeOf, project, agent, object, ...updateFields } = savingAction;
1078
1006
  // const filter: FilterQuery<factory.recipe.IRecipe> = {
1079
- // 'recipeFor.id': { $eq: recipeFor.id }
1007
+ // 'project.id': { $eq: project.id },
1008
+ // // 'agent.id': { $exists: true, $eq: agent.id },
1009
+ // // 'object.typeOf': { $exists: true, $eq: object.typeOf },
1010
+ // 'object.paymentMethodId': { $exists: true, $eq: object.paymentMethodId },
1011
+ // typeOf: { $eq: typeOf },
1012
+ // 'sameAs.id': { $exists: true, $eq: sameAs.id }
1080
1013
  // };
1081
- // const setOnInsert: AnyKeys<IRecipeAsDocument> = { project, typeOf, recipeCategory, recipeFor, dateCreated };
1082
- // const setKeys: AnyKeys<IRecipeAsDocument> = { step, dateModified };
1083
- // const update: UpdateQuery<IRecipeAsDocument> = {
1014
+ // const setOnInsert: AnyKeys<IAction<factory.actionType>> = { typeOf, project, agent, object, sameAs };
1015
+ // const setKeys: AnyKeys<IAction<factory.actionType>> = updateFields;
1016
+ // const update: UpdateQuery<IAction<factory.actionType>> = {
1084
1017
  // $setOnInsert: setOnInsert,
1085
1018
  // $set: setKeys
1086
1019
  // };
1087
- // return this.actionRecipeModel.updateOne<HydratedDocument<IRecipeAsDocument>>(
1020
+ // return this.actionModel.updateOne<HydratedDocument<IRecipeAsDocument>>(
1088
1021
  // filter,
1089
1022
  // update,
1090
1023
  // {
@@ -1094,237 +1027,25 @@ class ActionRepo {
1094
1027
  // )
1095
1028
  // .exec();
1096
1029
  // }
1097
- async saveActionWithEndDate(savingAction) {
1098
- const { sameAs, typeOf, project, agent, object, ...updateFields } = savingAction;
1099
- const filter = {
1100
- 'project.id': { $eq: project.id },
1101
- // 'agent.id': { $exists: true, $eq: agent.id },
1102
- // 'object.typeOf': { $exists: true, $eq: object.typeOf },
1103
- 'object.paymentMethodId': { $exists: true, $eq: object.paymentMethodId },
1104
- typeOf: { $eq: typeOf },
1105
- 'sameAs.id': { $exists: true, $eq: sameAs.id }
1106
- };
1107
- const setOnInsert = { typeOf, project, agent, object, sameAs };
1108
- const setKeys = updateFields;
1109
- const update = {
1110
- $setOnInsert: setOnInsert,
1111
- $set: setKeys
1112
- };
1113
- return this.actionModel.updateOne(filter, update, {
1114
- upsert: true,
1115
- includeResultMetadata: true
1116
- })
1117
- .exec();
1118
- }
1119
- async findRecipeByAction(params) {
1120
- return this.actionRecipeModel.findOne({
1121
- 'project.id': { $eq: params.project.id },
1122
- 'recipeFor.id': { $eq: params.recipeFor.id }
1123
- }, { step: 1, recipeCategory: 1 }
1124
- // { lean: true }
1125
- )
1126
- .lean()
1127
- .exec();
1128
- // if (result === null) {
1129
- // throw new factory.errors.NotFound(this.actionRecipeModel.modelName);
1130
- // }
1131
- // return result;
1132
- }
1133
- async findIMinimizedPurchaseNumberAuthResultByCheckMovieTicketRecipe(params) {
1134
- const recipe = await this.actionRecipeModel.findOne({
1135
- 'project.id': { $eq: params.project.id },
1136
- 'recipeFor.id': { $eq: params.recipeFor.id }
1137
- }, {
1138
- project: 0,
1139
- typeOf: 0,
1140
- recipeCategory: 0,
1141
- recipeFor: 0,
1142
- dateCreated: 0,
1143
- dateModified: 0,
1144
- 'step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.ykknInfo': 0,
1145
- 'step.itemListElement.itemListElement.afterMedia.knyknrNoInfoOut.mkknInfo': 0
1146
- }, { lean: true })
1147
- .exec();
1148
- return recipe?.step[0]?.itemListElement[0]?.itemListElement[0]?.afterMedia;
1149
- }
1150
- async aggregateAuthorizeEventServiceOfferAction(params) {
1151
- const statuses = await Promise.all([
1152
- factory.actionStatusType.CompletedActionStatus,
1153
- factory.actionStatusType.CanceledActionStatus,
1154
- factory.actionStatusType.FailedActionStatus
1155
- ].map(async (actionStatus) => {
1156
- const matchConditions = {
1157
- startDate: {
1158
- $gte: params.startFrom,
1159
- $lte: params.startThrough
1160
- },
1161
- typeOf: { $eq: params.typeOf },
1162
- actionStatus: { $eq: actionStatus },
1163
- 'object.typeOf': {
1164
- $exists: true,
1165
- $eq: factory.action.authorize.offer.eventService.ObjectType.SeatReservation
1166
- },
1167
- ...(typeof params.project?.id?.$ne === 'string')
1168
- ? { 'project.id': { $ne: params.project.id.$ne } }
1169
- : undefined
1170
- };
1171
- return this.agggregateByStatus({ matchConditions, actionStatus });
1172
- }));
1173
- return { statuses };
1174
- }
1175
- async aggregateAuthorizePaymentAction(params) {
1176
- const statuses = await Promise.all([
1177
- factory.actionStatusType.CompletedActionStatus,
1178
- factory.actionStatusType.CanceledActionStatus,
1179
- factory.actionStatusType.FailedActionStatus
1180
- ].map(async (actionStatus) => {
1181
- const matchConditions = {
1182
- startDate: {
1183
- $gte: params.startFrom,
1184
- $lte: params.startThrough
1185
- },
1186
- typeOf: { $eq: params.typeOf },
1187
- actionStatus: { $eq: actionStatus },
1188
- 'object.typeOf': {
1189
- $exists: true,
1190
- $eq: factory.action.authorize.paymentMethod.any.ResultType.Payment
1191
- },
1192
- ...(typeof params.project?.id?.$ne === 'string')
1193
- ? { 'project.id': { $ne: params.project.id.$ne } }
1194
- : undefined
1195
- };
1196
- return this.agggregateByStatus({ matchConditions, actionStatus });
1197
- }));
1198
- return { statuses };
1199
- }
1200
- async aggregateAuthorizeOrderAction(params) {
1201
- const statuses = await Promise.all([
1202
- factory.actionStatusType.CompletedActionStatus,
1203
- factory.actionStatusType.CanceledActionStatus,
1204
- factory.actionStatusType.FailedActionStatus
1205
- ].map(async (actionStatus) => {
1206
- const matchConditions = {
1207
- startDate: {
1208
- $gte: params.startFrom,
1209
- $lte: params.startThrough
1210
- },
1211
- typeOf: { $eq: params.typeOf },
1212
- actionStatus: { $eq: actionStatus },
1213
- 'object.typeOf': {
1214
- $exists: true,
1215
- $eq: factory.order.OrderType.Order
1216
- },
1217
- ...(typeof params.project?.id?.$ne === 'string')
1218
- ? { 'project.id': { $ne: params.project.id.$ne } }
1219
- : undefined
1220
- };
1221
- return this.agggregateByStatus({ matchConditions, actionStatus });
1222
- }));
1223
- return { statuses };
1224
- }
1225
- async aggregateCancelReservationAction(params) {
1226
- const statuses = await Promise.all([
1227
- factory.actionStatusType.CompletedActionStatus,
1228
- factory.actionStatusType.CanceledActionStatus,
1229
- factory.actionStatusType.FailedActionStatus
1230
- ].map(async (actionStatus) => {
1231
- const matchConditions = {
1232
- startDate: {
1233
- $gte: params.startFrom,
1234
- $lte: params.startThrough
1235
- },
1236
- typeOf: { $eq: factory.actionType.CancelAction },
1237
- actionStatus: { $eq: actionStatus },
1238
- 'object.typeOf': {
1239
- $exists: true,
1240
- $in: [
1241
- factory.reservationType.BusReservation,
1242
- factory.reservationType.EventReservation,
1243
- factory.reservationType.ReservationPackage
1244
- ]
1245
- },
1246
- ...(typeof params.project?.id?.$ne === 'string')
1247
- ? { 'project.id': { $ne: params.project.id.$ne } }
1248
- : undefined
1249
- };
1250
- return this.agggregateByStatus({ matchConditions, actionStatus });
1251
- }));
1252
- return { statuses };
1253
- }
1254
- /**
1255
- * アクションタイプによる汎用的な集計
1256
- */
1257
- async aggregateByTypeOf(params) {
1258
- const statuses = await Promise.all([
1259
- factory.actionStatusType.CompletedActionStatus,
1260
- factory.actionStatusType.CanceledActionStatus,
1261
- factory.actionStatusType.FailedActionStatus
1262
- ].map(async (actionStatus) => {
1263
- const matchConditions = {
1264
- startDate: {
1265
- $gte: params.startFrom,
1266
- $lte: params.startThrough
1267
- },
1268
- typeOf: { $eq: params.typeOf },
1269
- actionStatus: { $eq: actionStatus },
1270
- ...(typeof params.project?.id?.$ne === 'string')
1271
- ? { 'project.id': { $ne: params.project.id.$ne } }
1272
- : undefined
1273
- };
1274
- return this.agggregateByStatus({ matchConditions, actionStatus });
1275
- }));
1276
- return { statuses };
1277
- }
1278
- async aggregateCheckMovieTicketAction(params) {
1279
- const statuses = await Promise.all([
1280
- factory.actionStatusType.CompletedActionStatus,
1281
- factory.actionStatusType.CanceledActionStatus,
1282
- factory.actionStatusType.FailedActionStatus
1283
- ].map(async (actionStatus) => {
1284
- const matchConditions = {
1285
- startDate: {
1286
- $gte: params.startFrom,
1287
- $lte: params.startThrough
1288
- },
1289
- typeOf: { $eq: factory.actionType.CheckAction },
1290
- 'object.typeOf': {
1291
- $exists: true,
1292
- $eq: factory.service.paymentService.PaymentServiceType.MovieTicket
1293
- },
1294
- actionStatus: { $eq: actionStatus },
1295
- ...(typeof params.project?.id?.$ne === 'string')
1296
- ? { 'project.id': { $ne: params.project.id.$ne } }
1297
- : undefined
1298
- };
1299
- return this.agggregateByStatus({ matchConditions, actionStatus });
1300
- }));
1301
- return { statuses };
1302
- }
1303
- async aggregatePayMovieTicketAction(params) {
1304
- const statuses = await Promise.all([
1305
- factory.actionStatusType.CompletedActionStatus,
1306
- factory.actionStatusType.CanceledActionStatus,
1307
- factory.actionStatusType.FailedActionStatus
1308
- ].map(async (actionStatus) => {
1309
- const matchConditions = {
1310
- startDate: {
1311
- $gte: params.startFrom,
1312
- $lte: params.startThrough
1313
- },
1314
- typeOf: { $eq: factory.actionType.PayAction },
1315
- 'object.typeOf': {
1316
- $exists: true,
1317
- $eq: factory.service.paymentService.PaymentServiceType.MovieTicket
1318
- },
1319
- actionStatus: { $eq: actionStatus },
1320
- ...(typeof params.project?.id?.$ne === 'string')
1321
- ? { 'project.id': { $ne: params.project.id.$ne } }
1322
- : undefined
1323
- };
1324
- return this.agggregateByStatus({ matchConditions, actionStatus });
1325
- }));
1326
- return { statuses };
1327
- }
1030
+ // public async findRecipeByAction<T extends factory.recipe.RecipeCategory>(params: {
1031
+ // project: { id: string };
1032
+ // recipeFor: { id: string };
1033
+ // }): Promise<Pick<IActionRecipe<T>, 'step' | 'recipeCategory'> | null> {
1034
+ // return this.actionRecipeModel.findOne(
1035
+ // {
1036
+ // 'project.id': { $eq: params.project.id },
1037
+ // 'recipeFor.id': { $eq: params.recipeFor.id }
1038
+ // },
1039
+ // { step: 1, recipeCategory: 1 }
1040
+ // // { lean: true }
1041
+ // )
1042
+ // .lean<Pick<IActionRecipe<T>, 'step' | 'recipeCategory'>>()
1043
+ // .exec();
1044
+ // // if (result === null) {
1045
+ // // throw new factory.errors.NotFound(this.actionRecipeModel.modelName);
1046
+ // // }
1047
+ // // return result;
1048
+ // }
1328
1049
  getCursor(conditions, projection) {
1329
1050
  return this.actionModel.find(conditions, projection)
1330
1051
  .sort({ startDate: factory.sortType.Descending })
@@ -1334,126 +1055,5 @@ class ActionRepo {
1334
1055
  return this.actionModel.updateMany(params.filter, { $unset: params.$unset }, { timestamps: false })
1335
1056
  .exec();
1336
1057
  }
1337
- async agggregateByStatus(params) {
1338
- const aggregations = await this.actionModel.aggregate([
1339
- { $match: params.matchConditions },
1340
- {
1341
- $project: {
1342
- duration: { $subtract: ['$endDate', '$startDate'] },
1343
- actionStatus: '$actionStatus',
1344
- startDate: '$startDate',
1345
- endDate: '$endDate',
1346
- typeOf: '$typeOf'
1347
- }
1348
- },
1349
- {
1350
- $group: {
1351
- _id: '$typeOf',
1352
- actionCount: { $sum: 1 },
1353
- maxDuration: { $max: '$duration' },
1354
- minDuration: { $min: '$duration' },
1355
- avgDuration: { $avg: '$duration' }
1356
- }
1357
- },
1358
- {
1359
- $project: {
1360
- _id: 0,
1361
- actionCount: '$actionCount',
1362
- avgDuration: '$avgDuration',
1363
- maxDuration: '$maxDuration',
1364
- minDuration: '$minDuration'
1365
- }
1366
- }
1367
- ])
1368
- .exec();
1369
- const percents = [50, 95, 99];
1370
- if (aggregations.length === 0) {
1371
- return {
1372
- status: params.actionStatus,
1373
- aggregation: {
1374
- actionCount: 0,
1375
- avgDuration: 0,
1376
- maxDuration: 0,
1377
- minDuration: 0,
1378
- percentilesDuration: percents.map((percent) => {
1379
- return {
1380
- name: String(percent),
1381
- value: 0
1382
- };
1383
- })
1384
- }
1385
- };
1386
- }
1387
- const ranks4percentile = percents.map((percentile) => {
1388
- return {
1389
- percentile,
1390
- rank: Math.floor(aggregations[0].actionCount * percentile / 100)
1391
- };
1392
- });
1393
- const aggregations2 = await this.actionModel.aggregate([
1394
- {
1395
- $match: params.matchConditions
1396
- },
1397
- {
1398
- $project: {
1399
- duration: { $subtract: ['$endDate', '$startDate'] },
1400
- actionStatus: '$actionStatus',
1401
- startDate: '$startDate',
1402
- endDate: '$endDate',
1403
- typeOf: '$typeOf'
1404
- }
1405
- },
1406
- { $sort: { duration: 1 } },
1407
- {
1408
- $group: {
1409
- _id: '$typeOf',
1410
- durations: { $push: '$duration' }
1411
- }
1412
- },
1413
- {
1414
- $project: {
1415
- _id: 0,
1416
- avgSmallDuration: '$avgSmallDuration',
1417
- avgMediumDuration: '$avgMediumDuration',
1418
- avgLargeDuration: '$avgLargeDuration',
1419
- percentilesDuration: ranks4percentile.map((rank) => {
1420
- return {
1421
- name: String(rank.percentile),
1422
- value: { $arrayElemAt: ['$durations', rank.rank] }
1423
- };
1424
- })
1425
- }
1426
- }
1427
- ])
1428
- .exec();
1429
- return {
1430
- status: params.actionStatus,
1431
- aggregation: {
1432
- ...aggregations[0],
1433
- ...aggregations2[0]
1434
- }
1435
- };
1436
- }
1437
- async upsertRecipe(savingRecipe) {
1438
- const dateModified = new Date();
1439
- const { typeOf, project, recipeCategory, recipeFor, step } = savingRecipe;
1440
- const filter = {
1441
- 'recipeFor.id': { $eq: recipeFor.id }
1442
- };
1443
- const setOnInsert = {
1444
- project, typeOf, recipeCategory, recipeFor,
1445
- dateCreated: dateModified
1446
- };
1447
- const setKeys = { step, dateModified };
1448
- const update = {
1449
- $setOnInsert: setOnInsert,
1450
- $set: setKeys
1451
- };
1452
- return this.actionRecipeModel.updateOne(filter, update, {
1453
- upsert: true,
1454
- includeResultMetadata: true
1455
- })
1456
- .exec();
1457
- }
1458
1058
  }
1459
1059
  exports.ActionRepo = ActionRepo;