@chevre/domain 22.11.0-alpha.9 → 22.12.0-alpha.0

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 (156) hide show
  1. package/example/src/chevre/aggregation/aggregateOrderOfCustomer.ts +25 -11
  2. package/example/src/chevre/aggregation/aggregateOrderOfCustomerGlobally.ts +34 -0
  3. package/example/src/chevre/aggregation/aggregateTasks.ts +41 -0
  4. package/example/src/chevre/checkCustomerAttributesLength.ts +109 -0
  5. package/example/src/chevre/notifyAbortedTasksByEmail.ts +1 -1
  6. package/example/src/chevre/reIndex.ts +1 -1
  7. package/example/src/chevre/roles/addEventOfferPermissionIfNotExists.ts +27 -0
  8. package/example/src/chevre/roles/{addAdminInventoryManagerRole.ts → addProjectCreatorRole.ts} +6 -8
  9. package/example/src/chevre/roles/assignGlobalRoles.ts +72 -0
  10. package/example/src/chevre/roles/findPermissions.ts +84 -0
  11. package/example/src/chevre/roles/findRoleNames.ts +117 -0
  12. package/example/src/chevre/roles/removeConsolePermissionIfExists.ts +38 -0
  13. package/example/src/chevre/searchEventSeats.ts +1 -1
  14. package/example/src/chevre/searchProducts.ts +28 -0
  15. package/example/src/chevre/settings/addSettings.ts +31 -17
  16. package/example/src/chevre/task/countPotentiallyRunning.ts +41 -0
  17. package/example/src/chevre/task/countTasks.ts +51 -0
  18. package/example/src/chevre/{deleteRunsAtPassedCertainPeriod.ts → task/deleteRunsAtPassedCertainPeriod.ts} +4 -3
  19. package/example/src/chevre/task/deleteUnexpectedTasks.ts +23 -0
  20. package/example/src/chevre/task/emitRunning.ts +89 -0
  21. package/example/src/idaas/auth0/adminApplications.ts +183 -0
  22. package/example/src/idaas/auth0/getToken.ts +55 -0
  23. package/example/src/idaas/auth0/getTokenByPrivateKeyJWT.ts +84 -0
  24. package/example/src/regex.ts +31 -0
  25. package/lib/chevre/eventEmitter/task.d.ts +29 -6
  26. package/lib/chevre/factory/event.d.ts +1 -1
  27. package/lib/chevre/index.d.ts +0 -2
  28. package/lib/chevre/index.js +0 -10
  29. package/lib/chevre/repo/event.js +1 -1
  30. package/lib/chevre/repo/member.d.ts +22 -4
  31. package/lib/chevre/repo/member.js +81 -27
  32. package/lib/chevre/repo/mongoose/schemas/aggregateOrder.js +9 -0
  33. package/lib/chevre/repo/mongoose/schemas/event.js +1 -0
  34. package/lib/chevre/repo/mongoose/schemas/member/global.d.ts +14 -0
  35. package/lib/chevre/repo/mongoose/schemas/member/global.js +82 -0
  36. package/lib/chevre/repo/mongoose/schemas/product.js +9 -0
  37. package/lib/chevre/repo/mongoose/schemas/setting.d.ts +15 -0
  38. package/lib/chevre/repo/mongoose/schemas/setting.js +1 -0
  39. package/lib/chevre/repo/mongoose/schemas/task.js +9 -0
  40. package/lib/chevre/repo/order.d.ts +23 -2
  41. package/lib/chevre/repo/order.js +70 -8
  42. package/lib/chevre/repo/pendingReservation.js +1 -0
  43. package/lib/chevre/repo/product.js +12 -17
  44. package/lib/chevre/repo/role.d.ts +5 -4
  45. package/lib/chevre/repo/role.js +35 -32
  46. package/lib/chevre/repo/setting.d.ts +1 -10
  47. package/lib/chevre/repo/setting.js +2 -11
  48. package/lib/chevre/repo/stockHolder.d.ts +4 -27
  49. package/lib/chevre/repo/stockHolder.js +163 -175
  50. package/lib/chevre/repo/task.d.ts +58 -38
  51. package/lib/chevre/repo/task.js +126 -296
  52. package/lib/chevre/repo/transaction.js +10 -10
  53. package/lib/chevre/service/aggregation/event/aggregateScreeningEvent.js +7 -4
  54. package/lib/chevre/service/assetTransaction/cancelReservation/start.d.ts +1 -1
  55. package/lib/chevre/service/assetTransaction/registerService.js +4 -0
  56. package/lib/chevre/service/assetTransaction/reserve/start/createSubReservations.js +19 -16
  57. package/lib/chevre/service/assetTransaction/reserve/start.js +5 -1
  58. package/lib/chevre/service/code.d.ts +5 -28
  59. package/lib/chevre/service/code.js +3 -79
  60. package/lib/chevre/service/iam.d.ts +17 -7
  61. package/lib/chevre/service/iam.js +26 -6
  62. package/lib/chevre/service/notification/notifyAbortedTasksByEmail.d.ts +15 -0
  63. package/lib/chevre/service/notification/notifyAbortedTasksByEmail.js +38 -0
  64. package/lib/chevre/service/notification.d.ts +2 -1
  65. package/lib/chevre/service/notification.js +3 -1
  66. package/lib/chevre/service/offer/product.js +4 -0
  67. package/lib/chevre/service/order/confirmPayTransaction.d.ts +6 -1
  68. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/processOrder.js +3 -3
  69. package/lib/chevre/service/task/acceptCOAOffer.d.ts +1 -1
  70. package/lib/chevre/service/task/aggregateOffers.d.ts +1 -1
  71. package/lib/chevre/service/task/aggregateOffers.js +1 -1
  72. package/lib/chevre/service/task/aggregateOnSystem.d.ts +4 -2
  73. package/lib/chevre/service/task/aggregateScreeningEvent.d.ts +1 -1
  74. package/lib/chevre/service/task/aggregateScreeningEvent.js +1 -1
  75. package/lib/chevre/service/task/authorizePayment.d.ts +1 -1
  76. package/lib/chevre/service/task/cancelMoneyTransfer.d.ts +1 -1
  77. package/lib/chevre/service/task/cancelPendingReservation.d.ts +1 -1
  78. package/lib/chevre/service/task/cancelPendingReservation.js +1 -1
  79. package/lib/chevre/service/task/cancelReservation.d.ts +1 -1
  80. package/lib/chevre/service/task/cancelReservation.js +1 -1
  81. package/lib/chevre/service/task/checkMovieTicket.d.ts +1 -1
  82. package/lib/chevre/service/task/checkResource.d.ts +1 -1
  83. package/lib/chevre/service/task/checkResource.js +1 -1
  84. package/lib/chevre/service/task/confirmMoneyTransfer.d.ts +1 -1
  85. package/lib/chevre/service/task/confirmPayTransaction.d.ts +2 -2
  86. package/lib/chevre/service/task/confirmPayTransaction.js +3 -2
  87. package/lib/chevre/service/task/confirmRegisterService.d.ts +1 -1
  88. package/lib/chevre/service/task/confirmRegisterServiceTransaction.d.ts +1 -1
  89. package/lib/chevre/service/task/confirmReserveTransaction.d.ts +6 -2
  90. package/lib/chevre/service/task/confirmReserveTransaction.js +3 -3
  91. package/lib/chevre/service/task/createAccountingReport.d.ts +1 -1
  92. package/lib/chevre/service/task/createEvent.d.ts +1 -1
  93. package/lib/chevre/service/task/deletePerson.d.ts +1 -1
  94. package/lib/chevre/service/task/deleteTransaction.d.ts +1 -1
  95. package/lib/chevre/service/task/givePointAward.d.ts +1 -1
  96. package/lib/chevre/service/task/handleNotification.d.ts +4 -2
  97. package/lib/chevre/service/task/importEventCapacitiesFromCOA.d.ts +1 -1
  98. package/lib/chevre/service/task/importEventsFromCOA.d.ts +1 -1
  99. package/lib/chevre/service/task/importOffersFromCOA.d.ts +1 -1
  100. package/lib/chevre/service/task/invalidatePaymentUrl.d.ts +1 -1
  101. package/lib/chevre/service/task/moneyTransfer.d.ts +1 -1
  102. package/lib/chevre/service/task/onAssetTransactionStatusChanged.d.ts +1 -1
  103. package/lib/chevre/service/task/onAuthorizationCreated.d.ts +1 -1
  104. package/lib/chevre/service/task/onEventChanged.d.ts +1 -1
  105. package/lib/chevre/service/task/onOrderPaymentCompleted.d.ts +1 -1
  106. package/lib/chevre/service/task/onResourceUpdated.d.ts +1 -1
  107. package/lib/chevre/service/task/pay.d.ts +1 -1
  108. package/lib/chevre/service/task/placeOrder.d.ts +1 -1
  109. package/lib/chevre/service/task/publishPaymentUrl.d.ts +1 -1
  110. package/lib/chevre/service/task/refund.d.ts +1 -1
  111. package/lib/chevre/service/task/registerService.d.ts +1 -1
  112. package/lib/chevre/service/task/reserve.d.ts +1 -1
  113. package/lib/chevre/service/task/returnMoneyTransfer.d.ts +1 -1
  114. package/lib/chevre/service/task/returnOrder.d.ts +1 -1
  115. package/lib/chevre/service/task/returnPayTransaction.d.ts +1 -1
  116. package/lib/chevre/service/task/returnPointAward.d.ts +1 -1
  117. package/lib/chevre/service/task/returnReserveTransaction.d.ts +1 -1
  118. package/lib/chevre/service/task/sendEmailMessage.d.ts +1 -1
  119. package/lib/chevre/service/task/sendOrder.d.ts +1 -1
  120. package/lib/chevre/service/task/triggerWebhook.d.ts +1 -1
  121. package/lib/chevre/service/task/useReservation.d.ts +1 -1
  122. package/lib/chevre/service/task/voidMoneyTransferTransaction.d.ts +1 -1
  123. package/lib/chevre/service/task/voidPayTransaction.d.ts +1 -1
  124. package/lib/chevre/service/task/voidPayment.d.ts +1 -1
  125. package/lib/chevre/service/task/voidRegisterServiceTransaction.d.ts +1 -1
  126. package/lib/chevre/service/task/voidReserveTransaction.d.ts +1 -1
  127. package/lib/chevre/service/task/voidReserveTransaction.js +1 -1
  128. package/lib/chevre/service/task.d.ts +7 -29
  129. package/lib/chevre/service/task.js +9 -114
  130. package/lib/chevre/service/taskHandler/onOperationFailed/informTaskIfNeeded.d.ts +11 -0
  131. package/lib/chevre/service/taskHandler/onOperationFailed/informTaskIfNeeded.js +105 -0
  132. package/lib/chevre/service/taskHandler/onOperationFailed.d.ts +17 -0
  133. package/lib/chevre/service/taskHandler/onOperationFailed.js +70 -0
  134. package/lib/chevre/service/taskHandler.d.ts +26 -0
  135. package/lib/chevre/service/taskHandler.js +97 -0
  136. package/lib/chevre/service/validation/validateEvent.d.ts +2 -2
  137. package/lib/chevre/service/validation/validateEvent.js +16 -10
  138. package/lib/chevre/service.d.ts +0 -4
  139. package/lib/chevre/service.js +10 -14
  140. package/lib/chevre/settings/aggregation.d.ts +6 -1
  141. package/lib/chevre/settings/aggregation.js +2 -1
  142. package/package.json +6 -4
  143. package/example/src/chevre/adminAuth/adminIdentity.ts +0 -38
  144. package/example/src/chevre/executeOneTask.ts +0 -41
  145. package/example/src/chevre/executeTaskIfExists.ts +0 -80
  146. package/example/src/chevre/findExecutableTask.ts +0 -50
  147. package/example/src/chevre/findSetting.ts +0 -79
  148. package/example/src/chevre/searchPermissions.ts +0 -46
  149. package/example/src/chevre/searchProductOffers.ts +0 -29
  150. package/example/src/chevre/stockHolder/checkIfConflicted.ts +0 -76
  151. package/example/src/chevre/stockHolder/checkRedisKeyCount.ts +0 -186
  152. package/example/src/chevre/stockHolder/migratePendingReservations.ts +0 -96
  153. package/example/src/chevre/stockHolder/playAroundStockHolder.ts +0 -256
  154. package/example/src/chevre/upsertProductsByProductId.ts +0 -100
  155. package/lib/chevre/adminAuth.d.ts +0 -2
  156. package/lib/chevre/adminAuth.js +0 -6
@@ -12,30 +12,53 @@ interface IExecuteSettings {
12
12
  */
13
13
  redisClient?: RedisClientType;
14
14
  }
15
- type IOperationExecute<T> = (settings: IExecuteSettings) => Promise<T>;
16
- type INextFunction = (task: Pick<factory.task.ITask<factory.taskName>, 'id'>) => IOperationExecute<void>;
17
15
  interface IReadyTask {
18
16
  id: string;
19
17
  name?: factory.taskName;
20
18
  status: factory.taskStatus.Ready;
19
+ remainingNumberOfTries?: never;
21
20
  expires?: Date;
22
21
  executionResult?: never;
23
22
  }
23
+ /**
24
+ * タスク名不明の遅延実行中タスク
25
+ */
24
26
  interface IRunningTask {
25
27
  id: string;
26
28
  status: factory.taskStatus.Running;
27
29
  name?: never;
30
+ remainingNumberOfTries?: never;
31
+ expires?: never;
32
+ executionResult?: never;
33
+ }
34
+ /**
35
+ * タスク名指定での遅延実行中タスク
36
+ */
37
+ interface IRunningTaskByName {
38
+ id: string;
39
+ status: factory.taskStatus.Running;
40
+ name: factory.taskName;
41
+ remainingNumberOfTries?: never;
28
42
  expires?: never;
29
43
  executionResult?: never;
30
44
  }
45
+ /**
46
+ * 実行後タスクイベント
47
+ */
31
48
  interface IExecutedTask {
32
49
  id: string;
33
- status: factory.taskStatus;
50
+ status: factory.taskStatus.Executed | factory.taskStatus.Running | factory.taskStatus.Aborted;
51
+ name: factory.taskName;
34
52
  executionResult: factory.task.IExecutionResult;
35
- name?: never;
53
+ /**
54
+ * 実行されたタスクの残り試行回数
55
+ */
56
+ remainingNumberOfTries: number;
36
57
  expires?: never;
37
58
  }
38
- type IChangedTask = IReadyTask | IRunningTask | IExecutedTask;
59
+ type IChangedTask = IReadyTask | IRunningTask | IRunningTaskByName | IExecutedTask;
60
+ type IOperationExecute<T> = (settings: IExecuteSettings) => Promise<T>;
61
+ type INextFunction = (task: IExecutedTask) => IOperationExecute<void>;
39
62
  type IOnTaskStatusChangedListener = (task: IChangedTask, next?: INextFunction) => void;
40
63
  /**
41
64
  * タスクイベントエミッター
@@ -45,4 +68,4 @@ declare class TaskEventEmitter extends EventEmitter {
45
68
  emitTaskStatusChanged(task: IChangedTask, next?: INextFunction): void;
46
69
  }
47
70
  declare const taskEventEmitter: TaskEventEmitter;
48
- export { IChangedTask, IReadyTask, IRunningTask, IExecutedTask, IExecuteSettings, INextFunction, IOnTaskStatusChangedListener, taskEventEmitter };
71
+ export { IChangedTask, IReadyTask, IRunningTask, IRunningTaskByName, IExecutedTask, IExecuteSettings, INextFunction, IOnTaskStatusChangedListener, taskEventEmitter };
@@ -1,5 +1,5 @@
1
1
  import * as factory from '../factory';
2
- export type IMinimizedIndividualEvent<T extends factory.eventType.ScreeningEvent | factory.eventType.Event> = T extends factory.eventType.ScreeningEvent ? Pick<factory.event.IEvent<T>, 'project' | 'organizer' | 'id' | 'typeOf' | 'name' | 'doorTime' | 'endDate' | 'eventStatus' | 'location' | 'startDate' | 'superEvent' | 'offers' | 'coaInfo' | 'identifier'> : T extends factory.eventType.Event ? Pick<factory.event.IEvent<T>, 'project' | 'organizer' | 'id' | 'typeOf' | 'name' | 'doorTime' | 'endDate' | 'eventStatus' | 'location' | 'startDate' | 'offers'> & {
2
+ export type IMinimizedIndividualEvent<T extends factory.eventType.ScreeningEvent | factory.eventType.Event> = T extends factory.eventType.ScreeningEvent ? Pick<factory.event.IEvent<T>, 'project' | 'organizer' | 'id' | 'typeOf' | 'name' | 'doorTime' | 'endDate' | 'eventStatus' | 'location' | 'startDate' | 'superEvent' | 'offers' | 'coaInfo' | 'identifier' | 'maximumPhysicalAttendeeCapacity'> : T extends factory.eventType.Event ? Pick<factory.event.IEvent<T>, 'project' | 'organizer' | 'id' | 'typeOf' | 'name' | 'doorTime' | 'endDate' | 'eventStatus' | 'location' | 'startDate' | 'offers' | 'maximumPhysicalAttendeeCapacity'> & {
3
3
  superEvent?: never;
4
4
  } : never;
5
5
  /**
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import type * as COAService from '@motionpicture/coa-service';
5
5
  import type * as GMOService from '@motionpicture/gmo-service';
6
- import type * as AdminAuth from './adminAuth';
7
6
  import type * as Pecorinoapi from './pecorinoapi';
8
7
  import { credentials } from './credentials';
9
8
  import * as errorHandler from './errorHandler';
@@ -13,7 +12,6 @@ import * as repository from './repository';
13
12
  import * as service from './service';
14
13
  import * as settings from './settings';
15
14
  export { credentials, errorHandler, eventEmitter, factory, repository, service, settings };
16
- export declare function loadAdminAuth(): Promise<typeof AdminAuth>;
17
15
  export declare function loadPecorinoapi(): Promise<typeof Pecorinoapi>;
18
16
  export type COA = typeof COAService;
19
17
  export declare function loadCOA(): Promise<typeof COAService>;
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.settings = exports.service = exports.repository = exports.factory = exports.eventEmitter = exports.errorHandler = exports.credentials = void 0;
13
- exports.loadAdminAuth = loadAdminAuth;
14
13
  exports.loadPecorinoapi = loadPecorinoapi;
15
14
  exports.loadCOA = loadCOA;
16
15
  exports.loadGMO = loadGMO;
@@ -28,15 +27,6 @@ const service = require("./service");
28
27
  exports.service = service;
29
28
  const settings = require("./settings");
30
29
  exports.settings = settings;
31
- let adminAuth;
32
- function loadAdminAuth() {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- if (adminAuth === undefined) {
35
- adminAuth = yield Promise.resolve().then(() => require('./adminAuth'));
36
- }
37
- return adminAuth;
38
- });
39
- }
40
30
  let pecorinoapi;
41
31
  function loadPecorinoapi() {
42
32
  return __awaiter(this, void 0, void 0, function* () {
@@ -32,7 +32,7 @@ const AVAILABLE_PUBLIC_PROJECT_FIELDS = [
32
32
  'doorTime', 'endDate', 'eventStatus', 'identifier', 'location',
33
33
  'maximumAttendeeCapacity', 'name',
34
34
  // 'offers',
35
- 'organizer', 'project', 'remainingAttendeeCapacity', 'startDate', 'superEvent', 'typeOf'
35
+ 'organizer', 'project', 'remainingAttendeeCapacity', 'startDate', 'superEvent', 'typeOf', 'maximumPhysicalAttendeeCapacity'
36
36
  ];
37
37
  /**
38
38
  * イベントリポジトリ
@@ -1,11 +1,13 @@
1
1
  import type { Connection, FilterQuery } from 'mongoose';
2
2
  import * as factory from '../factory';
3
+ import { IGlobalMember } from './mongoose/schemas/member/global';
3
4
  type IKeyOfProjection = keyof factory.iam.IMember;
4
5
  export type ICustomerMember = Pick<factory.iam.IMemberOfRole, 'hasRole' | 'id' | 'name' | 'memberOf'>;
5
6
  /**
6
7
  * IAMメンバーリポジトリ
7
8
  */
8
9
  export declare class MemberRepo {
10
+ private readonly globalMemberModel;
9
11
  private readonly memberModel;
10
12
  constructor(connection: Connection);
11
13
  static CREATE_MONGO_CONDITIONS(params: factory.iam.ISearchConditions): FilterQuery<factory.iam.IMember>[];
@@ -37,7 +39,10 @@ export declare class MemberRepo {
37
39
  }): Promise<{
38
40
  member: ICustomerMember;
39
41
  }[]>;
40
- aggregateRoleNames(params: {
42
+ /**
43
+ * distinctコマンドを使用して、プロジェクトメンバーのロールを検索する
44
+ */
45
+ findRoleNamesByMember(params: {
41
46
  project: {
42
47
  id: {
43
48
  $eq: string;
@@ -56,9 +61,7 @@ export declare class MemberRepo {
56
61
  };
57
62
  };
58
63
  };
59
- }): Promise<{
60
- roleName: string;
61
- }[]>;
64
+ }): Promise<string[]>;
62
65
  deleteByProject(params: {
63
66
  project: {
64
67
  id: string;
@@ -163,6 +166,21 @@ export declare class MemberRepo {
163
166
  filter: any;
164
167
  $unset: any;
165
168
  }): Promise<import("mongoose").UpdateWriteOpResult>;
169
+ /**
170
+ * グローバルメンバー作成
171
+ * 2025-07-21~
172
+ */
173
+ createGlobalMember(params: IGlobalMember[]): Promise<void>;
174
+ /**
175
+ * distinctコマンドを使用して、グローバルメンバーのロールを検索する
176
+ */
177
+ findGlobalRoleNamesByMember(params: {
178
+ member: {
179
+ id: {
180
+ $eq: string;
181
+ };
182
+ };
183
+ }): Promise<string[]>;
166
184
  private projectFields;
167
185
  }
168
186
  export {};
@@ -13,16 +13,19 @@ exports.MemberRepo = void 0;
13
13
  const factory = require("../factory");
14
14
  const settings_1 = require("../settings");
15
15
  const member_1 = require("./mongoose/schemas/member");
16
+ const global_1 = require("./mongoose/schemas/member/global");
16
17
  const AVAILABLE_PROJECT_FIELDS = [
17
18
  'project',
18
19
  'typeOf',
19
20
  'member'
20
21
  ];
22
+ const ANY_PROJECT_ID = '*';
21
23
  /**
22
24
  * IAMメンバーリポジトリ
23
25
  */
24
26
  class MemberRepo {
25
27
  constructor(connection) {
28
+ this.globalMemberModel = connection.model(global_1.modelName, (0, global_1.createSchema)());
26
29
  this.memberModel = connection.model(member_1.modelName, (0, member_1.createSchema)());
27
30
  }
28
31
  // tslint:disable-next-line:cyclomatic-complexity max-func-body-length
@@ -112,7 +115,7 @@ class MemberRepo {
112
115
  throw new factory.errors.ArgumentNull('project.id');
113
116
  }
114
117
  const filterQueries = MemberRepo.CREATE_MONGO_CONDITIONS({
115
- project: { id: { $in: [params.project.id, '*'] } }, // 全プロジェクトで利用可能なクライアントを考慮(2025-01-11~)
118
+ project: { id: { $in: [params.project.id, ANY_PROJECT_ID] } }, // 全プロジェクトで利用可能なクライアントを考慮(2025-01-11~)
116
119
  member: {
117
120
  typeOf: { $eq: factory.creativeWorkType.WebApplication },
118
121
  memberOf: { typeOf: { $eq: factory.organizationType.Project } }, // プロジェクトメンバーのはず
@@ -163,32 +166,55 @@ class MemberRepo {
163
166
  .exec();
164
167
  });
165
168
  }
166
- aggregateRoleNames(params) {
169
+ // migrate to findRoleNamesByMember(2025-07-21~)
170
+ // public async aggregateRoleNames(params: {
171
+ // project: { id: { $eq: string } };
172
+ // member: {
173
+ // id: { $eq: string };
174
+ // memberOf: {
175
+ // id: { $eq: string };
176
+ // typeOf: { $eq: factory.organizationType.Corporation | factory.organizationType.Project };
177
+ // };
178
+ // };
179
+ // }): Promise<{ roleName: string }[]> {
180
+ // const matchStages: IMatchStage[] = [
181
+ // { $match: { 'project.id': { $eq: params.project.id.$eq } } },
182
+ // { $match: { 'member.id': { $eq: params.member.id.$eq } } },
183
+ // { $match: { 'member.memberOf.id': { $eq: params.member.memberOf.id.$eq } } },
184
+ // { $match: { 'member.memberOf.typeOf': { $eq: params.member.memberOf.typeOf.$eq } } }
185
+ // ];
186
+ // const aggregate = this.memberModel.aggregate([
187
+ // // ...(typeof params.sort?.productID === 'number')
188
+ // // ? [{ $sort: { productID: params.sort.productID } }]
189
+ // // : [],
190
+ // ...matchStages,
191
+ // {
192
+ // $unwind: {
193
+ // path: '$member.hasRole'
194
+ // }
195
+ // },
196
+ // {
197
+ // $project: {
198
+ // _id: 0,
199
+ // roleName: '$member.hasRole.roleName'
200
+ // }
201
+ // }
202
+ // ]);
203
+ // return aggregate.option({ maxTimeMS: MONGO_MAX_TIME_MS })
204
+ // .exec();
205
+ // }
206
+ /**
207
+ * distinctコマンドを使用して、プロジェクトメンバーのロールを検索する
208
+ */
209
+ findRoleNamesByMember(params) {
167
210
  return __awaiter(this, void 0, void 0, function* () {
168
- const matchStages = [
169
- { $match: { 'project.id': { $eq: params.project.id.$eq } } },
170
- { $match: { 'member.id': { $eq: params.member.id.$eq } } },
171
- { $match: { 'member.memberOf.id': { $eq: params.member.memberOf.id.$eq } } },
172
- { $match: { 'member.memberOf.typeOf': { $eq: params.member.memberOf.typeOf.$eq } } }
173
- ];
174
- const aggregate = this.memberModel.aggregate([
175
- // ...(typeof params.sort?.productID === 'number')
176
- // ? [{ $sort: { productID: params.sort.productID } }]
177
- // : [],
178
- ...matchStages,
179
- {
180
- $unwind: {
181
- path: '$member.hasRole'
182
- }
183
- },
184
- {
185
- $project: {
186
- _id: 0,
187
- roleName: '$member.hasRole.roleName'
188
- }
189
- }
190
- ]);
191
- return aggregate.option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
211
+ return this.memberModel.distinct('member.hasRole.roleName', {
212
+ 'project.id': { $eq: params.project.id.$eq },
213
+ 'member.id': { $eq: params.member.id.$eq },
214
+ 'member.memberOf.id': { $eq: params.member.memberOf.id.$eq },
215
+ 'member.memberOf.typeOf': { $eq: params.member.memberOf.typeOf.$eq }
216
+ })
217
+ .setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
192
218
  .exec();
193
219
  });
194
220
  }
@@ -293,7 +319,9 @@ class MemberRepo {
293
319
  if (typeof params.page !== 'number') {
294
320
  throw new factory.errors.ArgumentNull('page');
295
321
  }
296
- const matchStages = [{ $match: { 'member.id': { $eq: params.member.id } } }];
322
+ const matchStages = [
323
+ { $match: { 'member.id': { $eq: params.member.id } } }
324
+ ];
297
325
  if (typeof ((_b = (_a = params.project) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.$eq) === 'string') {
298
326
  matchStages.push({ $match: { 'project.id': { $eq: params.project.id.$eq } } });
299
327
  }
@@ -343,6 +371,32 @@ class MemberRepo {
343
371
  .exec();
344
372
  });
345
373
  }
374
+ /**
375
+ * グローバルメンバー作成
376
+ * 2025-07-21~
377
+ */
378
+ createGlobalMember(params) {
379
+ return __awaiter(this, void 0, void 0, function* () {
380
+ if (params.length > 0) {
381
+ yield this.globalMemberModel.insertMany(params.map(({ typeOf, member }) => ({ typeOf, member })));
382
+ }
383
+ else {
384
+ // no op
385
+ }
386
+ });
387
+ }
388
+ /**
389
+ * distinctコマンドを使用して、グローバルメンバーのロールを検索する
390
+ */
391
+ findGlobalRoleNamesByMember(params) {
392
+ return __awaiter(this, void 0, void 0, function* () {
393
+ return this.globalMemberModel.distinct('member.hasRole.roleName', {
394
+ 'member.id': { $eq: params.member.id.$eq }
395
+ })
396
+ .setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
397
+ .exec();
398
+ });
399
+ }
346
400
  projectFields(params, inclusion) {
347
401
  return __awaiter(this, void 0, void 0, function* () {
348
402
  const conditions = MemberRepo.CREATE_MONGO_CONDITIONS(params);
@@ -61,6 +61,15 @@ const indexes = [
61
61
  [
62
62
  { typeOf: 1, identifier: 1 },
63
63
  { name: 'typeOf' }
64
+ ],
65
+ [
66
+ { 'aggregateOrder.aggregateProject.projectCount': 1, identifier: 1 },
67
+ {
68
+ name: 'aggregateProjectProjectCount',
69
+ partialFilterExpression: {
70
+ 'aggregateOrder.aggregateProject.projectCount': { $exists: true }
71
+ }
72
+ }
64
73
  ]
65
74
  ];
66
75
  exports.indexes = indexes;
@@ -33,6 +33,7 @@ const schemaDefinition = {
33
33
  superEvent: mongoose_1.SchemaTypes.Mixed,
34
34
  offers: mongoose_1.SchemaTypes.Mixed,
35
35
  maximumAttendeeCapacity: { type: Number },
36
+ maximumPhysicalAttendeeCapacity: { type: Number, required: false }, // add(2025-08-24~)
36
37
  remainingAttendeeCapacity: { type: Number },
37
38
  checkInCount: { type: Number },
38
39
  attendeeCount: { type: Number },
@@ -0,0 +1,14 @@
1
+ import { IndexDefinition, IndexOptions, Model, Schema, SchemaDefinition } from 'mongoose';
2
+ import * as factory from '../../../../factory';
3
+ type IMemberOfRole = Pick<factory.iam.IMemberOfRole, 'hasRole' | 'id' | 'image' | 'name' | 'typeOf' | 'username'>;
4
+ type IGlobalMember = Pick<factory.iam.IMember, 'typeOf'> & {
5
+ member: IMemberOfRole;
6
+ };
7
+ type IDocType = IGlobalMember;
8
+ type IModel = Model<IDocType>;
9
+ type ISchemaDefinition = SchemaDefinition<IDocType>;
10
+ type ISchema = Schema<IDocType, IModel, {}, {}, {}, {}, ISchemaDefinition, IDocType>;
11
+ declare const modelName = "Member.Global";
12
+ declare const indexes: [d: IndexDefinition, o: IndexOptions][];
13
+ declare function createSchema(): ISchema;
14
+ export { createSchema, IGlobalMember, IModel, indexes, modelName };
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modelName = exports.indexes = void 0;
4
+ exports.createSchema = createSchema;
5
+ const mongoose_1 = require("mongoose");
6
+ const writeConcern_1 = require("../../writeConcern");
7
+ const settings_1 = require("../../../../settings");
8
+ const modelName = 'Member.Global';
9
+ exports.modelName = modelName;
10
+ const schemaDefinition = {
11
+ // globalロール管理なのでprojectは不要
12
+ // project: {
13
+ // type: SchemaTypes.Mixed,
14
+ // required: true
15
+ // },
16
+ typeOf: {
17
+ type: String,
18
+ required: true
19
+ },
20
+ member: {
21
+ type: mongoose_1.SchemaTypes.Mixed,
22
+ required: true
23
+ }
24
+ };
25
+ const schemaOptions = {
26
+ autoIndex: settings_1.MONGO_AUTO_INDEX,
27
+ autoCreate: false,
28
+ collection: 'members.global',
29
+ id: true,
30
+ read: settings_1.MONGO_READ_PREFERENCE,
31
+ writeConcern: writeConcern_1.writeConcern,
32
+ strict: true,
33
+ strictQuery: false,
34
+ timestamps: false,
35
+ versionKey: false,
36
+ toJSON: {
37
+ getters: false,
38
+ virtuals: false,
39
+ minimize: false,
40
+ versionKey: false
41
+ },
42
+ toObject: {
43
+ getters: false,
44
+ virtuals: true,
45
+ minimize: false,
46
+ versionKey: false
47
+ }
48
+ };
49
+ const indexes = [
50
+ [
51
+ { 'member.id': 1 },
52
+ {
53
+ name: 'uniqueIAMMember',
54
+ unique: true
55
+ }
56
+ ],
57
+ [
58
+ { 'member.hasRole.roleName': 1, 'member.id': 1 },
59
+ {
60
+ name: 'searchByMemberHasRoleRoleName',
61
+ partialFilterExpression: {
62
+ 'member.hasRole.roleName': { $exists: true }
63
+ }
64
+ }
65
+ ]
66
+ ];
67
+ exports.indexes = indexes;
68
+ /**
69
+ * グロバールIAMメンバースキーマ
70
+ */
71
+ let schema;
72
+ function createSchema() {
73
+ if (schema === undefined) {
74
+ schema = new mongoose_1.Schema(schemaDefinition, schemaOptions);
75
+ if (settings_1.MONGO_AUTO_INDEX) {
76
+ indexes.forEach((indexParams) => {
77
+ schema === null || schema === void 0 ? void 0 : schema.index(...indexParams);
78
+ });
79
+ }
80
+ }
81
+ return schema;
82
+ }
@@ -120,6 +120,15 @@ const indexes = [
120
120
  'name.en': { $exists: true }
121
121
  }
122
122
  }
123
+ ],
124
+ [
125
+ { additionalProperty: 1, productID: 1 },
126
+ {
127
+ name: 'additionalProperty',
128
+ partialFilterExpression: {
129
+ additionalProperty: { $exists: true }
130
+ }
131
+ }
123
132
  ]
124
133
  ];
125
134
  exports.indexes = indexes;
@@ -13,6 +13,20 @@ interface IOnReservationStatusChanged {
13
13
  */
14
14
  informReservation?: factory.project.IInformParams[];
15
15
  }
16
+ interface IOnTaskStatusChanged {
17
+ /**
18
+ * AggService通知先
19
+ */
20
+ informTask?: factory.project.IInformParams[];
21
+ /**
22
+ * 分析連携するtaskNameリスト
23
+ */
24
+ informTaskNames?: factory.taskName[];
25
+ /**
26
+ * 分析連携するtaskStatusリスト
27
+ */
28
+ informTaskStatuses?: factory.taskStatus[];
29
+ }
16
30
  interface IOnEventChanged {
17
31
  informEvent2agg?: factory.project.IInformParams[];
18
32
  }
@@ -102,6 +116,7 @@ export interface ISetting {
102
116
  onEventChanged?: IOnEventChanged;
103
117
  onOrderStatusChanged: IOnOrderStatusChanged;
104
118
  onReservationStatusChanged?: IOnReservationStatusChanged;
119
+ onTaskStatusChanged?: IOnTaskStatusChanged;
105
120
  onResourceUpdated?: {
106
121
  informResource?: factory.project.IInformParams[];
107
122
  };
@@ -14,6 +14,7 @@ const schemaDefinition = {
14
14
  onEventChanged: mongoose_1.SchemaTypes.Mixed,
15
15
  onOrderStatusChanged: mongoose_1.SchemaTypes.Mixed,
16
16
  onReservationStatusChanged: mongoose_1.SchemaTypes.Mixed,
17
+ onTaskStatusChanged: mongoose_1.SchemaTypes.Mixed,
17
18
  onResourceUpdated: mongoose_1.SchemaTypes.Mixed,
18
19
  onTransactionStatusChanged: mongoose_1.SchemaTypes.Mixed,
19
20
  quota: mongoose_1.SchemaTypes.Mixed,
@@ -186,6 +186,15 @@ const indexes = [
186
186
  }
187
187
  }
188
188
  ],
189
+ [
190
+ { status: 1, lastTriedAt: 1, remainingNumberOfTries: 1, name: 1 },
191
+ {
192
+ name: 'abortMany',
193
+ partialFilterExpression: {
194
+ lastTriedAt: { $type: 'date' }
195
+ }
196
+ }
197
+ ],
189
198
  [
190
199
  { status: 1, expires: 1 },
191
200
  {
@@ -16,6 +16,12 @@ interface IAggregation {
16
16
  maxPrice: number;
17
17
  minPrice: number;
18
18
  }
19
+ interface IGlobalAggregateOrder {
20
+ orderCount: number;
21
+ aggregateProject: {
22
+ projectCount: number;
23
+ };
24
+ }
19
25
  interface IAggregateOrder {
20
26
  aggregation: IAggregation;
21
27
  }
@@ -204,8 +210,8 @@ export declare class OrderRepo {
204
210
  emailCount?: number;
205
211
  };
206
212
  }>;
207
- aggregateOrderOfCustomer(params: {
208
- project: {
213
+ aggregateOrderOfCustomerByProject(params: {
214
+ project?: {
209
215
  id: {
210
216
  $eq: string;
211
217
  };
@@ -225,5 +231,20 @@ export declare class OrderRepo {
225
231
  emailCount?: number;
226
232
  };
227
233
  }>;
234
+ aggregateOrderOfCustomerGlobally(params: {
235
+ orderDate: {
236
+ $gte: Date;
237
+ $lte: Date;
238
+ };
239
+ customer: {
240
+ email: {
241
+ $eq: string;
242
+ };
243
+ };
244
+ }): Promise<{
245
+ aggregation: IGlobalAggregateOrder & {
246
+ sumGraceTime?: never;
247
+ };
248
+ }>;
228
249
  }
229
250
  export {};
@@ -1198,17 +1198,13 @@ class OrderRepo {
1198
1198
  };
1199
1199
  });
1200
1200
  }
1201
- aggregateOrderOfCustomer(params) {
1201
+ aggregateOrderOfCustomerByProject(params) {
1202
1202
  return __awaiter(this, void 0, void 0, function* () {
1203
- const matchConditions = {
1204
- orderDate: {
1203
+ var _a;
1204
+ const matchConditions = Object.assign(Object.assign({ orderDate: {
1205
1205
  $gte: params.orderDate.$gte,
1206
1206
  $lte: params.orderDate.$lte
1207
- },
1208
- typeOf: { $eq: factory.order.OrderType.Order },
1209
- 'project.id': { $eq: params.project.id.$eq },
1210
- 'customer.email': { $exists: true, $eq: params.customer.email.$eq }
1211
- };
1207
+ }, typeOf: { $eq: factory.order.OrderType.Order } }, (typeof ((_a = params.project) === null || _a === void 0 ? void 0 : _a.id.$eq) === 'string') ? { 'project.id': { $eq: params.project.id.$eq } } : undefined), { 'customer.email': { $exists: true, $eq: params.customer.email.$eq } });
1212
1208
  const aggregations = yield this.orderModel.aggregate([
1213
1209
  { $match: matchConditions },
1214
1210
  {
@@ -1250,5 +1246,71 @@ class OrderRepo {
1250
1246
  };
1251
1247
  });
1252
1248
  }
1249
+ aggregateOrderOfCustomerGlobally(params) {
1250
+ return __awaiter(this, void 0, void 0, function* () {
1251
+ const matchConditions = {
1252
+ orderDate: {
1253
+ $gte: params.orderDate.$gte,
1254
+ $lte: params.orderDate.$lte
1255
+ },
1256
+ typeOf: { $eq: factory.order.OrderType.Order },
1257
+ 'customer.email': { $exists: true, $eq: params.customer.email.$eq }
1258
+ };
1259
+ const aggregations = yield this.orderModel.aggregate([
1260
+ { $match: matchConditions },
1261
+ {
1262
+ $project: {
1263
+ typeOf: '$typeOf'
1264
+ }
1265
+ },
1266
+ {
1267
+ $group: {
1268
+ _id: '$typeOf',
1269
+ orderCount: { $sum: 1 }
1270
+ }
1271
+ },
1272
+ {
1273
+ $project: {
1274
+ _id: 0,
1275
+ orderCount: '$orderCount'
1276
+ }
1277
+ }
1278
+ ])
1279
+ .exec();
1280
+ if (aggregations.length === 0) {
1281
+ return {
1282
+ aggregation: {
1283
+ orderCount: 0,
1284
+ aggregateProject: { projectCount: 0 }
1285
+ }
1286
+ };
1287
+ }
1288
+ const aggregations2 = yield this.orderModel.aggregate([
1289
+ { $match: matchConditions },
1290
+ {
1291
+ $project: {
1292
+ project: '$project'
1293
+ }
1294
+ },
1295
+ {
1296
+ $group: {
1297
+ _id: '$project.id'
1298
+ }
1299
+ },
1300
+ {
1301
+ $count: 'projectCount'
1302
+ },
1303
+ {
1304
+ $project: {
1305
+ aggregateProject: { projectCount: '$projectCount' }
1306
+ }
1307
+ }
1308
+ ])
1309
+ .exec();
1310
+ return {
1311
+ aggregation: Object.assign(Object.assign({}, aggregations[0]), aggregations2[0])
1312
+ };
1313
+ });
1314
+ }
1253
1315
  }
1254
1316
  exports.OrderRepo = OrderRepo;