@chevre/domain 21.25.0-alpha.2 → 21.25.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,4 @@
1
1
  import * as factory from '../../../factory';
2
- export type IAuthorizeAnyPaymentResult = factory.action.authorize.paymentMethod.any.IResult;
3
2
  /**
4
3
  * 注文を生成する
5
4
  */
@@ -9,7 +8,8 @@ export declare function createOrder(params: {
9
8
  orderDate: Date;
10
9
  orderStatus: factory.orderStatus;
11
10
  isGift: boolean;
12
- authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[];
13
- }): factory.transaction.placeOrder.IOrderAsResult & {
14
- acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[];
15
- };
11
+ authorizePaymentActions: factory.action.authorize.paymentMethod.any.IAction[];
12
+ eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[];
13
+ productAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IPermit>[];
14
+ moneyTransferAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IMoneyTransfer>[];
15
+ }): factory.transaction.placeOrder.IOrderAsResult;
@@ -11,23 +11,30 @@ function createOrder(params) {
11
11
  const seller = createSeller({ transaction: params.transaction });
12
12
  const customer = createCustomer({ transaction: params.transaction });
13
13
  // 予約がある場合
14
- const { reservationAcceptedOffers, reservationOrderItems } = (0, acceptedOffers_1.createReservationAcceptedOffers)(params);
14
+ // const { reservationAcceptedOffers, reservationOrderItems } = createReservationAcceptedOffers(params);
15
+ const { reservationOrderItems } = (0, acceptedOffers_1.createReservationAcceptedOffers)(params);
15
16
  // 通貨転送がある場合
16
- const { moneyTransferAcceptedOffers, moneyTransferOrderItems } = (0, acceptedOffers_1.createMoneyTransferAcceptedOffers)(Object.assign(Object.assign({}, params), { seller: seller }));
17
+ // const { moneyTransferAcceptedOffers, moneyTransferOrderItems } = createMoneyTransferAcceptedOffers({ ...params, seller: seller });
18
+ const { moneyTransferOrderItems } = (0, acceptedOffers_1.createMoneyTransferAcceptedOffers)(params);
17
19
  // プロダクトがある場合
18
- const { productAcceptedOffers, productOrderItems } = (0, acceptedOffers_1.createProductItems)(params);
19
- const acceptedOffers = [
20
- ...reservationAcceptedOffers,
21
- ...moneyTransferAcceptedOffers,
22
- ...productAcceptedOffers
23
- ];
20
+ // const { productAcceptedOffers, productOrderItems } = createProductItems(params);
21
+ const { productOrderItems } = (0, acceptedOffers_1.createProductItems)(params);
22
+ // const acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[] = [
23
+ // ...reservationAcceptedOffers,
24
+ // ...moneyTransferAcceptedOffers,
25
+ // ...productAcceptedOffers
26
+ // ];
24
27
  const orderedItems = [...reservationOrderItems, ...moneyTransferOrderItems, ...productOrderItems];
25
28
  // 決済方法をセット
26
- const { paymentMethods, price } = createPaymentMethods({ transaction: params.transaction, authorizeActions: params.authorizeActions });
29
+ const { paymentMethods, price } = createPaymentMethods({
30
+ authorizePaymentActions: params.authorizePaymentActions
31
+ });
27
32
  const discounts = [];
28
33
  const name = (typeof params.transaction.object.name === 'string') ? params.transaction.object.name : undefined;
29
34
  const broker = (typeof ((_a = params.transaction.object.broker) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? params.transaction.object.broker : undefined;
30
- return Object.assign(Object.assign({ project: params.transaction.project, typeOf: factory.order.OrderType.Order, seller: seller, customer: customer, price: price, priceCurrency: factory.priceCurrency.JPY, paymentMethods: paymentMethods, discounts: discounts, confirmationNumber: '', orderNumber: params.orderNumber, orderedItem: orderedItems, acceptedOffers: acceptedOffers, url: '', orderStatus: params.orderStatus, orderDate: params.orderDate, identifier: [], isGift: params.isGift }, (typeof name === 'string') ? { name } : undefined), (typeof (broker === null || broker === void 0 ? void 0 : broker.typeOf) === 'string') ? { broker } : undefined);
35
+ return Object.assign(Object.assign({ project: params.transaction.project, typeOf: factory.order.OrderType.Order, seller: seller, customer: customer, price: price, priceCurrency: factory.priceCurrency.JPY, paymentMethods: paymentMethods, discounts: discounts, confirmationNumber: '', orderNumber: params.orderNumber, orderedItem: orderedItems,
36
+ // acceptedOffers: acceptedOffers,
37
+ url: '', orderStatus: params.orderStatus, orderDate: params.orderDate, identifier: [], isGift: params.isGift }, (typeof name === 'string') ? { name } : undefined), (typeof (broker === null || broker === void 0 ? void 0 : broker.typeOf) === 'string') ? { broker } : undefined);
31
38
  }
32
39
  exports.createOrder = createOrder;
33
40
  function createSeller(params) {
@@ -62,16 +69,8 @@ function createCustomer(params) {
62
69
  function createPaymentMethods(params) {
63
70
  const paymentMethods = [];
64
71
  let price = 0;
65
- const authorizePaymentActions = params.authorizeActions
66
- .filter((a) => {
67
- var _a;
68
- const resultAsInvoice = (Array.isArray(a.result))
69
- ? (_a = a.result) === null || _a === void 0 ? void 0 : _a.find((resultObject) => resultObject.typeOf === factory.action.authorize.paymentMethod.any.ResultType.Payment)
70
- : a.result;
71
- return (resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.typeOf) === factory.action.authorize.paymentMethod.any.ResultType.Payment;
72
- });
73
72
  // 決済方法をセット
74
- authorizePaymentActions.forEach((a) => {
73
+ params.authorizePaymentActions.forEach((a) => {
75
74
  var _a, _b, _c, _d;
76
75
  // const result = (<factory.action.authorize.paymentMethod.any.IResult>a.result);
77
76
  const resultAsInvoice = (Array.isArray(a.result))
@@ -101,7 +100,7 @@ function createPaymentMethods(params) {
101
100
  });
102
101
  });
103
102
  // 決済方法から注文金額の計算
104
- price += authorizePaymentActions
103
+ price += params.authorizePaymentActions
105
104
  .reduce((a, b) => {
106
105
  var _a, _b;
107
106
  const resultAsInvoice = (Array.isArray(b.result))
@@ -1,5 +1,22 @@
1
1
  import * as factory from '../../../../factory';
2
+ type IAuthorizePaymentAction = factory.action.authorize.paymentMethod.any.IAction;
2
3
  /**
3
- * 座席予約オファー承認に対してムビチケ承認条件が整っているかどうか検証する
4
+ * 興行オファー承認に対して決済承認条件が整っているかどうか検証する
5
+ * 決済方法区分ごとに検証
4
6
  */
5
- export declare function validateMovieTicket(paymentMethodType: string, transaction: factory.transaction.placeOrder.ITransaction, authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[]): void;
7
+ export declare function validateMovieTicket(
8
+ /**
9
+ * 決済方法区分
10
+ */
11
+ paymentMethodType: string, transaction: {
12
+ id: string;
13
+ },
14
+ /**
15
+ * 決済承認アクション
16
+ */
17
+ authorizePaymentActions: IAuthorizePaymentAction[],
18
+ /**
19
+ * 受け入れられた興行オファー
20
+ */
21
+ eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[]): void;
22
+ export {};
@@ -6,27 +6,42 @@ exports.validateMovieTicket = void 0;
6
6
  */
7
7
  const createDebug = require("debug");
8
8
  const factory = require("../../../../factory");
9
- const debug = createDebug('cinerino-domain:service:validateMovieTicket');
9
+ const debug = createDebug('chevre-domain:service:validateMovieTicket');
10
10
  /**
11
- * 座席予約オファー承認に対してムビチケ承認条件が整っているかどうか検証する
11
+ * 興行オファー承認に対して決済承認条件が整っているかどうか検証する
12
+ * 決済方法区分ごとに検証
12
13
  */
13
- function validateMovieTicket(paymentMethodType, transaction, authorizeActions) {
14
- const authorizeMovieTicketActions = authorizeActions.filter((a) => {
15
- var _a, _b;
14
+ // tslint:disable-next-line:max-func-body-length
15
+ function validateMovieTicket(
16
+ /**
17
+ * 決済方法区分
18
+ */
19
+ paymentMethodType, transaction,
20
+ /**
21
+ * 決済承認アクション
22
+ */
23
+ authorizePaymentActions,
24
+ /**
25
+ * 受け入れられた興行オファー
26
+ */
27
+ eventReservationAcceptedOffers) {
28
+ const authorizeMovieTicketActions = authorizePaymentActions.filter((a) => {
29
+ var _a;
16
30
  const resultAsInvoice = (Array.isArray(a.result))
17
- ? (_a = a.result) === null || _a === void 0 ? void 0 : _a.find((resultObject) => resultObject.typeOf === factory.action.authorize.paymentMethod.any.ResultType.Payment)
18
- : a.result;
19
- return (resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.typeOf) === factory.action.authorize.paymentMethod.any.ResultType.Payment
20
- && (resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.issuedThrough.typeOf) === factory.service.paymentService.PaymentServiceType.MovieTicket
31
+ ? a.result.find(({ typeOf }) => typeOf === factory.action.authorize.paymentMethod.any.ResultType.Payment)
32
+ : undefined;
33
+ return (resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.issuedThrough.typeOf) === factory.service.paymentService.PaymentServiceType.MovieTicket
21
34
  // 決済方法区分は必ず存在するはず(2023-08-15~)
22
- && ((_b = resultAsInvoice === null || resultAsInvoice === void 0 ? void 0 : resultAsInvoice.paymentMethodAsObject) === null || _b === void 0 ? void 0 : _b.typeOf) === paymentMethodType;
23
- // && a.result?.paymentMethod === paymentMethodType
35
+ && ((_a = resultAsInvoice.paymentMethodAsObject) === null || _a === void 0 ? void 0 : _a.typeOf) === paymentMethodType;
24
36
  });
25
- const seatReservationAuthorizeActions = authorizeActions.filter((a) => a.object.typeOf === factory.action.authorize.offer.eventService.ObjectType.SeatReservation);
37
+ // const seatReservationAuthorizeActions = (<IAuthorizeSeatReservationOffer[]>authorizeActions).filter(
38
+ // (a) => a.object.typeOf === factory.action.authorize.offer.eventService.ObjectType.SeatReservation
39
+ // );
26
40
  // 予約によって必要とされるMovieTicket
27
41
  const requiredMovieTickets = authorizeSeatReservationActions2requiredMovieTickets({
28
42
  paymentMethodType,
29
- seatReservationAuthorizeActions
43
+ // seatReservationAuthorizeActions
44
+ acceptedOffers: eventReservationAcceptedOffers
30
45
  });
31
46
  debug(requiredMovieTickets.length, 'movie tickets required', 'transaction:', transaction.id);
32
47
  const authorizedMovieTickets = [];
@@ -105,76 +120,71 @@ function validateAppliesToMovieTicketIdentifiers(params) {
105
120
  }
106
121
  });
107
122
  }
108
- // tslint:disable-next-line:max-func-body-length
123
+ /**
124
+ * 予約オファーリストから必要なmovieTicketsを生成する
125
+ */
109
126
  function authorizeSeatReservationActions2requiredMovieTickets(params) {
110
127
  const paymentMethodType = params.paymentMethodType;
111
- const seatReservationAuthorizeActions = params.seatReservationAuthorizeActions;
128
+ // const seatReservationAuthorizeActions = params.seatReservationAuthorizeActions;
112
129
  // ムビチケオファーを受け付けた座席予約を検索する
113
130
  const requiredMovieTickets = [];
114
131
  // tslint:disable-next-line:max-func-body-length
115
- seatReservationAuthorizeActions.forEach((action) => {
116
- var _a;
117
- const event = action.object.event;
118
- // ↓実際ありえないフロー
119
- if (event === undefined || event === null) {
120
- throw new factory.errors.ServiceUnavailable('Authorized event undefined');
121
- }
122
- // a.objectではなくa.resultを使用する(2022-06-04~)
123
- // 予約の複数適用決済カードに対応する(2022-07-28~)
124
- const acceptedOffers = (_a = action.result) === null || _a === void 0 ? void 0 : _a.acceptedOffers;
125
- if (Array.isArray(acceptedOffers)) {
126
- acceptedOffers.forEach((offer) => {
127
- var _a, _b, _c, _d, _e;
128
- let offeredTicketedSeat;
129
- const acceptedTicketedSeatByItemOffered = (_b = (_a = offer.itemOffered) === null || _a === void 0 ? void 0 : _a.reservedTicket) === null || _b === void 0 ? void 0 : _b.ticketedSeat;
130
- if (typeof (acceptedTicketedSeatByItemOffered === null || acceptedTicketedSeatByItemOffered === void 0 ? void 0 : acceptedTicketedSeatByItemOffered.typeOf) === 'string') {
131
- offeredTicketedSeat = acceptedTicketedSeatByItemOffered;
132
+ // seatReservationAuthorizeActions.forEach((action) => {
133
+ // const acceptedOffers = action.result?.acceptedOffers;
134
+ // });
135
+ if (Array.isArray(params.acceptedOffers)) {
136
+ params.acceptedOffers.forEach((offer) => {
137
+ var _a, _b, _c, _d;
138
+ let offeredTicketedSeat;
139
+ const acceptedTicketedSeatByItemOffered = (_b = (_a = offer.itemOffered) === null || _a === void 0 ? void 0 : _a.reservedTicket) === null || _b === void 0 ? void 0 : _b.ticketedSeat;
140
+ if (typeof (acceptedTicketedSeatByItemOffered === null || acceptedTicketedSeatByItemOffered === void 0 ? void 0 : acceptedTicketedSeatByItemOffered.typeOf) === 'string') {
141
+ offeredTicketedSeat = acceptedTicketedSeatByItemOffered;
142
+ }
143
+ if (typeof (offeredTicketedSeat === null || offeredTicketedSeat === void 0 ? void 0 : offeredTicketedSeat.typeOf) === 'string') {
144
+ const ticketedSeat4MovieTicket = offeredTicketedSeat;
145
+ const eventOfferedThroughIdentifier = (_c = offer.offeredThrough) === null || _c === void 0 ? void 0 : _c.identifier;
146
+ if (typeof eventOfferedThroughIdentifier !== 'string') {
147
+ throw new factory.errors.NotFound('offer.offeredThrough.identifier', `offer.offeredThrough.identifier undefined [serialNumber:${offer.serialNumber}]`);
148
+ }
149
+ // シンプルに単価仕様のappliesToMovieTicketを参照してrequiredMovieTicketsを作成する(2022-07-28~)
150
+ const unitPriceSpec = (_d = offer.priceSpecification) === null || _d === void 0 ? void 0 : _d.priceComponent.find((component) => {
151
+ return component.typeOf === factory.priceSpecificationType.UnitPriceSpecification
152
+ && (!Array.isArray(component.appliesToAddOn));
153
+ });
154
+ if (unitPriceSpec === undefined) {
155
+ throw new factory.errors.NotFound('UnitPriceSpecification of acceptedOffer');
156
+ }
157
+ if (offer.itemOffered.reservationFor.typeOf !== factory.eventType.ScreeningEvent) {
158
+ throw new factory.errors.NotImplemented(`offer.itemOffered.reservationFor.typeOf not imelemented [${offer.itemOffered.reservationFor.typeOf}]`);
132
159
  }
133
- if (typeof (offeredTicketedSeat === null || offeredTicketedSeat === void 0 ? void 0 : offeredTicketedSeat.typeOf) === 'string') {
134
- const ticketedSeat4MovieTicket = offeredTicketedSeat;
135
- // Chevre or COAでrequiredMovieTicketsの取り出し方が異なる
136
- const eventOfferedThroughIdentifier = (_d = (_c = event.offers) === null || _c === void 0 ? void 0 : _c.offeredThrough) === null || _d === void 0 ? void 0 : _d.identifier;
137
- // シンプルに単価仕様のappliesToMovieTicketを参照してrequiredMovieTicketsを作成する(2022-07-28~)
138
- const unitPriceSpec = (_e = offer.priceSpecification) === null || _e === void 0 ? void 0 : _e.priceComponent.find((component) => {
139
- return component.typeOf === factory.priceSpecificationType.UnitPriceSpecification
140
- && (!Array.isArray(component.appliesToAddOn));
160
+ const reservationFor4movieTicket = {
161
+ typeOf: offer.itemOffered.reservationFor.typeOf,
162
+ id: offer.itemOffered.reservationFor.id
163
+ // offers: { offeredThrough: { identifier: eventOfferedThroughIdentifier } }
164
+ };
165
+ // 指定された決済方法の適用決済カードリスト
166
+ let appliesToMovieTickets4paymentMethod = [];
167
+ const appliesToMovieTickets4reservation = unitPriceSpec.appliesToMovieTicket;
168
+ if (Array.isArray(appliesToMovieTickets4reservation)) {
169
+ appliesToMovieTickets4paymentMethod = appliesToMovieTickets4reservation.filter((a) => {
170
+ return a.serviceOutput.typeOf === paymentMethodType;
141
171
  });
142
- if (unitPriceSpec === undefined) {
143
- throw new factory.errors.NotFound('UnitPriceSpecification of acceptedOffer');
144
- }
145
- // 指定された決済方法の適用決済カードリスト
146
- let appliesToMovieTickets4paymentMethod = [];
147
- const appliesToMovieTickets4reservation = unitPriceSpec.appliesToMovieTicket;
148
- if (Array.isArray(appliesToMovieTickets4reservation)) {
149
- appliesToMovieTickets4paymentMethod = appliesToMovieTickets4reservation.filter((a) => {
150
- return a.serviceOutput.typeOf === paymentMethodType;
151
- });
152
- // Array以外への考慮自体を廃止(2023-09-01~)
153
- // } else if (typeof appliesToMovieTickets4reservation?.identifier === 'string') {
154
- // // Arrayでない場合を廃止(2022-08-01~)
155
- // throw new factory.errors.NotImplemented('appliesToMovieTickets.typeOf as string not implemented');
156
- }
157
- if (Array.isArray(appliesToMovieTickets4paymentMethod) && appliesToMovieTickets4paymentMethod.length > 0) {
158
- appliesToMovieTickets4paymentMethod.forEach((appliesToMovieTicket) => {
159
- requiredMovieTickets.push({
160
- // project: action.project,
161
- typeOf: paymentMethodType,
162
- identifier: String(appliesToMovieTicket.identifier),
163
- serviceType: appliesToMovieTicket.serviceType,
164
- serviceOutput: {
165
- reservationFor: {
166
- typeOf: event.typeOf,
167
- id: event.id,
168
- offers: { offeredThrough: { identifier: eventOfferedThroughIdentifier } }
169
- },
170
- reservedTicket: { ticketedSeat: ticketedSeat4MovieTicket }
171
- }
172
- });
172
+ }
173
+ if (Array.isArray(appliesToMovieTickets4paymentMethod) && appliesToMovieTickets4paymentMethod.length > 0) {
174
+ appliesToMovieTickets4paymentMethod.forEach((appliesToMovieTicket) => {
175
+ requiredMovieTickets.push({
176
+ typeOf: paymentMethodType,
177
+ identifier: String(appliesToMovieTicket.identifier),
178
+ serviceType: appliesToMovieTicket.serviceType,
179
+ serviceOutput: {
180
+ reservationFor: reservationFor4movieTicket,
181
+ reservedTicket: { ticketedSeat: ticketedSeat4MovieTicket }
182
+ }
173
183
  });
174
- }
184
+ });
175
185
  }
176
- });
177
- }
178
- });
186
+ }
187
+ });
188
+ }
179
189
  return requiredMovieTickets;
180
190
  }
@@ -1,22 +1,20 @@
1
1
  import * as factory from '../../../factory';
2
2
  import { placeOrder as PlaceOrderFactory } from '../../../factory/transaction';
3
- export type IAuthorizeAnyPaymentResult = factory.action.authorize.paymentMethod.any.IResult;
4
- export type IAuthorizeSeatReservationOffer = factory.action.authorize.offer.eventService.IAction<factory.service.webAPI.Identifier>;
5
- export type IAuthorizeSeatReservationOfferResult = factory.action.authorize.offer.eventService.IResult<factory.service.webAPI.Identifier>;
6
- export type IAuthorizeOfferAction = factory.action.authorize.offer.product.IAction | factory.action.authorize.offer.eventService.IAction<factory.service.webAPI.Identifier> | factory.action.authorize.offer.moneyTransfer.IAction;
7
- export type IUnitPriceSpecification = factory.priceSpecification.IPriceSpecification<factory.priceSpecificationType.UnitPriceSpecification>;
3
+ export type IAuthorizeEventServiceOffer = factory.action.authorize.offer.eventService.IAction<factory.service.webAPI.Identifier>;
4
+ export type IAuthorizeProductOffer = factory.action.authorize.offer.product.IAction;
5
+ export type IAuthorizeMoneyTransferOffer = factory.action.authorize.offer.moneyTransfer.IAction;
6
+ export type IAuthorizePaymentAction = factory.action.authorize.paymentMethod.any.IAction;
8
7
  /**
9
8
  * 取引が確定可能な状態かどうかをチェックする
10
9
  */
11
- export declare function validateTransaction(transaction: factory.transaction.placeOrder.ITransaction, authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[]): void;
10
+ export declare function validateTransaction(transaction: factory.transaction.placeOrder.ITransaction, authorizePaymentActions: IAuthorizePaymentAction[], authorizeEventServiceOfferActions: IAuthorizeEventServiceOffer[], authorizeMoneyTansferActions: IAuthorizeMoneyTransferOffer[], authorizeProductOfferActions: IAuthorizeProductOffer[], eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[]): void;
12
11
  export type IOrderURLGenerator = (order: factory.order.IOrder) => string;
13
12
  export declare function validateNumItems(params: {
14
- order: factory.transaction.placeOrder.IOrderAsResult & {
15
- acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[];
16
- };
13
+ order: factory.transaction.placeOrder.IOrderAsResult;
17
14
  result: {
18
15
  order: PlaceOrderFactory.IResultOrderParams;
19
16
  };
17
+ acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[];
20
18
  }): void;
21
19
  export declare function validateOrderedItem(params: {
22
20
  order: factory.transaction.placeOrder.IOrderAsResult;
@@ -31,7 +29,6 @@ export declare function validatePaymentMethods(params: {
31
29
  * 興行オファー適用条件確認
32
30
  */
33
31
  export declare function validateEventOffers(params: {
34
- transaction: factory.transaction.placeOrder.ITransaction;
35
32
  order: factory.order.IOrder;
36
- authorizeActions: factory.action.authorize.IAction<factory.action.authorize.IAttributes<any, any>>[];
33
+ authorizeEventServiceOfferActions: IAuthorizeEventServiceOffer[];
37
34
  }): void;