@chevre/domain 24.0.0-alpha.16 → 24.0.0-alpha.18
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.
- package/lib/chevre/repo/action/acceptCOAOffer.d.ts +23 -0
- package/lib/chevre/repo/action/acceptCOAOffer.js +64 -0
- package/lib/chevre/repo/action/acceptPay.d.ts +8 -0
- package/lib/chevre/repo/action/acceptPay.js +13 -0
- package/lib/chevre/repo/action/actionProcess.d.ts +115 -0
- package/lib/chevre/repo/action/actionProcess.js +293 -0
- package/lib/chevre/repo/action/authorizeOffer.d.ts +21 -0
- package/lib/chevre/repo/action/authorizeOffer.js +85 -0
- package/lib/chevre/repo/action/checkMovieTicket.d.ts +55 -0
- package/lib/chevre/repo/action/checkMovieTicket.js +145 -0
- package/lib/chevre/repo/action/checkThing.d.ts +8 -0
- package/lib/chevre/repo/action/checkThing.js +13 -0
- package/lib/chevre/repo/action.d.ts +9 -249
- package/lib/chevre/repo/action.js +308 -708
- package/lib/chevre/repo/aggregateAction.d.ts +102 -0
- package/lib/chevre/repo/aggregateAction.js +379 -0
- package/lib/chevre/repository.d.ts +27 -0
- package/lib/chevre/repository.js +60 -2
- package/lib/chevre/service/aggregation/system.d.ts +10 -10
- package/lib/chevre/service/aggregation/system.js +9 -9
- package/lib/chevre/service/assetTransaction/pay/check.d.ts +5 -4
- package/lib/chevre/service/assetTransaction/pay/publishPaymentUrl.d.ts +5 -2
- package/lib/chevre/service/assetTransaction/pay/publishPaymentUrl.js +3 -3
- package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.d.ts +14 -3
- package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.js +1 -1
- package/lib/chevre/service/offer/eventServiceByCOA/authorize.d.ts +4 -2
- package/lib/chevre/service/offer/eventServiceByCOA/authorizeByAcceptAction.js +21 -13
- package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +17 -8
- package/lib/chevre/service/offer/eventServiceByCOA/findAcceptAction.d.ts +2 -2
- package/lib/chevre/service/payment/any/findAcceptAction.d.ts +2 -2
- package/lib/chevre/service/payment/any/findAcceptAction.js +2 -2
- package/lib/chevre/service/payment/any/findCheckAction.d.ts +7 -6
- package/lib/chevre/service/payment/any/findCheckAction.js +2 -2
- package/lib/chevre/service/payment/any/publishPaymentUrl.d.ts +2 -0
- package/lib/chevre/service/payment/movieTicket/checkMovieTicket.d.ts +3 -3
- package/lib/chevre/service/payment/movieTicket/checkMovieTicket.js +3 -3
- package/lib/chevre/service/task/acceptCOAOffer.js +5 -2
- package/lib/chevre/service/task/checkMovieTicket.js +3 -3
- package/lib/chevre/service/task/checkResource.js +2 -2
- package/lib/chevre/service/task/publishPaymentUrl.js +4 -2
- package/package.json +1 -1
|
@@ -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
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
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
|
-
|
|
70
|
-
|
|
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
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
async
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
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
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
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
|
|
1075
|
-
//
|
|
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
|
-
// '
|
|
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<
|
|
1082
|
-
// const setKeys: AnyKeys<
|
|
1083
|
-
// const update: UpdateQuery<
|
|
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.
|
|
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
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
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;
|