@chevre/domain 20.2.0-alpha.47 → 20.2.0-alpha.49

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.
@@ -1,3 +1,4 @@
1
+ import { BulkWriteOpResultObject } from 'mongodb';
1
2
  import { Connection } from 'mongoose';
2
3
  import * as factory from '../factory';
3
4
  import * as EventFactory from '../factory/event';
@@ -74,12 +75,12 @@ export declare class MongoRepository {
74
75
  /**
75
76
  * 特定の追加特性をキーにして、なければ作成する(複数対応)
76
77
  */
77
- createIfNotExistMany<T extends factory.eventType.ScreeningEvent>(params: {
78
+ createManyIfNotExist<T extends factory.eventType>(params: {
78
79
  attributes: factory.event.IAttributes<T>;
79
80
  filter: {
80
81
  name: string;
81
82
  };
82
- }[]): Promise<void>;
83
+ }[]): Promise<BulkWriteOpResultObject | void>;
83
84
  /**
84
85
  * イベント部分更新
85
86
  */
@@ -138,7 +139,7 @@ export declare class MongoRepository {
138
139
  updateAggregationById<T extends factory.eventType>(params: {
139
140
  id: string;
140
141
  }, update: IUpdateAggregateReservationParams | IUpdateAggregateUseActionsParams): Promise<factory.event.IEvent<T>>;
141
- bulkWrite(bulkWriteOps: any[]): Promise<import("mongodb").BulkWriteOpResultObject>;
142
+ bulkWrite(bulkWriteOps: any[]): Promise<BulkWriteOpResultObject>;
142
143
  getCursor(conditions: any, projection: any): import("mongoose").QueryCursor<any>;
143
144
  deleteUnnecessaryProjectAttributesById(params: {
144
145
  id: string;
@@ -460,38 +460,36 @@ class MongoRepository {
460
460
  /**
461
461
  * 特定の追加特性をキーにして、なければ作成する(複数対応)
462
462
  */
463
- createIfNotExistMany(params) {
463
+ createManyIfNotExist(params) {
464
464
  return __awaiter(this, void 0, void 0, function* () {
465
465
  const bulkWriteOps = [];
466
466
  if (Array.isArray(params)) {
467
467
  params.forEach((creatingEventParams) => {
468
468
  var _a;
469
- if (creatingEventParams.attributes.typeOf === factory.eventType.ScreeningEvent) {
470
- const additionalPropertyValue = (_a = creatingEventParams.attributes.additionalProperty) === null || _a === void 0 ? void 0 : _a.find((property) => property.name === creatingEventParams.filter.name);
471
- if (typeof additionalPropertyValue !== 'string') {
472
- throw new factory.errors.NotFound('additionalProperty.value');
473
- }
474
- bulkWriteOps.push({
475
- updateOne: {
476
- filter: {
477
- typeOf: creatingEventParams.attributes.typeOf,
478
- // 追加特性をキーに更新
479
- additionalProperty: {
480
- $exists: true,
481
- $all: [{ name: creatingEventParams.filter.name, value: additionalPropertyValue }]
482
- }
483
- },
484
- update: {
485
- $setOnInsert: Object.assign({ _id: uniqid() }, creatingEventParams.attributes)
486
- },
487
- upsert: true
488
- }
489
- });
469
+ const additionalPropertyValue = (_a = creatingEventParams.attributes.additionalProperty) === null || _a === void 0 ? void 0 : _a.find((property) => property.name === creatingEventParams.filter.name);
470
+ if (typeof additionalPropertyValue !== 'string') {
471
+ throw new factory.errors.NotFound('additionalProperty.value');
490
472
  }
473
+ bulkWriteOps.push({
474
+ updateOne: {
475
+ filter: {
476
+ typeOf: creatingEventParams.attributes.typeOf,
477
+ // 追加特性をキーに更新
478
+ additionalProperty: {
479
+ $exists: true,
480
+ $all: [{ name: creatingEventParams.filter.name, value: additionalPropertyValue }]
481
+ }
482
+ },
483
+ update: {
484
+ $setOnInsert: Object.assign({ _id: uniqid() }, creatingEventParams.attributes)
485
+ },
486
+ upsert: true
487
+ }
488
+ });
491
489
  });
492
490
  }
493
491
  if (bulkWriteOps.length > 0) {
494
- yield this.eventModel.bulkWrite(bulkWriteOps, { ordered: false });
492
+ return this.eventModel.bulkWrite(bulkWriteOps, { ordered: false });
495
493
  }
496
494
  });
497
495
  }
@@ -24,7 +24,6 @@ export declare class MongoRepository {
24
24
  readonly taskModel: typeof Model;
25
25
  constructor(connection: Connection);
26
26
  static CREATE_MONGO_CONDITIONS(params: factory.task.ISearchConditions): any[];
27
- save(taskAttributes: factory.task.IAttributes<factory.taskName>): Promise<factory.task.ITask<factory.taskName>>;
28
27
  saveMany(taskAttributes: factory.task.IAttributes<factory.taskName>[]): Promise<any[]>;
29
28
  executeOneByName<T extends factory.taskName>(params: {
30
29
  name: T;
@@ -136,12 +136,11 @@ class MongoRepository {
136
136
  }
137
137
  return andConditions;
138
138
  }
139
- save(taskAttributes) {
140
- return __awaiter(this, void 0, void 0, function* () {
141
- return this.taskModel.create(taskAttributes)
142
- .then((doc) => doc.toObject());
143
- });
144
- }
139
+ // public async save(taskAttributes: factory.task.IAttributes<factory.taskName>): Promise<void> {
140
+ // // return this.taskModel.create(taskAttributes)
141
+ // // .then((doc) => <factory.task.ITask<factory.taskName>>doc.toObject());
142
+ // await this.taskModel.create(taskAttributes);
143
+ // }
145
144
  saveMany(taskAttributes) {
146
145
  return __awaiter(this, void 0, void 0, function* () {
147
146
  if (taskAttributes.length > 0) {
@@ -581,7 +581,7 @@ function onReservationsCreated(params) {
581
581
  // 集計タスク
582
582
  yield OfferService.createAggregateScreeningEventIfNotExist({
583
583
  project: params.event.project,
584
- reservationFor: { id: params.event.id },
584
+ reservationFor: [{ id: params.event.id }],
585
585
  force: false
586
586
  })({ task: repos.task });
587
587
  });
@@ -33,4 +33,4 @@ export declare function exportTasks<T extends factory.assetTransactionType>(para
33
33
  project: ProjectRepo;
34
34
  task: TaskRepo;
35
35
  assetTransaction: AssetTransactionRepo;
36
- }) => Promise<(import("@chevre/factory/lib/task").ITask | import("@chevre/factory/lib/task/deleteAssetTransaction").ITask | import("@chevre/factory/lib/task/deleteAuthorization").ITask | import("@chevre/factory/lib/task/deleteOrder").ITask | import("@chevre/factory/lib/task/deleteTransaction").ITask | import("@chevre/factory/lib/task/sendEmailMessage").ITask | import("@chevre/factory/lib/task/triggerWebhook").ITask | import("@chevre/factory/lib/task/confirmMoneyTransfer").ITask | import("@chevre/factory/lib/task/confirmRegisterService").ITask | import("@chevre/factory/lib/task/confirmPayTransaction").ITask | import("@chevre/factory/lib/task/confirmRegisterServiceTransaction").ITask | import("@chevre/factory/lib/task/confirmReserveTransaction").ITask | import("@chevre/factory/lib/task/deleteMember").ITask | import("@chevre/factory/lib/task/givePointAward").ITask | import("@chevre/factory/lib/task/orderProgramMembership").ITask | import("@chevre/factory/lib/task/placeOrder").ITask | import("@chevre/factory/lib/task/returnOrder").ITask | import("@chevre/factory/lib/task/returnMoneyTransfer").ITask | import("@chevre/factory/lib/task/returnPayTransaction").ITask | import("@chevre/factory/lib/task/returnPointAward").ITask | import("@chevre/factory/lib/task/returnReserveTransaction").ITask | import("@chevre/factory/lib/task/sendOrder").ITask | import("@chevre/factory/lib/task/voidMoneyTransferTransaction").ITask | import("@chevre/factory/lib/task/voidPayTransaction").ITask | import("@chevre/factory/lib/task/voidRegisterServiceTransaction").ITask | import("@chevre/factory/lib/task/voidReserveTransaction").ITask)[] | undefined>;
36
+ }) => Promise<(import("@chevre/factory/lib/task/confirmReserveTransaction").ITask | import("@chevre/factory/lib/task").ITask | import("@chevre/factory/lib/task/deleteAssetTransaction").ITask | import("@chevre/factory/lib/task/deleteAuthorization").ITask | import("@chevre/factory/lib/task/deleteOrder").ITask | import("@chevre/factory/lib/task/deleteTransaction").ITask | import("@chevre/factory/lib/task/sendEmailMessage").ITask | import("@chevre/factory/lib/task/triggerWebhook").ITask | import("@chevre/factory/lib/task/confirmMoneyTransfer").ITask | import("@chevre/factory/lib/task/confirmRegisterService").ITask | import("@chevre/factory/lib/task/confirmPayTransaction").ITask | import("@chevre/factory/lib/task/confirmRegisterServiceTransaction").ITask | import("@chevre/factory/lib/task/deleteMember").ITask | import("@chevre/factory/lib/task/givePointAward").ITask | import("@chevre/factory/lib/task/orderProgramMembership").ITask | import("@chevre/factory/lib/task/placeOrder").ITask | import("@chevre/factory/lib/task/returnOrder").ITask | import("@chevre/factory/lib/task/returnMoneyTransfer").ITask | import("@chevre/factory/lib/task/returnPayTransaction").ITask | import("@chevre/factory/lib/task/returnPointAward").ITask | import("@chevre/factory/lib/task/returnReserveTransaction").ITask | import("@chevre/factory/lib/task/sendOrder").ITask | import("@chevre/factory/lib/task/voidMoneyTransferTransaction").ITask | import("@chevre/factory/lib/task/voidPayTransaction").ITask | import("@chevre/factory/lib/task/voidRegisterServiceTransaction").ITask | import("@chevre/factory/lib/task/voidReserveTransaction").ITask)[] | undefined>;
@@ -64,7 +64,7 @@ export declare function searchEventSeatOffersWithPaging(params: {
64
64
  * イベント変更時処理
65
65
  */
66
66
  export declare function onEventChanged(params: {
67
- event: factory.event.IEvent<factory.eventType>;
67
+ event: factory.event.IEvent<factory.eventType> | factory.event.IEvent<factory.eventType>[];
68
68
  isNew: boolean;
69
69
  }): (repos: {
70
70
  event: EventRepo;
@@ -77,7 +77,7 @@ export declare function createAggregateScreeningEventIfNotExist(params: {
77
77
  };
78
78
  reservationFor: {
79
79
  id: string;
80
- };
80
+ }[];
81
81
  force: boolean;
82
82
  }): (repos: {
83
83
  task: TaskRepo;
@@ -212,63 +212,72 @@ exports.searchEventSeatOffersWithPaging = searchEventSeatOffersWithPaging;
212
212
  */
213
213
  function onEventChanged(params) {
214
214
  return (repos) => __awaiter(this, void 0, void 0, function* () {
215
- const changedEvent = params.event;
216
- // ScreeningEventであれば集計タスク
217
- if (changedEvent.typeOf === factory.eventType.ScreeningEvent) {
218
- yield createAggregateScreeningEventIfNotExist({
219
- project: changedEvent.project,
220
- reservationFor: { id: changedEvent.id },
221
- // 新規作成の場合は強制的に集計
222
- force: params.isNew
223
- })(repos);
215
+ const changedEvents = (Array.isArray(params.event)) ? params.event : [params.event];
216
+ if (changedEvents.length > 0) {
217
+ // ScreeningEventであれば集計タスク
218
+ if (changedEvents[0].typeOf === factory.eventType.ScreeningEvent) {
219
+ yield createAggregateScreeningEventIfNotExist({
220
+ project: { id: changedEvents[0].project.id },
221
+ reservationFor: changedEvents.map((changedEvent) => {
222
+ return { id: changedEvent.id };
223
+ }),
224
+ // 新規作成の場合は強制的に集計
225
+ force: params.isNew
226
+ })(repos);
227
+ }
224
228
  }
225
229
  });
226
230
  }
227
231
  exports.onEventChanged = onEventChanged;
228
232
  function createAggregateScreeningEventIfNotExist(params) {
229
233
  return (repos) => __awaiter(this, void 0, void 0, function* () {
234
+ let aggregateTasks = [];
235
+ const runsAt = new Date();
236
+ const remainingNumberOfTries = 2;
237
+ const project = {
238
+ id: params.project.id, typeOf: factory.organizationType.Project
239
+ };
230
240
  if (params.force) {
231
- const aggregateTask = {
232
- project: { id: params.project.id, typeOf: factory.organizationType.Project },
233
- name: factory.taskName.AggregateScreeningEvent,
234
- status: factory.taskStatus.Ready,
235
- runsAt: new Date(),
236
- remainingNumberOfTries: 3,
237
- numberOfTried: 0,
238
- executionResults: [],
239
- data: {
240
- typeOf: factory.eventType.ScreeningEvent,
241
- id: params.reservationFor.id
242
- }
243
- };
244
- yield repos.task.save(aggregateTask);
245
- }
246
- else {
247
- // 冗長な作成を避ける
248
- const readyAggregateScreeningEventTaskDoc = yield repos.task.taskModel.findOne({
249
- 'project.id': { $eq: params.project.id },
250
- name: { $eq: factory.taskName.AggregateScreeningEvent },
251
- status: { $eq: factory.taskStatus.Ready },
252
- 'data.id': { $exists: true, $eq: params.reservationFor.id }
253
- }, { _id: 1 })
254
- .exec();
255
- if (readyAggregateScreeningEventTaskDoc === null) {
256
- const aggregateTask = {
257
- project: { id: params.project.id, typeOf: factory.organizationType.Project },
241
+ aggregateTasks = params.reservationFor.map((reservationFor) => {
242
+ return {
243
+ project,
258
244
  name: factory.taskName.AggregateScreeningEvent,
259
245
  status: factory.taskStatus.Ready,
260
- runsAt: new Date(),
261
- remainingNumberOfTries: 3,
246
+ runsAt,
247
+ remainingNumberOfTries,
262
248
  numberOfTried: 0,
263
249
  executionResults: [],
264
- data: {
265
- typeOf: factory.eventType.ScreeningEvent,
266
- id: params.reservationFor.id
267
- }
250
+ data: { typeOf: factory.eventType.ScreeningEvent, id: reservationFor.id }
268
251
  };
269
- yield repos.task.save(aggregateTask);
252
+ });
253
+ }
254
+ else {
255
+ for (const reservationFor of params.reservationFor) {
256
+ // 冗長な作成を避ける
257
+ const readyAggregateScreeningEventTaskDoc = yield repos.task.taskModel.findOne({
258
+ 'project.id': { $eq: project.id },
259
+ name: { $eq: factory.taskName.AggregateScreeningEvent },
260
+ status: { $eq: factory.taskStatus.Ready },
261
+ 'data.id': { $exists: true, $eq: reservationFor.id }
262
+ }, { _id: 1 })
263
+ .exec();
264
+ if (readyAggregateScreeningEventTaskDoc === null) {
265
+ aggregateTasks.push({
266
+ project,
267
+ name: factory.taskName.AggregateScreeningEvent,
268
+ status: factory.taskStatus.Ready,
269
+ runsAt,
270
+ remainingNumberOfTries,
271
+ numberOfTried: 0,
272
+ executionResults: [],
273
+ data: { typeOf: factory.eventType.ScreeningEvent, id: reservationFor.id }
274
+ });
275
+ }
270
276
  }
271
277
  }
278
+ if (aggregateTasks.length > 0) {
279
+ yield repos.task.saveMany(aggregateTasks);
280
+ }
272
281
  });
273
282
  }
274
283
  exports.createAggregateScreeningEventIfNotExist = createAggregateScreeningEventIfNotExist;
@@ -202,8 +202,10 @@ function onReturn(returnActionAttributes) {
202
202
  }
203
203
  }
204
204
  // タスク保管
205
- yield Promise.all(taskAttributes.map((taskAttribute) => __awaiter(this, void 0, void 0, function* () {
206
- return repos.task.save(taskAttribute);
207
- })));
205
+ // saveManyに変更(2023-02-01~)
206
+ yield repos.task.saveMany(taskAttributes);
207
+ // await Promise.all(taskAttributes.map(async (taskAttribute) => {
208
+ // return repos.task.save(taskAttribute);
209
+ // }));
208
210
  });
209
211
  }
@@ -77,8 +77,10 @@ function onRegistered(actionAttributes, __) {
77
77
  }
78
78
  }
79
79
  // タスク保管
80
- yield Promise.all(taskAttributes.map((taskAttribute) => __awaiter(this, void 0, void 0, function* () {
81
- return repos.task.save(taskAttribute);
82
- })));
80
+ // saveManyに変更(2023-02-01~)
81
+ yield repos.task.saveMany(taskAttributes);
82
+ // await Promise.all(taskAttributes.map(async (taskAttribute) => {
83
+ // return repos.task.save(taskAttribute);
84
+ // }));
83
85
  });
84
86
  }
@@ -96,7 +96,7 @@ function onReservationCanceled(canceledReservations, useInformReservation) {
96
96
  // 冗長な作成を避ける
97
97
  yield (0, offer_1.createAggregateScreeningEventIfNotExist)({
98
98
  project,
99
- reservationFor: { id: canceledReservations[0].reservationFor.id },
99
+ reservationFor: [{ id: canceledReservations[0].reservationFor.id }],
100
100
  force: false
101
101
  })({ task: repos.task });
102
102
  }
@@ -116,7 +116,7 @@ function onReservationCheckedIn(params) {
116
116
  yield Promise.all(reservationForIds.map((reservationForId) => __awaiter(this, void 0, void 0, function* () {
117
117
  yield (0, offer_1.createAggregateScreeningEventIfNotExist)({
118
118
  project: { id: params.project.id },
119
- reservationFor: { id: reservationForId },
119
+ reservationFor: [{ id: reservationForId }],
120
120
  force: false
121
121
  })({ task: repos.task });
122
122
  })));
@@ -98,7 +98,7 @@ function onReservationConfirmed(confirmedReservations) {
98
98
  if (Array.isArray(confirmedReservations) && confirmedReservations.length > 0) {
99
99
  yield (0, offer_1.createAggregateScreeningEventIfNotExist)({
100
100
  project: confirmedReservations[0].project,
101
- reservationFor: { id: confirmedReservations[0].reservationFor.id },
101
+ reservationFor: [{ id: confirmedReservations[0].reservationFor.id }],
102
102
  force: false
103
103
  })({ task: repos.task });
104
104
  const now = new Date();
@@ -130,7 +130,7 @@ function onReservationUsed(action, attendedReservation) {
130
130
  // 冗長な作成を避ける
131
131
  yield (0, offer_1.createAggregateScreeningEventIfNotExist)({
132
132
  project: attendedReservation.project,
133
- reservationFor: { id: attendedReservation.reservationFor.id },
133
+ reservationFor: [{ id: attendedReservation.reservationFor.id }],
134
134
  force: false
135
135
  })({ task: repos.task });
136
136
  });
@@ -217,8 +217,10 @@ function onRefund(refundActionAttributes) {
217
217
  });
218
218
  }
219
219
  // タスク保管
220
- yield Promise.all(taskAttributes.map((taskAttribute) => __awaiter(this, void 0, void 0, function* () {
221
- return repos.task.save(taskAttribute);
222
- })));
220
+ // saveManyに変更(2023-02-01~)
221
+ yield repos.task.saveMany(taskAttributes);
222
+ // await Promise.all(taskAttributes.map(async (taskAttribute) => {
223
+ // return repos.task.save(taskAttribute);
224
+ // }));
223
225
  });
224
226
  }
@@ -582,7 +582,9 @@ function exportTasksById(params) {
582
582
  transaction,
583
583
  runsAt: taskRunsAt
584
584
  });
585
- yield Promise.all(taskAttributes.map((a) => __awaiter(this, void 0, void 0, function* () { return repos.task.save(a); })));
585
+ // saveManyに変更(2023-02-01~)
586
+ yield repos.task.saveMany(taskAttributes);
587
+ // await Promise.all(taskAttributes.map(async (a) => repos.task.save(a)));
586
588
  });
587
589
  }
588
590
  exports.exportTasksById = exportTasksById;
@@ -36,9 +36,11 @@ function exportTasksById(params) {
36
36
  transaction,
37
37
  runsAt: taskRunsAt
38
38
  });
39
- yield Promise.all(taskAttributes.map((taskAttribute) => __awaiter(this, void 0, void 0, function* () {
40
- yield repos.task.save(taskAttribute);
41
- })));
39
+ // saveManyに変更(2023-02-01~)
40
+ yield repos.task.saveMany(taskAttributes);
41
+ // await Promise.all(taskAttributes.map(async (taskAttribute) => {
42
+ // await repos.task.save(taskAttribute);
43
+ // }));
42
44
  });
43
45
  }
44
46
  exports.exportTasksById = exportTasksById;
@@ -386,9 +386,11 @@ function exportTasksById(params) {
386
386
  transaction,
387
387
  runsAt: taskRunsAt
388
388
  });
389
- yield Promise.all(taskAttributes.map((taskAttribute) => __awaiter(this, void 0, void 0, function* () {
390
- yield repos.task.save(taskAttribute);
391
- })));
389
+ // saveManyに変更(2023-02-01~)
390
+ yield repos.task.saveMany(taskAttributes);
391
+ // await Promise.all(taskAttributes.map(async (taskAttribute) => {
392
+ // await repos.task.save(taskAttribute);
393
+ // }));
392
394
  });
393
395
  }
394
396
  exports.exportTasksById = exportTasksById;
package/package.json CHANGED
@@ -120,5 +120,5 @@
120
120
  "postversion": "git push origin --tags",
121
121
  "prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
122
122
  },
123
- "version": "20.2.0-alpha.47"
123
+ "version": "20.2.0-alpha.49"
124
124
  }