@chevre/domain 20.2.0-alpha.33 → 20.2.0-alpha.34

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.
@@ -23,7 +23,8 @@ async function main() {
23
23
 
24
24
  const { ticketOffers } = await chevre.service.offer.event.searchEventTicketOffers({
25
25
  event: { id: 'al9ew43f5' },
26
- onlyValid: true
26
+ onlyValid: true,
27
+ sort: true
27
28
  // ...(typeof sellerId === 'string') ? { seller: { id: sellerId } } : undefined,
28
29
  // ...(typeof availableAtId === 'string') ? { store: { id: availableAtId } } : undefined
29
30
  })({
@@ -15,7 +15,8 @@ async function main() {
15
15
  offerCatalog: {
16
16
  id: '0001'
17
17
  // id: 'xxx'
18
- }
18
+ },
19
+ sort: true
19
20
  });
20
21
  console.log(offers.map((o) => o.id));
21
22
  console.log(offers.length);
@@ -20,6 +20,9 @@ export declare class MongoRepository {
20
20
  offerCatalog: {
21
21
  id: string;
22
22
  };
23
+ availableAtOrFrom?: {
24
+ id?: string;
25
+ };
23
26
  limit?: number;
24
27
  page?: number;
25
28
  sort: boolean;
@@ -301,6 +301,7 @@ class MongoRepository {
301
301
  * カタログに登録されたオファーの順序は保証される
302
302
  */
303
303
  findOffersByOfferCatalogId(params) {
304
+ var _a;
304
305
  return __awaiter(this, void 0, void 0, function* () {
305
306
  // aggregateで再実装(2023-01-26~)
306
307
  const matchStages = [{ $match: { _id: { $eq: params.offerCatalog.id } } }];
@@ -345,7 +346,9 @@ class MongoRepository {
345
346
  // }
346
347
  let offers = [];
347
348
  if (sortedOfferIds.length > 0) {
348
- offers = yield this.search({ id: { $in: sortedOfferIds } });
349
+ offers = yield this.search(Object.assign({ id: { $in: sortedOfferIds } }, (typeof ((_a = params.availableAtOrFrom) === null || _a === void 0 ? void 0 : _a.id) === 'string')
350
+ ? { availableAtOrFrom: { id: { $eq: params.availableAtOrFrom.id } } }
351
+ : undefined));
349
352
  if (params.sort) {
350
353
  // sorting
351
354
  offers = offers.sort((a, b) => sortedOfferIds.indexOf(String(a.id)) - sortedOfferIds.indexOf(String(b.id)));
@@ -62,12 +62,24 @@ interface IConfirmRepo {
62
62
  task: TaskRepo;
63
63
  }
64
64
  export declare type IConfirmOperation<T> = (repos: IConfirmRepo) => Promise<T>;
65
+ declare type IStartParams = factory.assetTransaction.reserve.IStartParamsWithoutDetail & {
66
+ /**
67
+ * 承認アクションを介した場合に検索済のオファーリスト
68
+ */
69
+ preSearchedTicketOffers?: factory.product.ITicketOffer[];
70
+ /**
71
+ * 承認アクションを介した場合に検索済の単価オファーリスト
72
+ */
73
+ preSearchedUnitPriceOffers?: factory.unitPriceOffer.IUnitPriceOffer[];
74
+ availableAtOrFrom?: {
75
+ id?: string;
76
+ };
77
+ validateAppliesToMovieTicket: boolean;
78
+ };
65
79
  /**
66
80
  * 取引開始
67
81
  */
68
- export declare function start(params: factory.assetTransaction.reserve.IStartParamsWithoutDetail & {
69
- validateAppliesToMovieTicket: boolean;
70
- }): IStartOperation<factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>>;
82
+ export declare function start(params: IStartParams): IStartOperation<factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>>;
71
83
  /**
72
84
  * 取引確定
73
85
  */
@@ -26,7 +26,7 @@ const factory_1 = require("./reserve/factory");
26
26
  */
27
27
  function start(params) {
28
28
  return (repos) => __awaiter(this, void 0, void 0, function* () {
29
- var _a;
29
+ var _a, _b;
30
30
  // 自動発行廃止(2022-05-17~)
31
31
  const reservationNumber = params.transactionNumber;
32
32
  if (typeof reservationNumber !== 'string' || reservationNumber.length === 0) {
@@ -51,6 +51,9 @@ function start(params) {
51
51
  transaction = yield addReservations({
52
52
  id: transaction.id,
53
53
  object: params.object,
54
+ preSearchedTicketOffers: params.preSearchedTicketOffers,
55
+ preSearchedUnitPriceOffers: params.preSearchedUnitPriceOffers,
56
+ availableAtOrFrom: { id: (_b = params.availableAtOrFrom) === null || _b === void 0 ? void 0 : _b.id },
54
57
  validateAppliesToMovieTicket: params.validateAppliesToMovieTicket
55
58
  })(repos);
56
59
  }
@@ -64,7 +67,7 @@ exports.start = start;
64
67
  function addReservations(params) {
65
68
  // tslint:disable-next-line:max-func-body-length
66
69
  return (repos) => __awaiter(this, void 0, void 0, function* () {
67
- var _a;
70
+ var _a, _b;
68
71
  const now = new Date();
69
72
  let transaction = yield repos.assetTransaction.findById({ typeOf: factory.assetTransactionType.Reserve, id: params.id });
70
73
  // イベント存在確認
@@ -90,14 +93,26 @@ function addReservations(params) {
90
93
  }
91
94
  // 受け入れたオファーIDだけ取得する(2023-01-26~)
92
95
  const acceptedOfferIds = [...new Set(acceptedOffers.map((o) => String(o.id)))];
93
- // イベントオファー検索
94
- const { ticketOffers, unitPriceOffers } = yield OfferService.event.searchEventTicketOffers({
95
- ids: acceptedOfferIds,
96
- event: { id: event.id },
97
- sort: false // ソート不要(2023-01-27~)
98
- })(repos);
96
+ let ticketOffers;
97
+ let availableOffers;
98
+ // 承認アクションを介した予約取引開始時の冗長なオファー検索処理について最適化(2023-01-27~)
99
+ if (Array.isArray(params.preSearchedTicketOffers) && Array.isArray(params.preSearchedUnitPriceOffers)) {
100
+ ticketOffers = params.preSearchedTicketOffers;
101
+ availableOffers = params.preSearchedUnitPriceOffers;
102
+ }
103
+ else {
104
+ // イベントオファー検索
105
+ const searchEventTicketOffersResult = yield OfferService.event.searchEventTicketOffers({
106
+ ids: acceptedOfferIds,
107
+ event: { id: event.id },
108
+ // 対応アプリケーション条件追加(2023-01-27~)
109
+ store: { id: (_b = params.availableAtOrFrom) === null || _b === void 0 ? void 0 : _b.id },
110
+ sort: false // ソート不要(2023-01-27~)
111
+ })(repos);
112
+ ticketOffers = searchEventTicketOffersResult.ticketOffers;
113
+ availableOffers = searchEventTicketOffersResult.unitPriceOffers;
114
+ }
99
115
  // 冗長なfindOffersByOfferCatalogId処理を削除(2023-01-26~)
100
- const availableOffers = unitPriceOffers;
101
116
  // let availableOffers: factory.unitPriceOffer.IUnitPriceOffer[] = [];
102
117
  // // 興行設定があれば興行のカタログを参照する(2022-08-31~)
103
118
  // const eventOffers = <factory.event.screeningEvent.IOffer | undefined>event.offers;
@@ -24,7 +24,7 @@ function authorize(params) {
24
24
  return (repos) => __awaiter(this, void 0, void 0, function* () {
25
25
  const now = new Date();
26
26
  const { transaction, event, bookingServiceIdentifire } = yield validateCreateRequest(Object.assign(Object.assign({}, params), { now, store: params.store }))({ event: repos.event, transaction: repos.transaction });
27
- const acceptedOffers = yield validateAcceptedOffers({
27
+ const { acceptedOffers, ticketOffers, unitPriceOffers } = yield validateAcceptedOffers({
28
28
  object: params.object,
29
29
  event,
30
30
  seller: { typeOf: transaction.seller.typeOf, id: String(transaction.seller.id) },
@@ -63,7 +63,10 @@ function authorize(params) {
63
63
  action,
64
64
  event,
65
65
  transactionNumber,
66
- transaction
66
+ transaction,
67
+ availableAtOrFrom: { id: params.store.id },
68
+ ticketOffers,
69
+ unitPriceOffers
67
70
  })(repos);
68
71
  // requestBody = processStartReserveResult.requestBody;
69
72
  // responseBody = processStartReserveResult.responseBody;
@@ -168,7 +171,7 @@ function processStartReserve4chevre(params) {
168
171
  // requestBody = startParams;
169
172
  const startParamObject = yield validateObjectWithoutDetail(startParams)(repos);
170
173
  // 予約取引開始
171
- responseBody = yield ReserveTransactionService.start(Object.assign(Object.assign({}, startParams), { object: startParamObject, validateAppliesToMovieTicket: true }))(repos);
174
+ responseBody = yield ReserveTransactionService.start(Object.assign(Object.assign({}, startParams), { object: startParamObject, preSearchedTicketOffers: params.ticketOffers, preSearchedUnitPriceOffers: params.unitPriceOffers, availableAtOrFrom: { id: params.availableAtOrFrom.id }, validateAppliesToMovieTicket: true }))(repos);
172
175
  // 予約取引からオファー情報を生成する
173
176
  acceptedOffers4result = (0, factory_1.responseBody2acceptedOffers4result)({
174
177
  responseBody: responseBody,
@@ -283,11 +286,11 @@ function validateAcceptedOffers(params) {
283
286
  ? [...new Set(acceptedOffersWithoutDetail.map((o) => o.id))]
284
287
  : [];
285
288
  // 利用可能なチケットオファーを検索
286
- const { ticketOffers } = yield (0, searchEventTicketOffers_1.searchEventTicketOffers)({
289
+ const { ticketOffers, unitPriceOffers } = yield (0, searchEventTicketOffers_1.searchEventTicketOffers)({
287
290
  // 受け入れたオファーIDだけ取得する(2023-01-26~)
288
291
  ids: offerIds,
289
292
  event: { id: params.event.id },
290
- seller: params.seller,
293
+ // seller: params.seller,
291
294
  store: params.store,
292
295
  sort: false // ソート不要(2023-01-27~)
293
296
  })(repos);
@@ -333,7 +336,7 @@ function validateAcceptedOffers(params) {
333
336
  }
334
337
  }
335
338
  });
336
- return acceptedOffers;
339
+ return { acceptedOffers, ticketOffers, unitPriceOffers };
337
340
  });
338
341
  }
339
342
  function acceptedOfferWithoutDetail2acceptedOffer(params) {
@@ -29,12 +29,10 @@ declare function searchEventTicketOffers(params: {
29
29
  };
30
30
  /**
31
31
  * どの販売者に対して
32
+ * 不要なので廃止(2023-01-27~)
32
33
  */
33
- seller?: {
34
- id?: string;
35
- };
36
34
  /**
37
- * どの店舗に対して
35
+ * どのアプリケーションに対して
38
36
  */
39
37
  store?: {
40
38
  id?: string;
@@ -19,7 +19,7 @@ const factory_1 = require("../factory");
19
19
  function searchTransportationEventTicketOffers(params) {
20
20
  // tslint:disable-next-line:max-func-body-length
21
21
  return (repos) => __awaiter(this, void 0, void 0, function* () {
22
- var _a, _b, _c;
22
+ var _a, _b, _c, _d;
23
23
  const screeningEvent = params.event;
24
24
  const soundFormatTypes = [];
25
25
  const videoFormatTypes = [];
@@ -32,6 +32,7 @@ function searchTransportationEventTicketOffers(params) {
32
32
  availableOffers = yield repos.offer.findOffersByOfferCatalogId({
33
33
  ids: params.ids,
34
34
  offerCatalog: { id: transportation.hasOfferCatalog.id },
35
+ availableAtOrFrom: { id: (_c = params.store) === null || _c === void 0 ? void 0 : _c.id },
35
36
  sort: params.sort
36
37
  });
37
38
  }
@@ -109,9 +110,12 @@ function searchTransportationEventTicketOffers(params) {
109
110
  const offerAddOn = [];
110
111
  if (Array.isArray(offer.addOn)) {
111
112
  for (const addOn of offer.addOn) {
112
- const productId = (_c = addOn.itemOffered) === null || _c === void 0 ? void 0 : _c.id;
113
+ const productId = (_d = addOn.itemOffered) === null || _d === void 0 ? void 0 : _d.id;
113
114
  if (typeof productId === 'string') {
114
- const productOffers = yield searchAddOns({ product: { id: productId } })(repos);
115
+ const productOffers = yield searchAddOns({
116
+ product: { id: productId },
117
+ store: params.store
118
+ })(repos);
115
119
  offerAddOn.push(...productOffers);
116
120
  }
117
121
  }
@@ -130,7 +134,7 @@ function searchTransportationEventTicketOffers(params) {
130
134
  function searchScreeningEventTicketOffers(params) {
131
135
  // tslint:disable-next-line:max-func-body-length
132
136
  return (repos) => __awaiter(this, void 0, void 0, function* () {
133
- var _a, _b, _c;
137
+ var _a, _b, _c, _d;
134
138
  // イベント取得属性最適化(2023-01-23~)
135
139
  // const screeningEvent = await repos.event.findById<factory.eventType.ScreeningEvent>({ id: params.eventId });
136
140
  const screeningEvent = params.event;
@@ -147,6 +151,7 @@ function searchScreeningEventTicketOffers(params) {
147
151
  availableOffers = yield repos.offer.findOffersByOfferCatalogId({
148
152
  ids: params.ids,
149
153
  offerCatalog: { id: eventService.hasOfferCatalog.id },
154
+ availableAtOrFrom: { id: (_c = params.store) === null || _c === void 0 ? void 0 : _c.id },
150
155
  sort: params.sort
151
156
  });
152
157
  }
@@ -224,7 +229,7 @@ function searchScreeningEventTicketOffers(params) {
224
229
  const offerAddOn = [];
225
230
  if (Array.isArray(offer.addOn)) {
226
231
  for (const addOn of offer.addOn) {
227
- const productId = (_c = addOn.itemOffered) === null || _c === void 0 ? void 0 : _c.id;
232
+ const productId = (_d = addOn.itemOffered) === null || _d === void 0 ? void 0 : _d.id;
228
233
  if (typeof productId === 'string') {
229
234
  const productOffers = yield searchAddOns({ product: { id: productId } })(repos);
230
235
  offerAddOn.push(...productOffers);
@@ -326,7 +331,7 @@ function checkAvailability(params) {
326
331
  */
327
332
  function searchAddOns(params) {
328
333
  return (repos) => __awaiter(this, void 0, void 0, function* () {
329
- var _a, _b;
334
+ var _a, _b, _c;
330
335
  let offers = [];
331
336
  const productId = (_a = params.product) === null || _a === void 0 ? void 0 : _a.id;
332
337
  if (typeof productId === 'string') {
@@ -335,6 +340,7 @@ function searchAddOns(params) {
335
340
  if (typeof offerCatalogId === 'string') {
336
341
  offers = yield repos.offer.findOffersByOfferCatalogId({
337
342
  offerCatalog: { id: offerCatalogId },
343
+ availableAtOrFrom: { id: (_c = params.store) === null || _c === void 0 ? void 0 : _c.id },
338
344
  sort: true
339
345
  });
340
346
  offers = offers.map((o) => {
@@ -358,7 +364,6 @@ function searchAddOns(params) {
358
364
  function searchEventTicketOffers(params) {
359
365
  // tslint:disable-next-line:max-func-body-length
360
366
  return (repos) => __awaiter(this, void 0, void 0, function* () {
361
- var _a;
362
367
  const now = moment();
363
368
  let event;
364
369
  // イベント取得属性最適化(2023-01-23~)
@@ -384,6 +389,7 @@ function searchEventTicketOffers(params) {
384
389
  const searchOffersResult = yield searchScreeningEventTicketOffers({
385
390
  ids: params.ids,
386
391
  event,
392
+ store: params.store,
387
393
  sort: params.sort
388
394
  })(repos);
389
395
  offers = searchOffersResult.ticketOffers;
@@ -393,6 +399,7 @@ function searchEventTicketOffers(params) {
393
399
  const searchOffersResult = yield searchTransportationEventTicketOffers({
394
400
  ids: params.ids,
395
401
  event,
402
+ store: params.store,
396
403
  sort: params.sort
397
404
  })(repos);
398
405
  offers = searchOffersResult.ticketOffers;
@@ -401,14 +408,15 @@ function searchEventTicketOffers(params) {
401
408
  else {
402
409
  throw new factory.errors.NotImplemented(`'${event.typeOf}' not implemented`);
403
410
  }
404
- const specifiedStoreId = (_a = params.store) === null || _a === void 0 ? void 0 : _a.id;
405
- if (typeof specifiedStoreId === 'string') {
406
- // アプリケーションが利用可能なオファーに絞る
407
- offers = offers.filter((o) => {
408
- return Array.isArray(o.availableAtOrFrom)
409
- && o.availableAtOrFrom.some((availableApplication) => availableApplication.id === specifiedStoreId);
410
- });
411
- }
411
+ // store.idでのフィルターをmongoに移行(2023-01-27~)
412
+ // const specifiedStoreId = params.store?.id;
413
+ // if (typeof specifiedStoreId === 'string') {
414
+ // // アプリケーションが利用可能なオファーに絞る
415
+ // offers = offers.filter((o) => {
416
+ // return Array.isArray(o.availableAtOrFrom)
417
+ // && o.availableAtOrFrom.some((availableApplication) => availableApplication.id === specifiedStoreId);
418
+ // });
419
+ // }
412
420
  // 有効期間を適用
413
421
  if (params.onlyValid === true) {
414
422
  offers = offers.filter((o) => {
@@ -426,14 +434,17 @@ function searchEventTicketOffers(params) {
426
434
  }
427
435
  for (const offer of offers) {
428
436
  if (Array.isArray(offer.addOn)) {
437
+ // store.idでのフィルターをmongoに移行(2023-01-27~)
429
438
  // addOnsに対しても利用可能アプリケーション設定を適用
430
- if (typeof specifiedStoreId === 'string') {
431
- // アプリケーションが利用可能なオファーに絞る
432
- offer.addOn = offer.addOn.filter((offer4addOn) => {
433
- return Array.isArray(offer4addOn.availableAtOrFrom)
434
- && offer4addOn.availableAtOrFrom.some((availableApplication) => availableApplication.id === specifiedStoreId);
435
- });
436
- }
439
+ // if (typeof specifiedStoreId === 'string') {
440
+ // // アプリケーションが利用可能なオファーに絞る
441
+ // offer.addOn = offer.addOn.filter((offer4addOn) => {
442
+ // return Array.isArray(offer4addOn.availableAtOrFrom)
443
+ // && offer4addOn.availableAtOrFrom.some(
444
+ // (availableApplication) => availableApplication.id === specifiedStoreId
445
+ // );
446
+ // });
447
+ // }
437
448
  // addOnsに対しても有効期間を適用
438
449
  if (params.onlyValid === true) {
439
450
  offer.addOn = offer.addOn.filter((offer4addOn) => {
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.33"
123
+ "version": "20.2.0-alpha.34"
124
124
  }