@chevre/domain 28.0.0-alpha.4 → 28.0.0-alpha.40

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 (150) hide show
  1. package/lib/chevre/emailMessageBuilder.js +1 -1
  2. package/lib/chevre/factory/event.d.ts +1 -1
  3. package/lib/chevre/factory/event.js +1 -5
  4. package/lib/chevre/repo/acceptedOffer.d.ts +6 -5
  5. package/lib/chevre/repo/acceptedOffer.js +14 -9
  6. package/lib/chevre/repo/acceptedOfferInReserve.d.ts +6 -8
  7. package/lib/chevre/repo/acceptedOfferInReserve.js +13 -7
  8. package/lib/chevre/repo/adminAcceptedOffer.d.ts +25 -12
  9. package/lib/chevre/repo/adminAcceptedOffer.js +20 -10
  10. package/lib/chevre/repo/adminAccountTitle.d.ts +49 -0
  11. package/lib/chevre/repo/adminAccountTitle.js +212 -0
  12. package/lib/chevre/repo/adminAccountTitleCategory.d.ts +37 -0
  13. package/lib/chevre/repo/adminAccountTitleCategory.js +127 -0
  14. package/lib/chevre/repo/adminAccountTitleSet.d.ts +42 -0
  15. package/lib/chevre/repo/adminAccountTitleSet.js +149 -0
  16. package/lib/chevre/repo/adminEvent.d.ts +1 -7
  17. package/lib/chevre/repo/adminEvent.js +3 -9
  18. package/lib/chevre/repo/adminEventSeries.d.ts +67 -0
  19. package/lib/chevre/repo/adminEventSeries.js +178 -0
  20. package/lib/chevre/repo/{paymentServiceChannel.d.ts → adminPaymentServiceChannel.d.ts} +13 -11
  21. package/lib/chevre/repo/{paymentServiceChannel.js → adminPaymentServiceChannel.js} +20 -19
  22. package/lib/chevre/repo/adminTask.d.ts +2 -2
  23. package/lib/chevre/repo/adminTransaction.d.ts +20 -30
  24. package/lib/chevre/repo/aggregateEvent.js +0 -1
  25. package/lib/chevre/repo/categoryCode.js +0 -21
  26. package/lib/chevre/repo/event.d.ts +2 -2
  27. package/lib/chevre/repo/event.js +71 -110
  28. package/lib/chevre/repo/eventSeries.d.ts +5 -84
  29. package/lib/chevre/repo/eventSeries.js +21 -212
  30. package/lib/chevre/repo/factory/acceptedOffer/reserveTransaction2itemOffered.d.ts +1 -1
  31. package/lib/chevre/repo/issuer.d.ts +2 -6
  32. package/lib/chevre/repo/memberProgram.d.ts +1 -38
  33. package/lib/chevre/repo/memberProgram.js +1 -62
  34. package/lib/chevre/repo/mongoose/schemas/accountTitle.d.ts +1 -1
  35. package/lib/chevre/repo/mongoose/schemas/accountTitle.js +21 -25
  36. package/lib/chevre/repo/mongoose/schemas/civicStructure.d.ts +1 -0
  37. package/lib/chevre/repo/mongoose/schemas/event.js +0 -13
  38. package/lib/chevre/repo/mongoose/schemas/eventSeries.js +1 -18
  39. package/lib/chevre/repo/mongoose/schemas/issuer.d.ts +1 -3
  40. package/lib/chevre/repo/mongoose/schemas/issuer.js +0 -10
  41. package/lib/chevre/repo/mongoose/schemas/offerCatalog.d.ts +0 -1
  42. package/lib/chevre/repo/mongoose/schemas/offerCatalog.js +3 -12
  43. package/lib/chevre/repo/mongoose/schemas/offerCatalogItem.d.ts +1 -2
  44. package/lib/chevre/repo/mongoose/schemas/offerCatalogItem.js +6 -15
  45. package/lib/chevre/repo/mongoose/schemas/order.d.ts +22 -1
  46. package/lib/chevre/repo/mongoose/schemas/paymentServiceChannel.d.ts +1 -1
  47. package/lib/chevre/repo/mongoose/schemas/place.js +0 -9
  48. package/lib/chevre/repo/mongoose/schemas/project.d.ts +1 -2
  49. package/lib/chevre/repo/mongoose/schemas/project.js +1 -1
  50. package/lib/chevre/repo/mongoose/schemas/seller.d.ts +3 -1
  51. package/lib/chevre/repo/mongoose/schemas/seller.js +0 -2
  52. package/lib/chevre/repo/mongoose/schemas/transaction.d.ts +1 -1
  53. package/lib/chevre/repo/mongoose/schemas/transaction.js +51 -52
  54. package/lib/chevre/repo/offerCatalog.d.ts +0 -2
  55. package/lib/chevre/repo/offerCatalogItem.d.ts +13 -20
  56. package/lib/chevre/repo/offerCatalogItem.js +8 -86
  57. package/lib/chevre/repo/order.d.ts +2 -2
  58. package/lib/chevre/repo/order.js +0 -31
  59. package/lib/chevre/repo/orderInTransaction.d.ts +5 -25
  60. package/lib/chevre/repo/place/movieTheater.d.ts +3 -1
  61. package/lib/chevre/repo/place/movieTheater.js +3 -1
  62. package/lib/chevre/repo/place/{hasPOS.d.ts → pos.d.ts} +13 -20
  63. package/lib/chevre/repo/place/{hasPOS.js → pos.js} +66 -29
  64. package/lib/chevre/repo/place/screeningRoom.d.ts +24 -3
  65. package/lib/chevre/repo/place/screeningRoom.js +28 -17
  66. package/lib/chevre/repo/priceSpecification.d.ts +8 -8
  67. package/lib/chevre/repo/project.d.ts +2 -8
  68. package/lib/chevre/repo/project.js +0 -12
  69. package/lib/chevre/repo/projectMakesOffer.js +2 -2
  70. package/lib/chevre/repo/role.d.ts +1 -1
  71. package/lib/chevre/repo/role.js +1 -30
  72. package/lib/chevre/repo/seller.d.ts +11 -4
  73. package/lib/chevre/repo/seller.js +31 -58
  74. package/lib/chevre/repo/sellerPaymentAccepted.d.ts +14 -21
  75. package/lib/chevre/repo/sellerPaymentAccepted.js +65 -38
  76. package/lib/chevre/repo/task.d.ts +3 -3
  77. package/lib/chevre/repo/transaction/placeOrder.d.ts +2 -3
  78. package/lib/chevre/repo/transaction/placeOrder.js +15 -36
  79. package/lib/chevre/repository.d.ts +30 -15
  80. package/lib/chevre/repository.js +63 -30
  81. package/lib/chevre/service/aggregation/event/aggregateOffers.js +1 -2
  82. package/lib/chevre/service/aggregation/event/aggregateScreeningEvent.js +2 -2
  83. package/lib/chevre/service/aggregation.d.ts +0 -2
  84. package/lib/chevre/service/aggregation.js +1 -3
  85. package/lib/chevre/service/assetTransaction/pay/start/preStart/validateAcceptedPaymentMethodIfNeeded.js +1 -2
  86. package/lib/chevre/service/assetTransaction/pay/start/preStart/validateSeller.js +2 -2
  87. package/lib/chevre/service/assetTransaction/reserve/start.js +2 -1
  88. package/lib/chevre/service/delivery/reservation/factory.d.ts +1 -1
  89. package/lib/chevre/service/event/saveScreeningEventSeries.d.ts +2 -2
  90. package/lib/chevre/service/event/saveScreeningEventSeries.js +2 -3
  91. package/lib/chevre/service/event/saveScreeningEvents.d.ts +2 -0
  92. package/lib/chevre/service/event/saveScreeningEvents.js +4 -4
  93. package/lib/chevre/service/event.d.ts +2 -0
  94. package/lib/chevre/service/event.js +0 -1
  95. package/lib/chevre/service/notification/sendEmailMessage.d.ts +2 -0
  96. package/lib/chevre/service/notification/sendEmailMessage.js +23 -6
  97. package/lib/chevre/service/offer/any.d.ts +1 -1
  98. package/lib/chevre/service/offer/event/authorize/factory.d.ts +3 -3
  99. package/lib/chevre/service/offer/event/authorize/factory.js +1 -8
  100. package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre.d.ts +1 -1
  101. package/lib/chevre/service/offer/event/issueEventOfferTicket.js +0 -11
  102. package/lib/chevre/service/offer/event/searchEventTicketOffers.js +4 -10
  103. package/lib/chevre/service/offer/event/searchOfferAppliesToMovieTicket.js +2 -8
  104. package/lib/chevre/service/offer/event/searchOfferCatalogItems.js +2 -2
  105. package/lib/chevre/service/offer/event/searchOffersByIds.js +3 -9
  106. package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.js +0 -1
  107. package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.d.ts +1 -1
  108. package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.js +0 -7
  109. package/lib/chevre/service/offer/onEventChanged.js +9 -21
  110. package/lib/chevre/service/offer.js +1 -2
  111. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially/factory.d.ts +4 -6
  112. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially/factory.js +23 -4
  113. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/createSendEmailMessageTaskIfNotExist.d.ts +1 -1
  114. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/processOrder.d.ts +1 -1
  115. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing.d.ts +1 -1
  116. package/lib/chevre/service/order/placeOrder/factory/orderedItem.d.ts +1 -1
  117. package/lib/chevre/service/order/placeOrder/factory.d.ts +1 -1
  118. package/lib/chevre/service/order/sendOrder.js +2 -14
  119. package/lib/chevre/service/payment/creditCard/getGMOInfoFromSeller.js +1 -1
  120. package/lib/chevre/service/payment/factory/createPayObjectServiceOutput.d.ts +3 -3
  121. package/lib/chevre/service/payment/movieTicket/checkMovieTicket.js +1 -1
  122. package/lib/chevre/service/payment/movieTicket/payMovieTicket/payActionParams2seatInfoSyncIn.js +1 -1
  123. package/lib/chevre/service/payment/movieTicket/validation.js +1 -1
  124. package/lib/chevre/service/project.d.ts +3 -3
  125. package/lib/chevre/service/project.js +1 -1
  126. package/lib/chevre/service/task/importEventsFromCOA.js +2 -0
  127. package/lib/chevre/service/task/onResourceDeleted.js +8 -8
  128. package/lib/chevre/service/task/onResourceUpdated/onHasPOSUpdated.d.ts +7 -3
  129. package/lib/chevre/service/task/onResourceUpdated/onHasPOSUpdated.js +51 -50
  130. package/lib/chevre/service/task/onResourceUpdated/onOfferCatalogUpdated.js +1 -1
  131. package/lib/chevre/service/task/onResourceUpdated/syncOfferCatalog.js +1 -1
  132. package/lib/chevre/service/task/onResourceUpdated.js +10 -47
  133. package/lib/chevre/service/task/sendEmailMessage.js +3 -1
  134. package/lib/chevre/service/task/syncResourcesFromCOA.js +5 -3
  135. package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions.d.ts +1 -2
  136. package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions.js +0 -5
  137. package/lib/chevre/service/transaction/placeOrder/confirm/prepareUnitPriceOfferConditions.d.ts +1 -1
  138. package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateInvoiceReferencesOrder.d.ts +1 -1
  139. package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateMovieTicket.d.ts +1 -1
  140. package/lib/chevre/service/transaction/placeOrder/confirm/validation.d.ts +2 -2
  141. package/lib/chevre/service/transaction/placeOrder/confirm.js +0 -5
  142. package/lib/chevre/service/transaction/returnOrder/preStart/factory.d.ts +1 -1
  143. package/lib/chevre/service/transaction/returnOrder/preStart.js +1 -2
  144. package/package.json +2 -2
  145. package/lib/chevre/repo/accountTitle.d.ts +0 -28
  146. package/lib/chevre/repo/accountTitle.js +0 -30
  147. package/lib/chevre/service/aggregation/project.d.ts +0 -17
  148. package/lib/chevre/service/aggregation/project.js +0 -98
  149. package/lib/chevre/service/delivery/factory.d.ts +0 -16
  150. package/lib/chevre/service/delivery/factory.js +0 -124
@@ -28,7 +28,7 @@ class OfferCatalogItemRepo {
28
28
  }
29
29
  static CREATE_MONGO_CONDITIONS(params) {
30
30
  // MongoDB検索条件
31
- const andConditions = []; // eslint-disable-line @typescript-eslint/no-explicit-any
31
+ const andConditions = [];
32
32
  const projectIdEq = params.project?.id?.$eq;
33
33
  if (typeof projectIdEq === 'string') {
34
34
  andConditions.push({ 'project.id': { $eq: projectIdEq } });
@@ -247,7 +247,7 @@ class OfferCatalogItemRepo {
247
247
  })
248
248
  .exec();
249
249
  }
250
- async count(params) {
250
+ async countOfferCatalogItems(params) {
251
251
  const conditions = OfferCatalogItemRepo.CREATE_MONGO_CONDITIONS(params);
252
252
  const matchStages = conditions.map((condition) => {
253
253
  return { $match: condition };
@@ -261,18 +261,15 @@ class OfferCatalogItemRepo {
261
261
  .exec();
262
262
  return (result.length > 0) ? result[0].numItems : 0;
263
263
  }
264
- async projectFields(params, inclusion) {
264
+ async findOfferCatalogItems(params, inclusion) {
265
265
  const conditions = OfferCatalogItemRepo.CREATE_MONGO_CONDITIONS(params);
266
266
  const matchStages = conditions.map((condition) => {
267
267
  return { $match: condition };
268
268
  });
269
269
  let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
270
- if (Array.isArray(inclusion) && inclusion.length > 0) {
270
+ if (Array.isArray(inclusion)) {
271
271
  positiveProjectionFields = inclusion.filter((key) => AVAILABLE_PROJECT_FIELDS.includes(key));
272
272
  }
273
- else {
274
- // throw new factory.errors.ArgumentNull('inclusion', 'inclusion must be specified');
275
- }
276
273
  const projection = {
277
274
  _id: 0,
278
275
  id: { $toString: '$_id' },
@@ -297,49 +294,6 @@ class OfferCatalogItemRepo {
297
294
  return [key, value];
298
295
  }))
299
296
  };
300
- // let projectStage: { [field: string]: AnyExpression } = {
301
- // _id: 0,
302
- // name: '$name',
303
- // description: '$description',
304
- // project: '$project',
305
- // typeOf: '$typeOf',
306
- // id: { $toString: '$_id' },
307
- // identifier: '$identifier',
308
- // itemOffered: '$itemOffered',
309
- // additionalProperty: '$additionalProperty',
310
- // relatedOffer: '$relatedOffer',
311
- // numberOfItems: {
312
- // $cond: {
313
- // if: { $isArray: '$itemListElement' },
314
- // then: { $size: '$itemListElement' },
315
- // else: 0
316
- // }
317
- // },
318
- // itemListElementTypeOf: { $first: '$itemListElement.typeOf' },
319
- // dateSynced: '$dateSynced'
320
- // };
321
- // const positiveProjectionFields: string[] = Object.keys(projection)
322
- // .filter((key) => projection[<KeyOfOfferCatalogItem>key] !== 0);
323
- // const negativeProjectionFields: string[] = Object.keys(projection)
324
- // .filter((key) => projection[<KeyOfOfferCatalogItem>key] === 0);
325
- // if (positiveProjectionFields.length > 0) {
326
- // projectStage = {
327
- // _id: 0,
328
- // id: { $toString: '$_id' }
329
- // };
330
- // positiveProjectionFields.forEach((field) => {
331
- // if (field !== '_id' && field !== 'id') {
332
- // projectStage[field] = `$${field}`;
333
- // }
334
- // });
335
- // } else if (negativeProjectionFields.length > 0) {
336
- // negativeProjectionFields.forEach((field) => {
337
- // if (projectStage[field] !== undefined && projectStage[field] !== null) {
338
- // // tslint:disable-next-line:no-dynamic-delete
339
- // delete projectStage[field];
340
- // }
341
- // });
342
- // }
343
297
  const aggregate = this.offerCatalogItemModel.aggregate([
344
298
  ...(params.sort?.identifier !== undefined) ? [{ $sort: { identifier: params.sort.identifier } }] : [],
345
299
  ...matchStages,
@@ -347,8 +301,10 @@ class OfferCatalogItemRepo {
347
301
  ]);
348
302
  if (typeof params.limit === 'number' && params.limit > 0) {
349
303
  const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
350
- aggregate.limit(params.limit * page)
351
- .skip(params.limit * (page - 1));
304
+ // aggregate.limit(params.limit * page)
305
+ // .skip(params.limit * (page - 1));
306
+ aggregate.skip(params.limit * (page - 1))
307
+ .limit(params.limit);
352
308
  }
353
309
  return aggregate.exec();
354
310
  }
@@ -413,39 +369,5 @@ class OfferCatalogItemRepo {
413
369
  return this.offerCatalogItemModel.updateMany(params.filter, { $unset: params.$unset }, { timestamps: false })
414
370
  .exec();
415
371
  }
416
- async aggregateItemList(params) {
417
- const matchConditions = {
418
- 'itemListElement.typeOf': { $eq: params.itemListElement.typeOf.$eq }
419
- };
420
- const aggregations = await this.offerCatalogItemModel.aggregate([
421
- { $match: matchConditions },
422
- {
423
- $project: {
424
- numItemListElement: { $size: '$itemListElement' }
425
- }
426
- },
427
- {
428
- $group: {
429
- _id: '$typeOf',
430
- maxNumItemListElement: { $max: '$numItemListElement' },
431
- minNumItemListElement: { $min: '$numItemListElement' }
432
- }
433
- },
434
- {
435
- $project: {
436
- _id: 0,
437
- maxNumItemListElement: '$maxNumItemListElement',
438
- minNumItemListElement: '$minNumItemListElement'
439
- }
440
- }
441
- ])
442
- .exec();
443
- if (aggregations.length === 0) {
444
- return {
445
- aggregation: {}
446
- };
447
- }
448
- return { aggregation: aggregations[0] };
449
- }
450
372
  }
451
373
  exports.OfferCatalogItemRepo = OfferCatalogItemRepo;
@@ -133,7 +133,7 @@ export declare class OrderRepo {
133
133
  id: string;
134
134
  })[]>;
135
135
  getCursor(conditions: any, projection: any): import("mongoose").Cursor<import("mongoose").Document<unknown, Record<string, never>, IDocType, import("./mongoose/virtuals").IVirtuals, {}> & Omit<factory.order.IOrder, "id"> & {
136
- acceptedOffers?: factory.order.IAcceptedOffer[];
136
+ acceptedOffers?: import("./mongoose/schemas/order").IAcceptedOfferInDoc[];
137
137
  identifier?: string;
138
138
  paymentMethodId?: string;
139
139
  } & {
@@ -141,7 +141,7 @@ export declare class OrderRepo {
141
141
  } & {
142
142
  __v: number;
143
143
  }, import("mongoose").QueryOptions<IDocType>, (import("mongoose").Document<unknown, Record<string, never>, IDocType, import("./mongoose/virtuals").IVirtuals, {}> & Omit<factory.order.IOrder, "id"> & {
144
- acceptedOffers?: factory.order.IAcceptedOffer[];
144
+ acceptedOffers?: import("./mongoose/schemas/order").IAcceptedOfferInDoc[];
145
145
  identifier?: string;
146
146
  paymentMethodId?: string;
147
147
  } & {
@@ -487,37 +487,6 @@ class OrderRepo {
487
487
  }
488
488
  return andConditions;
489
489
  }
490
- // OrderInTransactionリポジトリにて注文ドキュメントが生成されるように変更したのでもう不要
491
- // /**
492
- // * なければ作成する
493
- // */
494
- // public async createIfNotExist(order: IOrderWithoutAcceptedOffers & {
495
- // acceptedOffers: factory.order.IAcceptedOffer[];
496
- // }): Promise<void> {
497
- // try {
498
- // // 存在しなければ上書き
499
- // // updateOneに変更(2024-01-14~)
500
- // // await this.orderModel.findOneAndUpdate(
501
- // await this.orderModel.updateOne(
502
- // { orderNumber: order.orderNumber },
503
- // { $setOnInsert: order },
504
- // {
505
- // // new: true,
506
- // upsert: true
507
- // }
508
- // )
509
- // .exec();
510
- // } catch (error) {
511
- // let throwsError = true;
512
- // if (await isMongoDuplicateError(error)) {
513
- // // すでにorderNumberが存在する場合ok
514
- // throwsError = false;
515
- // }
516
- // if (throwsError) {
517
- // throw error;
518
- // }
519
- // }
520
- // }
521
490
  /**
522
491
  * 注文ステータスを変更する
523
492
  */
@@ -1,6 +1,8 @@
1
1
  import type { Connection } from 'mongoose';
2
2
  import { factory } from '../factory';
3
+ import { IMinimizedAcceptedOffer, IMinimizedReservationFor, IMinimizedItemOffered } from './mongoose/schemas/order';
3
4
  import { AcceptedOfferInReserveRepo } from './acceptedOfferInReserve';
5
+ export { IMinimizedAcceptedOffer, IMinimizedReservationFor, IMinimizedItemOffered };
4
6
  export type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project' | 'broker'> & {
5
7
  typeOf: factory.transactionType.PlaceOrder;
6
8
  orderDate: Date;
@@ -8,7 +10,7 @@ export type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'pr
8
10
  * 注文取引IDとして再定義(2026-06-22~)
9
11
  */
10
12
  identifier: string;
11
- acceptedOffers: factory.order.IAcceptedOffer[];
13
+ acceptedOffers: IMinimizedAcceptedOffer[] | factory.acceptedOffer.ICOAAcceptedOffer[];
12
14
  customer?: factory.order.ICustomer;
13
15
  seller?: factory.order.ISeller;
14
16
  confirmationNumber?: string;
@@ -47,26 +49,6 @@ export type IPlacingOrder = Pick<factory.order.IOrder, 'orderDate' | 'orderStatu
47
49
  */
48
50
  seller?: never;
49
51
  };
50
- export type IMinimizedReservationFor = Pick<factory.order.IEventAsReservationFor, 'endDate' | 'id' | 'startDate' | 'typeOf'> & {
51
- location: Pick<factory.order.IEventAsReservationFor['location'], 'branchCode' | 'typeOf'>;
52
- superEvent: Pick<factory.order.ISuperEvent, 'id' | 'typeOf'> & {
53
- location: Pick<factory.order.ISuperEvent['location'], 'branchCode' | 'typeOf'>;
54
- workPerformed: Pick<factory.order.ISuperEvent['workPerformed'], 'identifier' | 'typeOf'>;
55
- };
56
- };
57
- export type IMinimizedItemOffered = Pick<factory.order.IEventReservation, 'id' | 'reservationNumber' | 'typeOf'> & {
58
- /**
59
- * 予約番号ごとに、ひとつめのオファーのみreservationForを含むように変更するのでoptionalに
60
- * 2026-06-04~
61
- */
62
- reservationFor?: IMinimizedReservationFor;
63
- reservedTicket?: never;
64
- };
65
- export type IMinimizedAcceptedOffer = Pick<factory.order.IOptimizedAcceptedOffer, 'id' | 'offeredThrough' | 'serialNumber' | 'typeOf'> & {
66
- itemOffered: IMinimizedItemOffered;
67
- priceSpecification?: never;
68
- name?: never;
69
- };
70
52
  export interface IPaymentMethodByPaymentUrl {
71
53
  /**
72
54
  * 決済採用時に発行済の決済方法ID
@@ -117,9 +99,7 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
117
99
  * 注文取引タイプのドキュメントのみを参照対象にするかどうか
118
100
  */
119
101
  onlyPlaceOrder: boolean;
120
- }): Promise<(Pick<factory.order.IAcceptedOffer, 'id' | 'itemOffered' | 'offeredThrough' | 'serialNumber' | 'typeOf'> & {
121
- priceSpecification?: factory.order.ITicketPriceSpecification;
122
- })[]>;
102
+ }): Promise<Pick<factory.acceptedOffer.IAcceptedOffer, 'id' | 'itemOffered' | 'offeredThrough' | 'serialNumber' | 'typeOf' | 'priceSpecification'>[]>;
123
103
  /**
124
104
  * 注文を受注する
125
105
  * typeOf: PlaceOrder -> typeOf: Order
@@ -132,7 +112,7 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
132
112
  * このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
133
113
  */
134
114
  acceptOfferByIdentifier(params: Pick<IOrderInTransaction, 'project' | 'identifier'> & {
135
- acceptedOffers: IMinimizedAcceptedOffer[] | factory.order.ICOAAcceptedOffer[];
115
+ acceptedOffers: IMinimizedAcceptedOffer[] | factory.acceptedOffer.ICOAAcceptedOffer[];
136
116
  }): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
137
117
  /**
138
118
  * serialNumberからオファーを除外する
@@ -32,7 +32,7 @@ export declare class MovieTheaterRepo {
32
32
  /**
33
33
  * 施設を保管する
34
34
  */
35
- saveMovieTheater(params: Pick<factory.place.movieTheater.IPlace, 'additionalProperty' | 'branchCode' | 'hasEntranceGate' | 'id' | 'kanaName' | 'name' | 'offers' | 'parentOrganization' | 'project' | 'typeOf' | 'url'> & {
35
+ saveMovieTheater(params: Pick<factory.place.movieTheater.IPlace, 'additionalProperty' | 'branchCode' | 'id' | 'kanaName' | 'name' | 'offers' | 'parentOrganization' | 'project' | 'typeOf' | 'url'> & {
36
36
  hasEntranceGate?: never;
37
37
  }): Promise<{
38
38
  id: string;
@@ -96,12 +96,14 @@ export declare class MovieTheaterRepo {
96
96
  }): Promise<void>;
97
97
  getCursor(conditions: FilterQuery<any>, projection: any): import("mongoose").Cursor<import("mongoose").Document<unknown, Record<string, never>, IDocType, import("../mongoose/virtuals").IVirtuals, {}> & Omit<import("@chevre/factory/lib/chevre/place/movieTheater").IPlace, "id"> & {
98
98
  hasPOS?: factory.place.movieTheater.IPOS[];
99
+ hasEntranceGate?: factory.place.movieTheater.IEntranceGate[];
99
100
  } & {
100
101
  _id: import("mongoose").Types.ObjectId;
101
102
  } & {
102
103
  __v: number;
103
104
  }, import("mongoose").QueryOptions<IDocType>, (import("mongoose").Document<unknown, Record<string, never>, IDocType, import("../mongoose/virtuals").IVirtuals, {}> & Omit<import("@chevre/factory/lib/chevre/place/movieTheater").IPlace, "id"> & {
104
105
  hasPOS?: factory.place.movieTheater.IPOS[];
106
+ hasEntranceGate?: factory.place.movieTheater.IEntranceGate[];
105
107
  } & {
106
108
  _id: import("mongoose").Types.ObjectId;
107
109
  } & {
@@ -5,7 +5,9 @@ const factory_1 = require("../../factory");
5
5
  const settings_1 = require("../../settings");
6
6
  const civicStructure_1 = require("../mongoose/schemas/civicStructure");
7
7
  const AVAILABLE_PROJECT_FIELDS = [
8
- 'additionalProperty', 'branchCode', 'hasEntranceGate', 'kanaName', 'name',
8
+ 'additionalProperty', 'branchCode',
9
+ // 'hasEntranceGate',
10
+ 'kanaName', 'name',
9
11
  'offers', 'parentOrganization', 'project', 'telephone', 'typeOf', 'url',
10
12
  'offers.typeOf',
11
13
  'offers.eligibleQuantity',
@@ -12,43 +12,36 @@ interface IOperator {
12
12
  /**
13
13
  * 施設のPOSリポジトリ
14
14
  */
15
- export declare class HasPOSRepo {
15
+ export declare class POSRepo {
16
16
  readonly operator: IOperator;
17
17
  private readonly civicStructureModel;
18
18
  constructor(connection: Connection, operater: IOperator);
19
- search(params: {
19
+ findPOS(params: {
20
+ projectId: string;
20
21
  limit?: number;
21
22
  page?: number;
22
23
  branchCode?: {
23
24
  $eq?: string;
24
25
  $regex?: string;
25
26
  };
26
- project?: {
27
- id?: {
28
- $eq?: string;
29
- };
30
- };
31
- }): Promise<Pick<factory.place.movieTheater.IPOS, 'branchCode' | 'name' | 'id'>[]>;
32
- createByBranchCode(params: Pick<factory.place.movieTheater.IPOS, 'branchCode' | 'name'> & {
27
+ }): Promise<Pick<factory.place.movieTheater.IPOS, 'branchCode' | 'name'>[]>;
28
+ private countPOS;
29
+ addPOSByBranchCode(params: Pick<factory.place.movieTheater.IPOS, 'branchCode' | 'name'> & {
33
30
  project: {
34
31
  id: string;
35
32
  };
36
- }): Promise<{
37
- id: string;
38
- }>;
39
- updateByBranchCode(params: Pick<factory.place.movieTheater.IPOS, 'branchCode' | 'name'> & {
33
+ }, options: {
34
+ maxNumPOS: number;
35
+ }): Promise<void>;
36
+ updatePOSByBranchCode(params: Pick<factory.place.movieTheater.IPOS, 'branchCode' | 'name'> & {
40
37
  project: {
41
38
  id: string;
42
39
  };
43
- }): Promise<{
44
- id: string;
45
- }>;
46
- deleteByBranchCode(params: Pick<factory.place.movieTheater.IPOS, 'branchCode'> & {
40
+ }): Promise<void>;
41
+ deletePOSByBranchCode(params: Pick<factory.place.movieTheater.IPOS, 'branchCode'> & {
47
42
  project: {
48
43
  id: string;
49
44
  };
50
- }): Promise<{
51
- id: string;
52
- }>;
45
+ }): Promise<void>;
53
46
  }
54
47
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HasPOSRepo = void 0;
3
+ exports.POSRepo = void 0;
4
4
  const mongoose_1 = require("mongoose");
5
5
  const factory_1 = require("../../factory");
6
6
  const settings_1 = require("../../settings");
@@ -8,21 +8,15 @@ const civicStructure_1 = require("../mongoose/schemas/civicStructure");
8
8
  /**
9
9
  * 施設のPOSリポジトリ
10
10
  */
11
- class HasPOSRepo {
11
+ class POSRepo {
12
12
  operator;
13
13
  civicStructureModel;
14
14
  constructor(connection, operater) {
15
15
  this.civicStructureModel = connection.model(civicStructure_1.modelName, (0, civicStructure_1.createSchema)());
16
16
  this.operator = operater;
17
17
  }
18
- async search(params) {
19
- const matchStages = [
20
- { $match: { _id: { $eq: new mongoose_1.Types.ObjectId(this.operator.id) } } }
21
- ];
22
- const projectIdEq = params.project?.id?.$eq;
23
- if (typeof projectIdEq === 'string') {
24
- matchStages.push({ $match: { 'project.id': { $eq: projectIdEq } } });
25
- }
18
+ async findPOS(params) {
19
+ const matchStages = [];
26
20
  const branchCodeEq = params.branchCode?.$eq;
27
21
  if (typeof branchCodeEq === 'string') {
28
22
  matchStages.push({ $match: { 'hasPOS.branchCode': { $eq: branchCodeEq } } });
@@ -32,6 +26,13 @@ class HasPOSRepo {
32
26
  matchStages.push({ $match: { 'hasPOS.branchCode': { $regex: new RegExp(branchCodeRegex) } } });
33
27
  }
34
28
  const aggregate = this.civicStructureModel.aggregate([
29
+ // まず施設ドキュメントで絞る
30
+ {
31
+ $match: {
32
+ _id: { $eq: new mongoose_1.Types.ObjectId(this.operator.id) },
33
+ 'project.id': { $eq: params.projectId }
34
+ }
35
+ },
35
36
  {
36
37
  $unwind: {
37
38
  path: '$hasPOS'
@@ -42,54 +43,90 @@ class HasPOSRepo {
42
43
  {
43
44
  $project: {
44
45
  _id: 0,
45
- id: '$hasPOS.branchCode',
46
46
  branchCode: '$hasPOS.branchCode',
47
- name: '$hasPOS.name'
47
+ name: '$hasPOS.name',
48
+ // ...((!excludePOSId) && { id: '$hasPOS.branchCode' }) // discontinue(2026-09-22~)
48
49
  }
49
50
  }
50
51
  ]);
51
52
  if (typeof params.limit === 'number' && params.limit > 0) {
52
53
  const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
53
- aggregate.limit(params.limit * page)
54
- .skip(params.limit * (page - 1));
54
+ aggregate.skip(params.limit * (page - 1))
55
+ .limit(params.limit);
55
56
  }
56
57
  return aggregate.option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
57
58
  .exec();
58
59
  }
59
- async createByBranchCode(params) {
60
+ async countPOS() {
61
+ const posCount = (await this.civicStructureModel.aggregate([
62
+ {
63
+ $match: {
64
+ _id: { $eq: new mongoose_1.Types.ObjectId(this.operator.id) },
65
+ }
66
+ },
67
+ {
68
+ $project: {
69
+ posCount: {
70
+ $cond: {
71
+ if: { $isArray: '$hasPOS' },
72
+ then: { $size: '$hasPOS' },
73
+ else: 0
74
+ }
75
+ }
76
+ }
77
+ }
78
+ ]).option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
79
+ .exec()).at(0)?.posCount;
80
+ if (typeof posCount !== 'number') {
81
+ throw new factory_1.factory.errors.NotFound(factory_1.factory.placeType.MovieTheater);
82
+ }
83
+ return { posCount };
84
+ }
85
+ async addPOSByBranchCode(params, options) {
60
86
  // 施設存在確認
61
- let doc = await this.civicStructureModel.findOne({
87
+ const movieTheaterDoc = await this.civicStructureModel.findOne({
62
88
  'project.id': { $eq: params.project.id },
63
89
  _id: { $eq: this.operator.id }
64
- }, { _id: 1, typeOf: 1 })
90
+ }, { _id: 1 })
91
+ .lean()
65
92
  .exec();
66
- if (doc === null) {
93
+ if (movieTheaterDoc === null) {
67
94
  throw new factory_1.factory.errors.NotFound(factory_1.factory.placeType.MovieTheater);
68
95
  }
96
+ // 最大数検証(2026-09-20~)
97
+ const { maxNumPOS } = options;
69
98
  const creatingPOS = {
70
- // 互換性維持対応としてidを保管
71
- id: params.branchCode, // eslint-disable-line @typescript-eslint/no-explicit-any
99
+ // // 互換性維持対応としてidを保管
100
+ // id: params.branchCode as any, // discontinue(2026-09-22~)
72
101
  branchCode: params.branchCode,
73
102
  name: params.name
74
103
  };
75
- doc = await this.civicStructureModel.findOneAndUpdate({
104
+ const doc = await this.civicStructureModel.findOneAndUpdate({
76
105
  'project.id': { $eq: params.project.id },
77
106
  _id: { $eq: this.operator.id },
78
- 'hasPOS.branchCode': { $ne: params.branchCode }
107
+ 'hasPOS.branchCode': { $ne: params.branchCode },
108
+ // 配列の長さが上限未満であることをアトミックに確認
109
+ $expr: {
110
+ $lt: [{ $size: { $ifNull: ['$hasPOS', []] } }, maxNumPOS] // 最大数担保(2026-09-20~)
111
+ }
79
112
  }, {
80
113
  $push: { hasPOS: creatingPOS }
81
114
  }, {
82
- new: true,
83
115
  projection: { _id: 1 }
84
116
  })
117
+ .lean()
85
118
  .exec();
86
119
  // 存在しなければID重複
87
120
  if (doc === null) {
121
+ const { posCount } = await this.countPOS();
122
+ if (posCount >= maxNumPOS) {
123
+ throw new factory_1.factory.errors.Argument('operator.id', 'maxNumPOS exceeded');
124
+ }
125
+ // 上限以下で追加できない場合は「すでに登録済み」
88
126
  throw new factory_1.factory.errors.AlreadyInUse('hasPOS', ['id']);
89
127
  }
90
- return doc.toObject({ virtuals: true });
91
128
  }
92
- async updateByBranchCode(params) {
129
+ async updatePOSByBranchCode(params) {
93
130
  const doc = await this.civicStructureModel.findOneAndUpdate({
94
131
  'project.id': { $eq: params.project.id },
95
132
  _id: { $eq: this.operator.id },
@@ -107,13 +144,13 @@ class HasPOSRepo {
107
144
  ],
108
145
  projection: { _id: 1 }
109
146
  })
147
+ .lean()
110
148
  .exec();
111
149
  if (doc === null) {
112
150
  throw new factory_1.factory.errors.NotFound('hasPOS');
113
151
  }
114
- return doc.toObject({ virtuals: true });
115
152
  }
116
- async deleteByBranchCode(params) {
153
+ async deletePOSByBranchCode(params) {
117
154
  const doc = await this.civicStructureModel.findOneAndUpdate({
118
155
  'project.id': { $eq: params.project.id },
119
156
  _id: { $eq: this.operator.id },
@@ -123,11 +160,11 @@ class HasPOSRepo {
123
160
  }, {
124
161
  projection: { _id: 1 }
125
162
  })
163
+ .lean()
126
164
  .exec();
127
165
  if (doc === null) {
128
166
  throw new factory_1.factory.errors.NotFound('hasPOS');
129
167
  }
130
- return doc.toObject({ virtuals: true });
131
168
  }
132
169
  }
133
- exports.HasPOSRepo = HasPOSRepo;
170
+ exports.POSRepo = POSRepo;
@@ -84,7 +84,28 @@ export declare class ScreeningRoomRepo {
84
84
  id: string;
85
85
  };
86
86
  }): Promise<mongo.DeleteResult>;
87
- searchScreeningRooms(searchConditions: factory.place.screeningRoom.ISearchConditions): Promise<Omit<factory.place.screeningRoom.IPlace, 'containsPlace' | 'parentOrganization'>[]>;
87
+ /**
88
+ * ルーム検索
89
+ * sectionCount,seatCountのprojectが可能
90
+ * sortはbranchCode: factory.sortType.Ascendingで固定
91
+ */
92
+ projectRoomFields(params: Pick<factory.place.screeningRoom.ISearchConditions, '$projection' | 'branchCode' | 'containedInPlace' | 'parentOrganization'> & {
93
+ /**
94
+ * プロジェクト指定は必須
95
+ */
96
+ project: {
97
+ id: {
98
+ $eq: string;
99
+ };
100
+ };
101
+ limit: number;
102
+ page: number;
103
+ }, options: {
104
+ /**
105
+ * 将来的にcontainedInPlace最小化のためオプション採用(2026-09-17~)
106
+ */
107
+ minimizeContainedInPlace: boolean;
108
+ }): Promise<Pick<factory.place.screeningRoom.IPlace, 'additionalProperty' | 'address' | 'branchCode' | 'containedInPlace' | 'maximumAttendeeCapacity' | 'name' | 'openSeatingAllowed' | 'typeOf' | 'seatCount' | 'sectionCount'>[]>;
88
109
  findRooms(params: Omit<factory.place.screeningRoom.ISearchConditions, '$projection'>): Promise<Pick<factory.place.screeningRoom.IPlace, 'additionalProperty' | 'address' | 'branchCode' | 'name' | 'openSeatingAllowed' | 'maximumAttendeeCapacity'>[]>;
89
110
  /**
90
111
  * セクションと座席も含めたひとつのルームを取得する
@@ -128,7 +149,7 @@ export declare class ScreeningRoomRepo {
128
149
  description?: any;
129
150
  openingHoursSpecification?: any;
130
151
  smokingAllowed?: boolean;
131
- containsPlace: (Pick<import("@chevre/factory/lib/chevre/place/screeningRoomSection").IPlace, "name" | "typeOf" | "additionalProperty" | "branchCode"> & {
152
+ containsPlace: (Pick<import("@chevre/factory/lib/chevre/place/screeningRoomSection").IPlace, "name" | "typeOf" | "branchCode" | "additionalProperty"> & {
132
153
  containsPlace?: factory.place.seat.IPlace[];
133
154
  })[];
134
155
  } & {
@@ -139,7 +160,7 @@ export declare class ScreeningRoomRepo {
139
160
  description?: any;
140
161
  openingHoursSpecification?: any;
141
162
  smokingAllowed?: boolean;
142
- containsPlace: (Pick<import("@chevre/factory/lib/chevre/place/screeningRoomSection").IPlace, "name" | "typeOf" | "additionalProperty" | "branchCode"> & {
163
+ containsPlace: (Pick<import("@chevre/factory/lib/chevre/place/screeningRoomSection").IPlace, "name" | "typeOf" | "branchCode" | "additionalProperty"> & {
143
164
  containsPlace?: factory.place.seat.IPlace[];
144
165
  })[];
145
166
  } & {