@chevre/domain 21.2.0-alpha.120 → 21.2.0-alpha.121

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.
@@ -24,6 +24,7 @@ export interface IUnlockKey {
24
24
  eventId: string;
25
25
  startDate: Date;
26
26
  offer: IOffer;
27
+ holder: string;
27
28
  }
28
29
  export type IGetHolderResult = string | null;
29
30
  export interface ISubReservation {
@@ -94,7 +95,7 @@ export declare class StockHolderRepository {
94
95
  /**
95
96
  * 保持者を取得する
96
97
  */
97
- getHolder(params: IUnlockKey): Promise<string | null | undefined>;
98
+ getHolder(params: Omit<IUnlockKey, 'holder'>): Promise<string | null | undefined>;
98
99
  /**
99
100
  * 在庫状況を検索する
100
101
  * offers.lengthが0だと"ERR wrong number of arguments for 'hmget' command"となるので注意
@@ -217,17 +217,23 @@ class StockHolderRepository {
217
217
  // [id]あるいは[seatNumber+seatSection]でreservations.subReservationsから$pull+$incする
218
218
  yield this.initializeHoldReservation({ eventId: params.eventId, startDate: params.startDate });
219
219
  const subReservation = StockHolderRepository.offer2subReservation(params.offer);
220
- yield this.holdReservationModel.findOneAndUpdate({
220
+ const reservationNumber = params.holder;
221
+ const updateResult = yield this.holdReservationModel.findOneAndUpdate({
221
222
  'reservationFor.id': { $eq: params.eventId },
222
- 'reservations.subReservation.identifier': {
223
- $eq: subReservation.identifier
224
- }
223
+ 'reservations.reservationNumber': { $eq: reservationNumber },
224
+ 'reservations.subReservation.identifier': { $eq: subReservation.identifier }
225
225
  }, {
226
226
  $inc: { reservationCount: -1 },
227
- $pull: { 'reservations.subReservation': { identifier: { $eq: subReservation.identifier } } }
228
- }, { new: true })
227
+ $pull: { 'reservations.$[reservationPackage].subReservation': { identifier: { $eq: subReservation.identifier } } }
228
+ }, {
229
+ new: true,
230
+ arrayFilters: [
231
+ { 'reservationPackage.reservationNumber': reservationNumber }
232
+ ]
233
+ })
229
234
  .select({ _id: 1 })
230
235
  .exec();
236
+ debug('unlock processed. updateResult:', updateResult, 'reservationNumber:', reservationNumber, 'identifier:', subReservation.identifier);
231
237
  // docが存在しなくてもよい
232
238
  }
233
239
  else {
@@ -350,7 +350,8 @@ function processUnlockSeat(params) {
350
350
  itemOffered: { serviceOutput: { id: reservation.id } },
351
351
  seatNumber: '',
352
352
  seatSection: ''
353
- }
353
+ },
354
+ holder: params.expectedHolder
354
355
  };
355
356
  let holder = yield repos.stockHolder.getHolder(lockKey);
356
357
  if (holder === params.expectedHolder) {
@@ -365,7 +366,8 @@ function processUnlockSeat(params) {
365
366
  offer: {
366
367
  seatNumber: ticketedSeat.seatNumber,
367
368
  seatSection: ticketedSeat.seatSection
368
- }
369
+ },
370
+ holder: params.expectedHolder
369
371
  };
370
372
  holder = yield repos.stockHolder.getHolder(lockKey);
371
373
  if (holder === params.expectedHolder) {
@@ -386,7 +388,8 @@ function processUnlockSeat(params) {
386
388
  offer: {
387
389
  seatNumber: seatNumber4sub,
388
390
  seatSection: seatSection4sub
389
- }
391
+ },
392
+ holder: params.expectedHolder
390
393
  };
391
394
  const holder4sub = yield repos.stockHolder.getHolder(lockKey4sub);
392
395
  if (holder4sub === params.expectedHolder) {
package/package.json CHANGED
@@ -117,5 +117,5 @@
117
117
  "postversion": "git push origin --tags",
118
118
  "prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
119
119
  },
120
- "version": "21.2.0-alpha.120"
120
+ "version": "21.2.0-alpha.121"
121
121
  }