@chevre/domain 21.37.0-alpha.6 → 21.37.0-alpha.8

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.
@@ -57,6 +57,7 @@ export declare class MongoRepository {
57
57
  * 取引を開始する
58
58
  */
59
59
  start<T extends factory.assetTransactionType>(params: factory.assetTransaction.IStartParams<T>): Promise<factory.assetTransaction.ITransaction<T>>;
60
+ startWithMinimalResponse<T extends factory.assetTransactionType>(params: factory.assetTransaction.IStartParams<T>): Promise<Pick<factory.assetTransaction.ITransaction<factory.assetTransactionType>, 'id'>>;
60
61
  findById<T extends factory.assetTransactionType>(params: {
61
62
  typeOf: T;
62
63
  id: string;
@@ -299,7 +299,9 @@ class MongoRepository {
299
299
  /**
300
300
  * 取引を開始する
301
301
  */
302
- start(params) {
302
+ start(params
303
+ // ): Promise<Pick<factory.assetTransaction.ITransaction<T>, 'id'>> {
304
+ ) {
303
305
  return __awaiter(this, void 0, void 0, function* () {
304
306
  return this.transactionModel.create(Object.assign(Object.assign({}, params), { typeOf: params.typeOf, status: factory.transactionStatusType.InProgress, startDate: new Date(), endDate: undefined, tasksExportAction: {
305
307
  actionStatus: factory.actionStatusType.PotentialActionStatus
@@ -307,6 +309,23 @@ class MongoRepository {
307
309
  .then((doc) => doc.toObject());
308
310
  });
309
311
  }
312
+ startWithMinimalResponse(params) {
313
+ var _a, _b;
314
+ return __awaiter(this, void 0, void 0, function* () {
315
+ const { typeOf } = params;
316
+ const creatingTransaction = Object.assign(Object.assign({}, params), { typeOf, status: factory.transactionStatusType.InProgress, startDate: new Date(),
317
+ // endDate: undefined,
318
+ tasksExportAction: {
319
+ actionStatus: factory.actionStatusType.PotentialActionStatus
320
+ } });
321
+ const result = yield this.transactionModel.insertMany(creatingTransaction, { ordered: false, rawResult: true });
322
+ const id = (_b = (_a = result.insertedIds) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.toHexString();
323
+ if (typeof id !== 'string') {
324
+ throw new factory.errors.Internal('assetTransaction not saved');
325
+ }
326
+ return { id };
327
+ });
328
+ }
310
329
  findById(params, inclusion) {
311
330
  return __awaiter(this, void 0, void 0, function* () {
312
331
  let projection = {};
@@ -22,7 +22,7 @@ export declare function start(params: factory.assetTransaction.cancelReservation
22
22
  seller: {
23
23
  id?: string;
24
24
  };
25
- }): IStartOperation<factory.assetTransaction.cancelReservation.ITransaction>;
25
+ }): IStartOperation<Pick<factory.assetTransaction.cancelReservation.ITransaction, 'id'>>;
26
26
  /**
27
27
  * 取引確定
28
28
  */
@@ -24,7 +24,7 @@ export type IExportTasksOperation<T> = (repos: {
24
24
  /**
25
25
  * 取引開始
26
26
  */
27
- export declare function start(params: factory.assetTransaction.refund.IStartParamsWithoutDetail): IStartOperation<factory.assetTransaction.refund.ITransaction>;
27
+ export declare function start(params: factory.assetTransaction.refund.IStartParamsWithoutDetail): IStartOperation<Pick<factory.assetTransaction.refund.ITransaction, 'id'>>;
28
28
  /**
29
29
  * 取引確定
30
30
  */
@@ -15,7 +15,6 @@ export declare function createStartParams(params: factory.assetTransaction.reser
15
15
  id: string;
16
16
  };
17
17
  reservationNumber: string;
18
- useHoldStockByTransactionNumber: boolean;
19
18
  event: IMinimizedIndividualEvent<factory.eventType.Event | factory.eventType.ScreeningEvent>;
20
19
  }): factory.assetTransaction.IStartParams<factory.assetTransactionType.Reserve> & {
21
20
  object: IObject;
@@ -29,7 +28,9 @@ export declare function createPointAward(params: {
29
28
  reservation: {
30
29
  id: string;
31
30
  };
32
- assetTransaction: factory.assetTransaction.reserve.ITransaction;
31
+ project: {
32
+ id: string;
33
+ };
33
34
  }): factory.action.transfer.moneyTransfer.IPointAward | undefined;
34
35
  export declare function createReservedTicket(params: {
35
36
  id: string;
@@ -43,7 +44,6 @@ export declare function createReservedTicket(params: {
43
44
  screeningRoomSections?: factory.place.screeningRoomSection.IPlace[];
44
45
  availableSeatOffers: factory.place.seat.IPlaceWithOffer[];
45
46
  ticketOffer: factory.product.ITicketOffer;
46
- transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
47
47
  }): factory.reservation.ITicket;
48
48
  export declare function validateAppliesToMovieTicket(params: {
49
49
  availableOffer: factory.unitPriceOffer.IUnitPriceOffer;
@@ -94,18 +94,3 @@ export declare function createPotentialActions(params: {
94
94
  potentialActions: factory.assetTransaction.reserve.IPotentialActions;
95
95
  underName?: factory.reservation.IUnderName<factory.reservationType.EventReservation>;
96
96
  };
97
- export declare function createMoneyTransferActions(params: {
98
- acceptedOffer?: factory.assetTransaction.reserve.IAcceptedOffer4object;
99
- reservation: Pick<factory.assetTransaction.reserve.IObjectSubReservation, 'reservedTicket'>;
100
- transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
101
- underName?: factory.reservation.IUnderName<factory.reservationType.EventReservation>;
102
- }): import("@chevre/factory/lib/action/transfer/moneyTransfer").IAttributes[];
103
- export interface IPotentialCancelAction extends factory.action.cancel.reservation.IAttributes {
104
- purpose: {
105
- id: string;
106
- typeOf: factory.assetTransactionType.Reserve;
107
- };
108
- }
109
- export declare function createCancelPendingReservationAction(params: {
110
- transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
111
- }): IPotentialCancelAction | undefined;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCancelPendingReservationAction = exports.createMoneyTransferActions = exports.createPotentialActions = exports.createReservation = exports.createIssuedThrough = exports.createReservationFor = exports.createAdditionalTicketText = exports.createAdditionalProperty = exports.validateAppliesToMovieTicket = exports.createReservedTicket = exports.createPointAward = exports.createStartParams = void 0;
3
+ exports.createPotentialActions = exports.createReservation = exports.createIssuedThrough = exports.createReservationFor = exports.createAdditionalTicketText = exports.createAdditionalProperty = exports.validateAppliesToMovieTicket = exports.createReservedTicket = exports.createPointAward = exports.createStartParams = void 0;
4
4
  /**
5
5
  * 予約取引ファクトリー
6
6
  */
@@ -21,9 +21,7 @@ function createStartParams(params) {
21
21
  const { issuedThrough } = createIssuedThrough({ reservationFor: params.event });
22
22
  const reservationPackage = Object.assign({ issuedThrough,
23
23
  provider,
24
- reservationFor, reservationNumber: reservationNumber, reservationStatus: factory.reservationStatusType.ReservationPending,
25
- // trueで固定(2023-07-19~)
26
- disablePendingReservations: true, useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber, typeOf: factory.reservationType.ReservationPackage }, (typeof ((_a = params.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.object.broker } : undefined);
24
+ reservationFor, reservationNumber: reservationNumber, reservationStatus: factory.reservationStatusType.ReservationPending, disablePendingReservations: true, useHoldStockByTransactionNumber: true, typeOf: factory.reservationType.ReservationPackage }, (typeof ((_a = params.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.object.broker } : undefined);
27
25
  return {
28
26
  project: { id: params.project.id, typeOf: factory.organizationType.Project },
29
27
  typeOf: factory.assetTransactionType.Reserve,
@@ -53,8 +51,8 @@ function createPointAward(params) {
53
51
  && typeof pointAwardToLocationIssuedThroughId === 'string') {
54
52
  // ここで識別子を作成する(入金のユニークネスが保証される)
55
53
  const purposeIdentifier = (0, accountTransactionIdentifier_1.createPointAwardPurposeIdentifier4reservation)({
56
- assetTransaction: { typeOf: params.assetTransaction.typeOf },
57
- project: { id: params.assetTransaction.project.id },
54
+ assetTransaction: { typeOf: factory.assetTransactionType.Reserve },
55
+ project: { id: params.project.id },
58
56
  reservation: { id: params.reservation.id },
59
57
  toLocation: { identifier: pointAwardToLocationIdentifier }
60
58
  });
@@ -584,75 +582,3 @@ function ordre2reservationUnderName(params) {
584
582
  underName: createReservationUnderName({ order: params.order })
585
583
  };
586
584
  }
587
- function createMoneyTransferActions(params) {
588
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
589
- const pointAward = (_b = (_a = params.acceptedOffer) === null || _a === void 0 ? void 0 : _a.itemOffered) === null || _b === void 0 ? void 0 : _b.pointAward;
590
- const moneyTransfer = [];
591
- // ポイント特典があれば適用
592
- const pointAwardToLocationIdentifier = (_c = pointAward === null || pointAward === void 0 ? void 0 : pointAward.toLocation) === null || _c === void 0 ? void 0 : _c.identifier;
593
- const pointAwardToLocationTypeOf = (_d = pointAward === null || pointAward === void 0 ? void 0 : pointAward.toLocation) === null || _d === void 0 ? void 0 : _d.typeOf;
594
- if (typeof ((_e = pointAward === null || pointAward === void 0 ? void 0 : pointAward.amount) === null || _e === void 0 ? void 0 : _e.value) === 'number'
595
- && typeof pointAwardToLocationIdentifier === 'string'
596
- && typeof pointAwardToLocationTypeOf === 'string') {
597
- const fromLocation = {
598
- typeOf: (typeof ((_f = params.reservation.reservedTicket.issuedBy) === null || _f === void 0 ? void 0 : _f.typeOf) === 'string')
599
- ? params.reservation.reservedTicket.issuedBy.typeOf
600
- : params.transaction.typeOf,
601
- name: (typeof ((_g = params.reservation.reservedTicket.issuedBy) === null || _g === void 0 ? void 0 : _g.name) === 'string')
602
- ? params.reservation.reservedTicket.issuedBy.name
603
- : params.transaction.id
604
- };
605
- const toLocation = {
606
- identifier: pointAwardToLocationIdentifier,
607
- typeOf: factory.permit.PermitType.Permit,
608
- issuedThrough: { id: String((_j = (_h = pointAward.toLocation) === null || _h === void 0 ? void 0 : _h.issuedThrough) === null || _j === void 0 ? void 0 : _j.id) }
609
- };
610
- const recipient = {
611
- typeOf: (typeof ((_k = params.underName) === null || _k === void 0 ? void 0 : _k.typeOf) === 'string')
612
- ? (_l = params.underName) === null || _l === void 0 ? void 0 : _l.typeOf
613
- : factory.personType.Person,
614
- id: (typeof ((_m = params.underName) === null || _m === void 0 ? void 0 : _m.id) === 'string')
615
- ? (_o = params.underName) === null || _o === void 0 ? void 0 : _o.id
616
- : '',
617
- name: String((_p = params.underName) === null || _p === void 0 ? void 0 : _p.name)
618
- };
619
- moneyTransfer.push(Object.assign(Object.assign({ project: params.transaction.project, typeOf: factory.actionType.MoneyTransfer, agent: params.transaction.project, recipient, object: {
620
- typeOf: factory.account.transactionType.Deposit
621
- }, purpose: Object.assign({ typeOf: params.transaction.typeOf, id: params.transaction.id }, (typeof ((_q = pointAward.purpose) === null || _q === void 0 ? void 0 : _q.identifier) === 'string') ? { identifier: pointAward.purpose.identifier } : undefined), amount: {
622
- typeOf: 'MonetaryAmount',
623
- value: (_r = pointAward.amount) === null || _r === void 0 ? void 0 : _r.value,
624
- currency: (_s = pointAward.amount) === null || _s === void 0 ? void 0 : _s.currency
625
- }, fromLocation: fromLocation, toLocation: toLocation }, (typeof pointAward.description === 'string') ? { description: pointAward.description } : undefined), (pointAward.recipient !== undefined) ? { recipient: pointAward.recipient } : undefined));
626
- }
627
- return moneyTransfer;
628
- }
629
- exports.createMoneyTransferActions = createMoneyTransferActions;
630
- function createCancelPendingReservationAction(params) {
631
- const transaction = params.transaction;
632
- const pendingReservations = (Array.isArray(transaction.object.subReservation)) ? transaction.object.subReservation : [];
633
- let cancelActionAttributes;
634
- if (pendingReservations.length > 0) {
635
- const reservationFor = transaction.object.reservationFor;
636
- if (reservationFor === undefined) {
637
- throw new factory.errors.NotFound('transaction.object.reservationFor');
638
- }
639
- // ReservationPackageに対応(2022-12-23~)
640
- const reservationPackage = {
641
- typeOf: factory.reservationType.ReservationPackage,
642
- reservationNumber: transaction.transactionNumber,
643
- reservationFor: { typeOf: reservationFor.typeOf, id: String(reservationFor.id) },
644
- reservationStatus: (typeof params.transaction.object.reservationStatus === 'string')
645
- ? params.transaction.object.reservationStatus
646
- : factory.reservationStatusType.ReservationPending
647
- };
648
- cancelActionAttributes = {
649
- project: transaction.project,
650
- typeOf: factory.actionType.CancelAction,
651
- purpose: { typeOf: transaction.typeOf, id: transaction.id },
652
- agent: transaction.project,
653
- object: reservationPackage
654
- };
655
- }
656
- return cancelActionAttributes;
657
- }
658
- exports.createCancelPendingReservationAction = createCancelPendingReservationAction;
@@ -28,7 +28,6 @@ export interface IStartOperationRepos {
28
28
  productOffer: ProductOfferRepo;
29
29
  priceSpecification: PriceSpecificationRepo;
30
30
  project: ProjectRepo;
31
- reservation: ReservationRepo;
32
31
  seat: SeatRepo;
33
32
  task: TaskRepo;
34
33
  assetTransaction: AssetTransactionRepo;
@@ -45,12 +44,10 @@ export interface IAddReservationsOperationRepos {
45
44
  product: ProductRepo;
46
45
  productOffer: ProductOfferRepo;
47
46
  priceSpecification: PriceSpecificationRepo;
48
- reservation: ReservationRepo;
49
47
  seat: SeatRepo;
50
48
  task: TaskRepo;
51
49
  assetTransaction: AssetTransactionRepo;
52
50
  }
53
- export type IAddReservationsOperation<T> = (repos: IAddReservationsOperationRepos) => Promise<T>;
54
51
  export type ICancelOperation<T> = (repos: {
55
52
  action: ActionRepo;
56
53
  stockHolder: StockHolderRepo;
@@ -105,7 +102,6 @@ type IStartParams = factory.assetTransaction.reserve.IStartParamsWithoutDetail &
105
102
  * 取引開始
106
103
  */
107
104
  export declare function start(params: IStartParams & {
108
- useHoldStockByTransactionNumber: boolean;
109
105
  stockHoldUntilDaysAfterEventEnd: number;
110
106
  }): IStartOperation<{
111
107
  transaction: Pick<factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>, 'id'>;
@@ -31,10 +31,9 @@ function start(params) {
31
31
  return (repos) => __awaiter(this, void 0, void 0, function* () {
32
32
  var _a, _b, _c, _d;
33
33
  const now = new Date();
34
- // 自動発行廃止(2022-05-17~)
35
34
  const reservationNumber = params.transactionNumber;
36
35
  if (typeof reservationNumber !== 'string' || reservationNumber.length === 0) {
37
- throw new factory.errors.ArgumentNull('transactionNumber');
36
+ throw new factory.errors.ArgumentNull('transactionNumber'); // 自動発行廃止(2022-05-17~)
38
37
  }
39
38
  // eventをfix
40
39
  const reservationForId = (_a = params.object.reservationFor) === null || _a === void 0 ? void 0 : _a.id;
@@ -59,18 +58,10 @@ function start(params) {
59
58
  });
60
59
  const startParams = (0, factory_1.createStartParams)(Object.assign(Object.assign({}, params), { provider: { id: event.organizer.id }, reservationNumber,
61
60
  event }));
62
- // 取引作成
63
- let transaction;
64
- try {
65
- transaction = yield repos.assetTransaction.start(startParams);
66
- }
67
- catch (error) {
68
- throw error;
69
- }
70
- let objectSubReservations = [];
71
- const addReservationsResult = yield addReservations({
72
- // id: transaction.id,
73
- transaction,
61
+ // objectに必要な情報をそろえる
62
+ const { acceptedOffers4transactionObject, objectSubReservations } = yield createObjectAttributes({
63
+ reservationFor: startParams.object.reservationFor,
64
+ transaction: { transactionNumber: reservationNumber },
74
65
  now,
75
66
  object: params.object,
76
67
  event,
@@ -80,10 +71,22 @@ function start(params) {
80
71
  validateAppliesToMovieTicket: params.validateAppliesToMovieTicket,
81
72
  stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd
82
73
  })(repos);
74
+ // reimplement using startWithMinimalResponse(2024-07-02~)
75
+ // const transaction = await repos.assetTransaction.start<factory.assetTransactionType.Reserve>(startParams);
76
+ const { id } = yield repos.assetTransaction.startWithMinimalResponse(startParams);
77
+ // let objectSubReservations: IObjectSubReservation[] = [];
78
+ // const addReservationsResult = await addReservations({
79
+ yield addReservations({
80
+ reservationFor: startParams.object.reservationFor,
81
+ transaction: { id, transactionNumber: reservationNumber },
82
+ event,
83
+ stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd,
84
+ acceptedOffers4transactionObject, objectSubReservations
85
+ })(repos);
83
86
  // transaction = addReservationsResult.transaction;
84
- objectSubReservations = addReservationsResult.objectSubReservations;
87
+ // objectSubReservations = addReservationsResult.objectSubReservations;
85
88
  return {
86
- transaction: { id: transaction.id },
89
+ transaction: { id },
87
90
  objectSubReservations,
88
91
  // issuedThrough: addReservationsResult.issuedThrough
89
92
  issuedThrough: startParams.object.issuedThrough
@@ -91,19 +94,12 @@ function start(params) {
91
94
  });
92
95
  }
93
96
  exports.start = start;
94
- /**
95
- * 予約追加
96
- */
97
- function addReservations(params) {
98
- // tslint:disable-next-line:max-func-body-length
97
+ function createObjectAttributes(params) {
99
98
  return (repos) => __awaiter(this, void 0, void 0, function* () {
100
99
  var _a;
101
- // const now = new Date();
102
- // const transaction = await repos.assetTransaction.findById({ typeOf: factory.assetTransactionType.Reserve, id: params.id });
103
- const now = params.now;
104
- const transaction = params.transaction;
100
+ const { event, now } = params;
101
+ const reservationNumber = params.transaction.transactionNumber;
105
102
  const acceptedOffers = (Array.isArray(params.object.acceptedOffer)) ? params.object.acceptedOffer : [];
106
- const event = params.event;
107
103
  if (event.typeOf !== factory.eventType.ScreeningEvent && event.typeOf !== factory.eventType.Event) {
108
104
  throw new factory.errors.Argument('object.reservationFor.id', `invalid event type ${event.typeOf}`);
109
105
  }
@@ -137,33 +133,34 @@ function addReservations(params) {
137
133
  availableOffers = searchEventTicketOffersResult.unitPriceOffers;
138
134
  }
139
135
  const availableSeatOffers = yield searchAvailableSeatOffers({ acceptedOffers, event })(repos);
140
- // 仮予約作成
141
- const { acceptedOffers4transactionObject, objectSubReservations } = yield createAcceptedOffers4transactionObject({
136
+ return createAcceptedOffers4transactionObject({
142
137
  acceptedOffers, ticketOffers, availableOffers, now,
143
- event, availableSeatOffers, transaction,
138
+ event, availableSeatOffers, reservationNumber,
144
139
  availableAtOrFrom: params.availableAtOrFrom,
145
140
  validateAppliesToMovieTicket: params.validateAppliesToMovieTicket
146
141
  })(repos);
147
- // const reservationFor = createReservationFor(event, true);
148
- // const { issuedThrough } = createIssuedThrough({ reservationFor: event });
149
- const reservationFor = transaction.object.reservationFor;
150
- if (reservationFor === undefined) {
151
- // 必ずstart時に保管されているはず
152
- throw new factory.errors.Internal('transaction.object.reservationFor undefined unexpectedly');
153
- }
142
+ });
143
+ }
144
+ /**
145
+ * 予約追加
146
+ */
147
+ function addReservations(params) {
148
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
149
+ const reservationNumber = params.transaction.transactionNumber;
150
+ const { event, reservationFor, acceptedOffers4transactionObject, objectSubReservations } = params;
154
151
  // 取引に予約追加
155
152
  let lockedOfferRateLimitKeys = [];
156
153
  try {
157
154
  lockedOfferRateLimitKeys = yield processLockOfferRateLimit({
158
155
  reservations: objectSubReservations,
159
156
  reservationFor,
160
- reservationNumber: transaction.object.reservationNumber
157
+ reservationNumber
161
158
  })(repos);
162
159
  // 上書きの必要なし(2024-07-01~)
163
160
  // transaction = await repos.assetTransaction.addReservations({
164
161
  yield repos.assetTransaction.addReservations({
165
162
  typeOf: factory.assetTransactionType.Reserve,
166
- id: transaction.id,
163
+ id: params.transaction.id,
167
164
  object: {
168
165
  acceptedOffer: acceptedOffers4transactionObject,
169
166
  // issuedThroughを追加(2023-06-05~)
@@ -178,7 +175,7 @@ function addReservations(params) {
178
175
  yield Promise.all(objectSubReservations.map((reservation) => __awaiter(this, void 0, void 0, function* () {
179
176
  yield (0, cancelReservation_1.processUnlockOfferRateLimit)({
180
177
  reservation: {
181
- reservationNumber: transaction.object.reservationNumber,
178
+ reservationNumber,
182
179
  reservedTicket: reservation.reservedTicket
183
180
  },
184
181
  reservationFor
@@ -193,15 +190,15 @@ function addReservations(params) {
193
190
  event: event,
194
191
  reservations: objectSubReservations,
195
192
  transaction: {
196
- id: transaction.id,
197
- transactionNumber: transaction.transactionNumber,
198
- object: { useHoldStockByTransactionNumber: transaction.object.useHoldStockByTransactionNumber === true }
193
+ id: params.transaction.id,
194
+ transactionNumber: params.transaction.transactionNumber
195
+ // object: { useHoldStockByTransactionNumber: transaction.object.useHoldStockByTransactionNumber === true }
199
196
  },
200
197
  stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd
201
198
  })(repos);
202
199
  // ストックホルダー処理(stockHolderで残席数を集計しているので必要)
203
- yield onReservationsCreated({ event, transaction: { transactionNumber: transaction.transactionNumber } })(repos);
204
- return { objectSubReservations };
200
+ yield onReservationsCreated({ event, transaction: { transactionNumber: reservationNumber } })(repos);
201
+ // return { objectSubReservations };
205
202
  });
206
203
  }
207
204
  /**
@@ -313,7 +310,8 @@ function validateEvent(params) {
313
310
  function createAcceptedOffers4transactionObject(params) {
314
311
  return (repos) => __awaiter(this, void 0, void 0, function* () {
315
312
  // 予約番号
316
- const reservationNumber = params.transaction.object.reservationNumber;
313
+ // const reservationNumber = params.transaction.object.reservationNumber;
314
+ const reservationNumber = params.reservationNumber;
317
315
  if (typeof reservationNumber !== 'string') {
318
316
  throw new factory.errors.Internal('Reservation number undefined');
319
317
  }
@@ -328,12 +326,12 @@ function createAcceptedOffers4transactionObject(params) {
328
326
  }
329
327
  const reservationId = `${reservationNumber}-${reservationIndex}`;
330
328
  // 入金先検証
331
- yield validatePointAward({ project: { id: params.transaction.project.id }, acceptedOffer })(repos);
329
+ yield validatePointAward({ project: { id: params.event.project.id }, acceptedOffer })(repos);
332
330
  const pointAward = (0, factory_1.createPointAward)({
331
+ project: { id: params.event.project.id },
333
332
  acceptedOffer: acceptedOffer,
334
333
  offer: ticketOffer,
335
- reservation: { id: reservationId },
336
- assetTransaction: params.transaction
334
+ reservation: { id: reservationId }
337
335
  });
338
336
  // acceptedOffers4transactionObjectには必要な情報のみ保管する
339
337
  acceptedOffers4transactionObject.push({
@@ -349,7 +347,8 @@ function createReservations4transactionObject(params) {
349
347
  return (repos) => __awaiter(this, void 0, void 0, function* () {
350
348
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
351
349
  // 予約番号
352
- const reservationNumber = params.transaction.object.reservationNumber;
350
+ // const reservationNumber = params.transaction.object.reservationNumber;
351
+ const reservationNumber = params.reservationNumber;
353
352
  if (typeof reservationNumber !== 'string') {
354
353
  throw new factory.errors.Internal('Reservation number undefined');
355
354
  }
@@ -377,7 +376,7 @@ function createReservations4transactionObject(params) {
377
376
  });
378
377
  const programMembershipUsed = yield validateProgramMembershipUsed({
379
378
  acceptedOffer,
380
- project: params.transaction.project
379
+ project: { id: params.event.project.id }
381
380
  })(repos);
382
381
  // チケット作成
383
382
  const reservedTicket = (0, factory_1.createReservedTicket)({
@@ -388,8 +387,7 @@ function createReservations4transactionObject(params) {
388
387
  reservationFor: { id: params.event.id },
389
388
  reservedSeatsOnly,
390
389
  availableSeatOffers: params.availableSeatOffers,
391
- ticketOffer: ticketOffer,
392
- transaction: params.transaction
390
+ ticketOffer: ticketOffer
393
391
  });
394
392
  const additionalTicketText = (0, factory_1.createAdditionalTicketText)({ acceptedOffer, reservedTicket });
395
393
  const additionalProperty = (0, factory_1.createAdditionalProperty)({ acceptedOffer });
@@ -422,7 +420,7 @@ function createReservations4transactionObject(params) {
422
420
  // アドオンオファー検索(2023-03-02~)
423
421
  availableAddOns = yield searchAvailableAddOns({
424
422
  ids: acceptedAddOnsParams.map((acceptedAddOn) => String(acceptedAddOn.id)),
425
- project: { id: params.transaction.project.id },
423
+ project: { id: params.event.project.id },
426
424
  ticketOffer,
427
425
  availableAtOrFrom: params.availableAtOrFrom
428
426
  })(repos);
@@ -474,12 +472,8 @@ function createReservations4transactionObject(params) {
474
472
  }
475
473
  const subReservation = (_j = (_h = acceptedOffer.itemOffered) === null || _h === void 0 ? void 0 : _h.serviceOutput) === null || _j === void 0 ? void 0 : _j.subReservation;
476
474
  reservations.push((0, factory_1.createReservation)({
477
- project: params.transaction.project,
475
+ project: { id: params.event.project.id, typeOf: factory.organizationType.Project },
478
476
  id: reservationId,
479
- // reserveDate: params.now,
480
- // agent: params.transaction.agent,
481
- // broker: params.transaction.object.broker,
482
- // reservationNumber: reservationNumber,
483
477
  reservationFor: params.event,
484
478
  reservedTicket: reservedTicket,
485
479
  additionalProperty: additionalProperty,
@@ -775,7 +769,7 @@ function processLockOfferRateLimit(params) {
775
769
  */
776
770
  function processLockSeats(params) {
777
771
  return (repos) => __awaiter(this, void 0, void 0, function* () {
778
- var _a, _b, _c, _d, _e;
772
+ var _a, _b, _c, _d;
779
773
  const offers = [];
780
774
  params.reservations.forEach((r) => {
781
775
  var _a, _b;
@@ -820,12 +814,13 @@ function processLockSeats(params) {
820
814
  .add(params.stockHoldUntilDaysAfterEventEnd, 'days')
821
815
  .toDate();
822
816
  // holder:取引番号に対応(2023-06-05~)
823
- let holder = params.transaction.id;
824
- if (((_a = params.transaction.object) === null || _a === void 0 ? void 0 : _a.useHoldStockByTransactionNumber) === true) {
825
- holder = params.transaction.transactionNumber;
826
- }
827
- const hasTicketedSeat = ((_d = (_c = (_b = params.event.offers.itemOffered.serviceOutput) === null || _b === void 0 ? void 0 : _b.reservedTicket) === null || _c === void 0 ? void 0 : _c.ticketedSeat) === null || _d === void 0 ? void 0 : _d.typeOf) === factory.placeType.Seat;
828
- const maximumAttendeeCapacity4event = (_e = params.event.location) === null || _e === void 0 ? void 0 : _e.maximumAttendeeCapacity;
817
+ // let holder: string = params.transaction.id;
818
+ // if (params.transaction.object?.useHoldStockByTransactionNumber === true) {
819
+ // holder = params.transaction.transactionNumber;
820
+ // }
821
+ const holder = params.transaction.transactionNumber; // fix as transactionNumber(2024-07-02~)
822
+ const hasTicketedSeat = ((_c = (_b = (_a = params.event.offers.itemOffered.serviceOutput) === null || _a === void 0 ? void 0 : _a.reservedTicket) === null || _b === void 0 ? void 0 : _b.ticketedSeat) === null || _c === void 0 ? void 0 : _c.typeOf) === factory.placeType.Seat;
823
+ const maximumAttendeeCapacity4event = (_d = params.event.location) === null || _d === void 0 ? void 0 : _d.maximumAttendeeCapacity;
829
824
  if (typeof maximumAttendeeCapacity4event === 'number') {
830
825
  yield repos.stockHolder.lockIfNotLimitExceeded({
831
826
  project: { id: params.event.project.id },
@@ -15,7 +15,6 @@ import type { MongoRepository as ProductRepo } from '../../../repo/product';
15
15
  import type { MongoRepository as ProductOfferRepo } from '../../../repo/productOffer';
16
16
  import type { MongoRepository as ProjectRepo } from '../../../repo/project';
17
17
  import type { RedisRepository as OfferRateLimitRepo } from '../../../repo/rateLimit/offer';
18
- import type { MongoRepository as ReservationRepo } from '../../../repo/reservation';
19
18
  import type { StockHolderRepository as StockHolderRepo } from '../../../repo/stockHolder';
20
19
  import type { MongoRepository as TaskRepo } from '../../../repo/task';
21
20
  import type { TicketRepo } from '../../../repo/ticket';
@@ -38,7 +37,6 @@ interface IAuthorizeRepos {
38
37
  product: ProductRepo;
39
38
  productOffer: ProductOfferRepo;
40
39
  project: ProjectRepo;
41
- reservation: ReservationRepo;
42
40
  seat: SeatRepo;
43
41
  task: TaskRepo;
44
42
  ticket: TicketRepo;
@@ -71,7 +69,6 @@ declare function authorize(params: {
71
69
  */
72
70
  id: string;
73
71
  };
74
- useHoldStockByTransactionNumber: boolean;
75
72
  stockHoldUntilDaysAfterEventEnd: number;
76
73
  /**
77
74
  * オファーID指定なしに座席をおさえる場合true
@@ -62,12 +62,12 @@ function authorize(params) {
62
62
  // case factory.service.webAPI.Identifier.COA:
63
63
  // break;
64
64
  case factory.service.webAPI.Identifier.Chevre:
65
- const processStartReserveResult = yield (0, processStartReserve4chevre_1.processStartReserve4chevre)(Object.assign({
66
- // action,
67
- acceptedOffer: acceptedOffers, event,
65
+ const processStartReserveResult = yield (0, processStartReserve4chevre_1.processStartReserve4chevre)(Object.assign({ acceptedOffer: acceptedOffers, event,
68
66
  transactionNumber,
69
67
  transaction, availableAtOrFrom: { id: params.store.id }, ticketOffers,
70
- unitPriceOffers, validateEvent: params.validateEvent === true, validateEventOfferPeriod: params.validateEventOfferPeriod === true, useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber, stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd }, (typeof ((_a = params.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.object.broker } : undefined))(repos);
68
+ unitPriceOffers, validateEvent: params.validateEvent === true, validateEventOfferPeriod: params.validateEventOfferPeriod === true,
69
+ // useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber, // discontinue(2024-07-02~)
70
+ stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd }, (typeof ((_a = params.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { broker: params.object.broker } : undefined))(repos);
71
71
  acceptedOffers4result = processStartReserveResult.acceptedOffers4result;
72
72
  // add orderInTransaction(2024-01-15~)
73
73
  if (!noOfferSpecified) {
@@ -13,7 +13,6 @@ import type { MongoRepository as ProductRepo } from '../../../repo/product';
13
13
  import type { MongoRepository as ProductOfferRepo } from '../../../repo/productOffer';
14
14
  import type { MongoRepository as ProjectRepo } from '../../../repo/project';
15
15
  import type { RedisRepository as OfferRateLimitRepo } from '../../../repo/rateLimit/offer';
16
- import type { MongoRepository as ReservationRepo } from '../../../repo/reservation';
17
16
  import type { StockHolderRepository as StockHolderRepo } from '../../../repo/stockHolder';
18
17
  import type { MongoRepository as TaskRepo } from '../../../repo/task';
19
18
  import type { TicketRepo } from '../../../repo/ticket';
@@ -30,7 +29,6 @@ declare function processStartReserve4chevre(params: {
30
29
  unitPriceOffers: factory.unitPriceOffer.IUnitPriceOffer[];
31
30
  validateEventOfferPeriod: boolean;
32
31
  validateEvent: boolean;
33
- useHoldStockByTransactionNumber: boolean;
34
32
  stockHoldUntilDaysAfterEventEnd: number;
35
33
  }): (repos: {
36
34
  action: ActionRepo;
@@ -46,7 +44,6 @@ declare function processStartReserve4chevre(params: {
46
44
  productOffer: ProductOfferRepo;
47
45
  priceSpecification: PriceSpecificationRepo;
48
46
  project: ProjectRepo;
49
- reservation: ReservationRepo;
50
47
  seat: SeatRepo;
51
48
  task: TaskRepo;
52
49
  ticket: TicketRepo;
@@ -28,7 +28,9 @@ function processStartReserve4chevre(params) {
28
28
  transactionNumber }, (params.broker !== undefined) ? { broker: params.broker } : undefined));
29
29
  const startParamObject = yield validateObjectWithoutDetail(startParams)(repos);
30
30
  // 予約取引開始
31
- const startReserveTransactionResult = yield ReserveTransactionService.start(Object.assign(Object.assign({}, startParams), { object: startParamObject, preSearchedEvent: event, preSearchedTicketOffers: params.ticketOffers, preSearchedUnitPriceOffers: params.unitPriceOffers, availableAtOrFrom: { id: params.availableAtOrFrom.id }, validateEvent: params.validateEvent, validateEventOfferPeriod: params.validateEventOfferPeriod, validateAppliesToMovieTicket: true, useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber, stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd }))(repos);
31
+ const startReserveTransactionResult = yield ReserveTransactionService.start(Object.assign(Object.assign({}, startParams), { object: startParamObject, preSearchedEvent: event, preSearchedTicketOffers: params.ticketOffers, preSearchedUnitPriceOffers: params.unitPriceOffers, availableAtOrFrom: { id: params.availableAtOrFrom.id }, validateEvent: params.validateEvent, validateEventOfferPeriod: params.validateEventOfferPeriod, validateAppliesToMovieTicket: true,
32
+ // useHoldStockByTransactionNumber: params.useHoldStockByTransactionNumber, // discontinue(2024-07-02~)
33
+ stockHoldUntilDaysAfterEventEnd: params.stockHoldUntilDaysAfterEventEnd }))(repos);
32
34
  // responseBody = startReserveTransactionResult.transaction; // responseBody参照必要なし(2024-07-01~)
33
35
  // 予約取引からオファー情報を生成する
34
36
  acceptedOffers4result = (0, factory_1.responseBody2acceptedOffers4result)({
@@ -15,7 +15,7 @@ exports.processUnlockOfferRateLimit = exports.cancelReservation = exports.cancel
15
15
  */
16
16
  const moment = require("moment");
17
17
  const factory = require("../../factory");
18
- const factory_1 = require("../assetTransaction/reserve/factory");
18
+ const factory_1 = require("./factory");
19
19
  const onReservationCanceled_1 = require("./potentialActions/onReservationCanceled");
20
20
  /**
21
21
  * 進行中の予約をキャンセルする
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.reserveTransaction2action = exports.confirmReservation = void 0;
13
13
  const createDebug = require("debug");
14
14
  const factory = require("../../factory");
15
- const factory_1 = require("../assetTransaction/reserve/factory");
15
+ const factory_1 = require("./factory");
16
16
  const onReservationConfirmed_1 = require("./potentialActions/onReservationConfirmed");
17
17
  const debug = createDebug('chevre-domain:service:reserve:confirmReservation');
18
18
  /**
@@ -64,4 +64,19 @@ export interface IPotentialInformReservationAction extends factory.task.triggerW
64
64
  object: IInformObject;
65
65
  }
66
66
  export declare const NUM_TRY_INFORM_RESERVATION: number;
67
+ export declare function createMoneyTransferActions(params: {
68
+ acceptedOffer?: factory.assetTransaction.reserve.IAcceptedOffer4object;
69
+ reservation: Pick<factory.assetTransaction.reserve.IObjectSubReservation, 'reservedTicket'>;
70
+ transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
71
+ underName?: factory.reservation.IUnderName<factory.reservationType.EventReservation>;
72
+ }): import("@chevre/factory/lib/action/transfer/moneyTransfer").IAttributes[];
73
+ export interface IPotentialCancelAction extends factory.action.cancel.reservation.IAttributes {
74
+ purpose: {
75
+ id: string;
76
+ typeOf: factory.assetTransactionType.Reserve;
77
+ };
78
+ }
79
+ export declare function createCancelPendingReservationAction(params: {
80
+ transaction: factory.assetTransaction.ITransaction<factory.assetTransactionType.Reserve>;
81
+ }): IPotentialCancelAction | undefined;
67
82
  export {};
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NUM_TRY_INFORM_RESERVATION = exports.optimizeUnderName4inform = void 0;
3
+ exports.createCancelPendingReservationAction = exports.createMoneyTransferActions = exports.NUM_TRY_INFORM_RESERVATION = exports.optimizeUnderName4inform = void 0;
4
+ const factory = require("../../factory");
4
5
  function optimizeUnderName4inform(params) {
5
6
  // ReservationPackage通知アクションのobject.underNameを最小化(2024-03-19~)
6
7
  // ? {
@@ -17,3 +18,75 @@ function optimizeUnderName4inform(params) {
17
18
  }
18
19
  exports.optimizeUnderName4inform = optimizeUnderName4inform;
19
20
  exports.NUM_TRY_INFORM_RESERVATION = 10;
21
+ function createMoneyTransferActions(params) {
22
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
23
+ const pointAward = (_b = (_a = params.acceptedOffer) === null || _a === void 0 ? void 0 : _a.itemOffered) === null || _b === void 0 ? void 0 : _b.pointAward;
24
+ const moneyTransfer = [];
25
+ // ポイント特典があれば適用
26
+ const pointAwardToLocationIdentifier = (_c = pointAward === null || pointAward === void 0 ? void 0 : pointAward.toLocation) === null || _c === void 0 ? void 0 : _c.identifier;
27
+ const pointAwardToLocationTypeOf = (_d = pointAward === null || pointAward === void 0 ? void 0 : pointAward.toLocation) === null || _d === void 0 ? void 0 : _d.typeOf;
28
+ if (typeof ((_e = pointAward === null || pointAward === void 0 ? void 0 : pointAward.amount) === null || _e === void 0 ? void 0 : _e.value) === 'number'
29
+ && typeof pointAwardToLocationIdentifier === 'string'
30
+ && typeof pointAwardToLocationTypeOf === 'string') {
31
+ const fromLocation = {
32
+ typeOf: (typeof ((_f = params.reservation.reservedTicket.issuedBy) === null || _f === void 0 ? void 0 : _f.typeOf) === 'string')
33
+ ? params.reservation.reservedTicket.issuedBy.typeOf
34
+ : params.transaction.typeOf,
35
+ name: (typeof ((_g = params.reservation.reservedTicket.issuedBy) === null || _g === void 0 ? void 0 : _g.name) === 'string')
36
+ ? params.reservation.reservedTicket.issuedBy.name
37
+ : params.transaction.id
38
+ };
39
+ const toLocation = {
40
+ identifier: pointAwardToLocationIdentifier,
41
+ typeOf: factory.permit.PermitType.Permit,
42
+ issuedThrough: { id: String((_j = (_h = pointAward.toLocation) === null || _h === void 0 ? void 0 : _h.issuedThrough) === null || _j === void 0 ? void 0 : _j.id) }
43
+ };
44
+ const recipient = {
45
+ typeOf: (typeof ((_k = params.underName) === null || _k === void 0 ? void 0 : _k.typeOf) === 'string')
46
+ ? (_l = params.underName) === null || _l === void 0 ? void 0 : _l.typeOf
47
+ : factory.personType.Person,
48
+ id: (typeof ((_m = params.underName) === null || _m === void 0 ? void 0 : _m.id) === 'string')
49
+ ? (_o = params.underName) === null || _o === void 0 ? void 0 : _o.id
50
+ : '',
51
+ name: String((_p = params.underName) === null || _p === void 0 ? void 0 : _p.name)
52
+ };
53
+ moneyTransfer.push(Object.assign(Object.assign({ project: params.transaction.project, typeOf: factory.actionType.MoneyTransfer, agent: params.transaction.project, recipient, object: {
54
+ typeOf: factory.account.transactionType.Deposit
55
+ }, purpose: Object.assign({ typeOf: params.transaction.typeOf, id: params.transaction.id }, (typeof ((_q = pointAward.purpose) === null || _q === void 0 ? void 0 : _q.identifier) === 'string') ? { identifier: pointAward.purpose.identifier } : undefined), amount: {
56
+ typeOf: 'MonetaryAmount',
57
+ value: (_r = pointAward.amount) === null || _r === void 0 ? void 0 : _r.value,
58
+ currency: (_s = pointAward.amount) === null || _s === void 0 ? void 0 : _s.currency
59
+ }, fromLocation: fromLocation, toLocation: toLocation }, (typeof pointAward.description === 'string') ? { description: pointAward.description } : undefined), (pointAward.recipient !== undefined) ? { recipient: pointAward.recipient } : undefined));
60
+ }
61
+ return moneyTransfer;
62
+ }
63
+ exports.createMoneyTransferActions = createMoneyTransferActions;
64
+ function createCancelPendingReservationAction(params) {
65
+ const transaction = params.transaction;
66
+ const pendingReservations = (Array.isArray(transaction.object.subReservation)) ? transaction.object.subReservation : [];
67
+ let cancelActionAttributes;
68
+ if (pendingReservations.length > 0) {
69
+ const reservationFor = transaction.object.reservationFor;
70
+ if (reservationFor === undefined) {
71
+ throw new factory.errors.NotFound('transaction.object.reservationFor');
72
+ }
73
+ // ReservationPackageに対応(2022-12-23~)
74
+ const reservationPackage = {
75
+ typeOf: factory.reservationType.ReservationPackage,
76
+ reservationNumber: transaction.transactionNumber,
77
+ reservationFor: { typeOf: reservationFor.typeOf, id: String(reservationFor.id) },
78
+ reservationStatus: (typeof params.transaction.object.reservationStatus === 'string')
79
+ ? params.transaction.object.reservationStatus
80
+ : factory.reservationStatusType.ReservationPending
81
+ };
82
+ cancelActionAttributes = {
83
+ project: transaction.project,
84
+ typeOf: factory.actionType.CancelAction,
85
+ purpose: { typeOf: transaction.typeOf, id: transaction.id },
86
+ agent: transaction.project,
87
+ object: reservationPackage
88
+ };
89
+ }
90
+ return cancelActionAttributes;
91
+ }
92
+ exports.createCancelPendingReservationAction = createCancelPendingReservationAction;
package/package.json CHANGED
@@ -10,8 +10,8 @@
10
10
  ],
11
11
  "dependencies": {
12
12
  "@aws-sdk/credential-providers": "3.433.0",
13
- "@chevre/factory": "4.377.0-alpha.3",
14
- "@cinerino/sdk": "8.0.0",
13
+ "@chevre/factory": "4.377.0-alpha.4",
14
+ "@cinerino/sdk": "8.1.0",
15
15
  "@motionpicture/coa-service": "9.4.0",
16
16
  "@motionpicture/gmo-service": "5.3.0",
17
17
  "@sendgrid/mail": "6.4.0",
@@ -110,5 +110,5 @@
110
110
  "postversion": "git push origin --tags",
111
111
  "prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
112
112
  },
113
- "version": "21.37.0-alpha.6"
113
+ "version": "21.37.0-alpha.8"
114
114
  }