@chevre/domain 24.0.0-alpha.16 → 24.0.0-alpha.17
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/actionProcess.d.ts +97 -0
- package/lib/chevre/repo/action/actionProcess.js +270 -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.d.ts +3 -163
- package/lib/chevre/repo/action.js +308 -580
- package/lib/chevre/repo/aggregateAction.d.ts +102 -0
- package/lib/chevre/repo/aggregateAction.js +379 -0
- package/lib/chevre/repository.d.ts +17 -0
- package/lib/chevre/repository.js +38 -2
- package/lib/chevre/service/aggregation/system.d.ts +10 -10
- package/lib/chevre/service/aggregation/system.js +9 -9
- package/lib/chevre/service/offer/eventServiceByCOA/authorize.d.ts +4 -2
- package/lib/chevre/service/offer/eventServiceByCOA/authorizeByAcceptAction.js +20 -12
- package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +16 -7
- 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 });
|
|
@@ -830,29 +863,37 @@ class ActionRepo {
|
|
|
830
863
|
})
|
|
831
864
|
.exec();
|
|
832
865
|
}
|
|
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
|
-
|
|
866
|
+
// public async reCompleteAuthorizeEventOfferAction(params: {
|
|
867
|
+
// id: string;
|
|
868
|
+
// object: factory.action.authorize.offer.eventService.IObject;
|
|
869
|
+
// result: factory.action.authorize.offer.eventService.IResult;
|
|
870
|
+
// }): Promise<void> {
|
|
871
|
+
// return this.actionModel.findOneAndUpdate(
|
|
872
|
+
// {
|
|
873
|
+
// // typeOf: factory.actionType.AuthorizeAction,
|
|
874
|
+
// _id: { $eq: params.id },
|
|
875
|
+
// // ActiveActionStatus->CompletedActionStatusで再実装(2024-01-15~)
|
|
876
|
+
// // actionStatus: factory.actionStatusType.CompletedActionStatus
|
|
877
|
+
// actionStatus: { $eq: factory.actionStatusType.ActiveActionStatus }
|
|
878
|
+
// },
|
|
879
|
+
// {
|
|
880
|
+
// $set: {
|
|
881
|
+
// actionStatus: factory.actionStatusType.CompletedActionStatus,
|
|
882
|
+
// object: params.object,
|
|
883
|
+
// result: params.result,
|
|
884
|
+
// endDate: new Date()
|
|
885
|
+
// }
|
|
886
|
+
// },
|
|
887
|
+
// { new: true, projection: { _id: 1 } }
|
|
888
|
+
// )
|
|
889
|
+
// .lean<{ _id: ObjectId }>()
|
|
890
|
+
// .exec()
|
|
891
|
+
// .then((doc) => {
|
|
892
|
+
// if (doc === null) {
|
|
893
|
+
// throw new factory.errors.NotFound(this.actionModel.modelName);
|
|
894
|
+
// }
|
|
895
|
+
// });
|
|
896
|
+
// }
|
|
856
897
|
async updateById(params) {
|
|
857
898
|
await this.actionModel.updateOne({ _id: { $eq: params.id } }, params.update)
|
|
858
899
|
.exec();
|
|
@@ -1071,20 +1112,23 @@ class ActionRepo {
|
|
|
1071
1112
|
};
|
|
1072
1113
|
});
|
|
1073
1114
|
}
|
|
1074
|
-
// public async
|
|
1075
|
-
//
|
|
1076
|
-
// }) {
|
|
1077
|
-
// const { typeOf, project, recipeCategory, recipeFor, step, dateCreated, dateModified } = savingRecipe;
|
|
1115
|
+
// public async saveActionWithEndDate(savingAction: Omit<factory.action.authorize.invoice.IAction, 'id'>) {
|
|
1116
|
+
// const { sameAs, typeOf, project, agent, object, ...updateFields } = savingAction;
|
|
1078
1117
|
// const filter: FilterQuery<factory.recipe.IRecipe> = {
|
|
1079
|
-
// '
|
|
1118
|
+
// 'project.id': { $eq: project.id },
|
|
1119
|
+
// // 'agent.id': { $exists: true, $eq: agent.id },
|
|
1120
|
+
// // 'object.typeOf': { $exists: true, $eq: object.typeOf },
|
|
1121
|
+
// 'object.paymentMethodId': { $exists: true, $eq: object.paymentMethodId },
|
|
1122
|
+
// typeOf: { $eq: typeOf },
|
|
1123
|
+
// 'sameAs.id': { $exists: true, $eq: sameAs.id }
|
|
1080
1124
|
// };
|
|
1081
|
-
// const setOnInsert: AnyKeys<
|
|
1082
|
-
// const setKeys: AnyKeys<
|
|
1083
|
-
// const update: UpdateQuery<
|
|
1125
|
+
// const setOnInsert: AnyKeys<IAction<factory.actionType>> = { typeOf, project, agent, object, sameAs };
|
|
1126
|
+
// const setKeys: AnyKeys<IAction<factory.actionType>> = updateFields;
|
|
1127
|
+
// const update: UpdateQuery<IAction<factory.actionType>> = {
|
|
1084
1128
|
// $setOnInsert: setOnInsert,
|
|
1085
1129
|
// $set: setKeys
|
|
1086
1130
|
// };
|
|
1087
|
-
// return this.
|
|
1131
|
+
// return this.actionModel.updateOne<HydratedDocument<IRecipeAsDocument>>(
|
|
1088
1132
|
// filter,
|
|
1089
1133
|
// update,
|
|
1090
1134
|
// {
|
|
@@ -1094,42 +1138,25 @@ class ActionRepo {
|
|
|
1094
1138
|
// )
|
|
1095
1139
|
// .exec();
|
|
1096
1140
|
// }
|
|
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
|
-
}
|
|
1141
|
+
// public async findRecipeByAction<T extends factory.recipe.RecipeCategory>(params: {
|
|
1142
|
+
// project: { id: string };
|
|
1143
|
+
// recipeFor: { id: string };
|
|
1144
|
+
// }): Promise<Pick<IActionRecipe<T>, 'step' | 'recipeCategory'> | null> {
|
|
1145
|
+
// return this.actionRecipeModel.findOne(
|
|
1146
|
+
// {
|
|
1147
|
+
// 'project.id': { $eq: params.project.id },
|
|
1148
|
+
// 'recipeFor.id': { $eq: params.recipeFor.id }
|
|
1149
|
+
// },
|
|
1150
|
+
// { step: 1, recipeCategory: 1 }
|
|
1151
|
+
// // { lean: true }
|
|
1152
|
+
// )
|
|
1153
|
+
// .lean<Pick<IActionRecipe<T>, 'step' | 'recipeCategory'>>()
|
|
1154
|
+
// .exec();
|
|
1155
|
+
// // if (result === null) {
|
|
1156
|
+
// // throw new factory.errors.NotFound(this.actionRecipeModel.modelName);
|
|
1157
|
+
// // }
|
|
1158
|
+
// // return result;
|
|
1159
|
+
// }
|
|
1133
1160
|
async findIMinimizedPurchaseNumberAuthResultByCheckMovieTicketRecipe(params) {
|
|
1134
1161
|
const recipe = await this.actionRecipeModel.findOne({
|
|
1135
1162
|
'project.id': { $eq: params.project.id },
|
|
@@ -1147,184 +1174,6 @@ class ActionRepo {
|
|
|
1147
1174
|
.exec();
|
|
1148
1175
|
return recipe?.step[0]?.itemListElement[0]?.itemListElement[0]?.afterMedia;
|
|
1149
1176
|
}
|
|
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
|
-
}
|
|
1328
1177
|
getCursor(conditions, projection) {
|
|
1329
1178
|
return this.actionModel.find(conditions, projection)
|
|
1330
1179
|
.sort({ startDate: factory.sortType.Descending })
|
|
@@ -1334,126 +1183,5 @@ class ActionRepo {
|
|
|
1334
1183
|
return this.actionModel.updateMany(params.filter, { $unset: params.$unset }, { timestamps: false })
|
|
1335
1184
|
.exec();
|
|
1336
1185
|
}
|
|
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
1186
|
}
|
|
1459
1187
|
exports.ActionRepo = ActionRepo;
|