@chevre/domain 21.35.0-alpha.18 → 21.35.0-alpha.19

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,4 +1,5 @@
1
1
  import type { MongoRepository as ActionRepo } from '../../../repo/action';
2
+ import type { MongoRepository as AssetTransactionRepo } from '../../../repo/assetTransaction';
2
3
  import type { AuthorizationRepo } from '../../../repo/code';
3
4
  import type { ConfirmationNumberRepo } from '../../../repo/confirmationNumber';
4
5
  import type { MongoRepository as EmailMessageRepo } from '../../../repo/emailMessage';
@@ -11,6 +12,7 @@ import * as factory from '../../../factory';
11
12
  import { placeOrder as PlaceOrderFactory } from '../../../factory/transaction';
12
13
  interface IConfirmOperationRepos {
13
14
  action: ActionRepo;
15
+ assetTransaction: AssetTransactionRepo;
14
16
  authorization: AuthorizationRepo;
15
17
  emailMessage?: EmailMessageRepo;
16
18
  message: MessageRepo;
@@ -83,11 +83,22 @@ function confirm(params) {
83
83
  // orderInTransactionから検索する(2024-03-04~)
84
84
  acceptedOffers = (yield repos.orderInTransaction.findAcceptedOffersByOrderNumber({ orderNumber: { $eq: orderNumber } }))
85
85
  .filter(({ serialNumber }) => typeof serialNumber === 'string' && serialNumbers.includes(serialNumber));
86
+ // authorizePaymentActionsからpayTransactionsを参照(2024-06-20~)
87
+ let payTransactions = [];
88
+ const payTransactionNumbers = authorizePaymentActions.map(({ instrument }) => instrument.transactionNumber);
89
+ if (payTransactionNumbers.length > 0) {
90
+ payTransactions = yield repos.assetTransaction.search({
91
+ typeOf: factory.assetTransactionType.Pay,
92
+ transactionNumber: { $in: payTransactionNumbers }
93
+ }, ['object']);
94
+ debug('confirming placeOrder...', transaction.id, 'payTransactions found.', JSON.stringify(payTransactions));
95
+ }
86
96
  const { paymentMethods, result, eventId, reservationIds } = createResult(Object.assign(Object.assign(Object.assign({}, params), { orderNumber, transaction: transaction, authorizePaymentActions,
87
97
  authorizeEventServiceOfferActions,
88
98
  authorizeMoneyTansferActions,
89
99
  authorizeProductOfferActions,
90
- acceptedOffers }), (typeof code === 'string') ? { code } : undefined));
100
+ acceptedOffers,
101
+ payTransactions }), (typeof code === 'string') ? { code } : undefined));
91
102
  const customer = (0, result_1.createCustomer)({ transaction });
92
103
  const seller = (0, result_1.createSeller)({ transaction });
93
104
  // デフォルトEメールメッセージを検索
@@ -278,7 +289,7 @@ function createResult(params) {
278
289
  }
279
290
  });
280
291
  // 取引の確定条件が全て整っているかどうか確認
281
- (0, validation_1.validateTransaction)(transaction, params.authorizePaymentActions, params.authorizeEventServiceOfferActions, params.authorizeMoneyTansferActions, params.authorizeProductOfferActions, eventReservationAcceptedOffers);
292
+ (0, validation_1.validateTransaction)(transaction, params.authorizePaymentActions, params.authorizeEventServiceOfferActions, params.authorizeMoneyTansferActions, params.authorizeProductOfferActions, eventReservationAcceptedOffers, params.payTransactions);
282
293
  const { paymentMethods, price } = (0, result_1.createPaymentMethods)({ authorizePaymentActions: params.authorizePaymentActions });
283
294
  const orderedItem = (0, orderedItem_1.acceptedOffers2orderedItem)({
284
295
  eventReservationAcceptedOffers,
@@ -3,11 +3,12 @@ import { placeOrder as PlaceOrderFactory } from '../../../factory/transaction';
3
3
  export type IAuthorizeEventServiceOffer = factory.action.authorize.offer.eventService.IAction<factory.service.webAPI.Identifier>;
4
4
  export type IAuthorizeProductOffer = factory.action.authorize.offer.product.IAction;
5
5
  export type IAuthorizeMoneyTransferOffer = factory.action.authorize.offer.moneyTransfer.IAction;
6
- export type IAuthorizePaymentAction = Pick<factory.action.authorize.paymentMethod.any.IAction, 'id' | 'object' | 'result' | 'endDate'>;
6
+ export type IAuthorizePaymentAction = Pick<factory.action.authorize.paymentMethod.any.IAction, 'id' | 'object' | 'result' | 'endDate' | 'instrument'>;
7
+ export type IPayTransaction = Pick<factory.assetTransaction.pay.ITransaction, 'object'>;
7
8
  /**
8
9
  * 取引が確定可能な状態かどうかをチェックする
9
10
  */
10
- export declare function validateTransaction(transaction: Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'object'>, authorizePaymentActions: IAuthorizePaymentAction[], authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[], authorizeMoneyTansferActions: Pick<IAuthorizeMoneyTransferOffer, 'id' | 'result'>[], authorizeProductOfferActions: Pick<IAuthorizeProductOffer, 'id' | 'result'>[], eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[]): void;
11
+ export declare function validateTransaction(transaction: Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'object'>, authorizePaymentActions: IAuthorizePaymentAction[], authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[], authorizeMoneyTansferActions: Pick<IAuthorizeMoneyTransferOffer, 'id' | 'result'>[], authorizeProductOfferActions: Pick<IAuthorizeProductOffer, 'id' | 'result'>[], eventReservationAcceptedOffers: factory.order.IAcceptedOffer<factory.order.IReservation>[], payTransactions: IPayTransaction[]): void;
11
12
  export type IOrderURLGenerator = (order: factory.order.IOrder) => string;
12
13
  /**
13
14
  * 注文オファー数検証
@@ -13,7 +13,7 @@ const debug = createDebug('chevre-domain:service:transaction');
13
13
  /**
14
14
  * 取引が確定可能な状態かどうかをチェックする
15
15
  */
16
- function validateTransaction(transaction, authorizePaymentActions, authorizeEventServiceOfferActions, authorizeMoneyTansferActions, authorizeProductOfferActions, eventReservationAcceptedOffers) {
16
+ function validateTransaction(transaction, authorizePaymentActions, authorizeEventServiceOfferActions, authorizeMoneyTansferActions, authorizeProductOfferActions, eventReservationAcceptedOffers, payTransactions) {
17
17
  validateProfile(transaction);
18
18
  validatePrice(authorizePaymentActions, authorizeEventServiceOfferActions, authorizeProductOfferActions, authorizeMoneyTansferActions);
19
19
  // 利用可能な通貨単位に対して取引検証
@@ -33,10 +33,22 @@ function validateTransaction(transaction, authorizePaymentActions, authorizeEven
33
33
  // 決済方法区分は必ず存在するはず(2023-08-15~)
34
34
  && ((_a = resultAsInvoice.paymentMethodAsObject) === null || _a === void 0 ? void 0 : _a.typeOf) === paymentMethodType;
35
35
  });
36
+ // 決済承認アクションobject.movieTicketsではなく、payTransaction.object参照で再実装(2024-06-20~)
36
37
  const authorizedMovieTickets = [];
37
- authorizeMovieTicketActions.forEach((a) => {
38
- authorizedMovieTickets.push(...(Array.isArray(a.object.movieTickets)) ? a.object.movieTickets : []);
39
- });
38
+ if (settings_1.USE_EXPERIMENTAL_FEATURE) {
39
+ const payTransactionNumbers = authorizeMovieTicketActions.map(({ instrument }) => instrument.transactionNumber);
40
+ payTransactions.filter(({ object }) => payTransactionNumbers.includes(object.paymentMethodId))
41
+ .forEach(({ object }) => {
42
+ if (Array.isArray(object.paymentMethod.movieTickets)) {
43
+ authorizedMovieTickets.push(...object.paymentMethod.movieTickets);
44
+ }
45
+ });
46
+ }
47
+ else {
48
+ authorizeMovieTicketActions.forEach((a) => {
49
+ authorizedMovieTickets.push(...(Array.isArray(a.object.movieTickets)) ? a.object.movieTickets : []);
50
+ });
51
+ }
40
52
  debug(authorizedMovieTickets.length, 'movie tickets authorized', 'transaction:', transaction.id);
41
53
  // validateMovieTicket(paymentMethodType, { id: transaction.id }, authorizePaymentActions, eventReservationAcceptedOffers);
42
54
  (0, validateMovieTicket_1.validateMovieTicket)(paymentMethodType, { id: transaction.id }, authorizedMovieTickets, eventReservationAcceptedOffers);
package/package.json CHANGED
@@ -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.35.0-alpha.18"
113
+ "version": "21.35.0-alpha.19"
114
114
  }