@chevre/domain 24.0.0-alpha.80 → 24.0.0-alpha.81

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 (41) hide show
  1. package/lib/chevre/errorHandler.d.ts +5 -0
  2. package/lib/chevre/errorHandler.js +26 -4
  3. package/lib/chevre/repo/accountingReport.js +2 -25
  4. package/lib/chevre/repo/aggregateOffer.js +11 -36
  5. package/lib/chevre/repo/event.js +2 -37
  6. package/lib/chevre/repo/eventSeries.js +0 -144
  7. package/lib/chevre/repo/message.js +1 -3
  8. package/lib/chevre/repo/offer/unitPriceInCatalog.js +1 -1
  9. package/lib/chevre/repo/order.js +2 -4
  10. package/lib/chevre/repo/ownershipInfo.js +2 -4
  11. package/lib/chevre/repo/passport.js +1 -1
  12. package/lib/chevre/repo/pendingReservation.js +2 -35
  13. package/lib/chevre/repo/task.js +5 -7
  14. package/lib/chevre/repo/transactionNumberCounter.js +4 -6
  15. package/lib/chevre/repository.d.ts +0 -8
  16. package/lib/chevre/repository.js +0 -14
  17. package/lib/chevre/service/aggregation/event/importFromCOA.js +4 -8
  18. package/lib/chevre/service/assetTransaction/pay/start/preStart/validateAcceptedPaymentMethodIfNeeded.js +15 -23
  19. package/lib/chevre/service/event.js +4 -10
  20. package/lib/chevre/service/offer/event/importFromCOA/factory.js +0 -12
  21. package/lib/chevre/service/offer/event/importFromCOA.js +5 -16
  22. package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer/authorize.js +5 -15
  23. package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.d.ts +0 -1
  24. package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.js +1 -12
  25. package/lib/chevre/service/offer/eventServiceByCOA/authorize/validateAcceptedOffers.js +0 -15
  26. package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +2 -5
  27. package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +2 -3
  28. package/lib/chevre/service/offer/factory.js +6 -2
  29. package/lib/chevre/service/payment/movieTicket/payMovieTicket/processSeatInfoSync.js +2 -2
  30. package/lib/chevre/service/payment/movieTicket/refundMovieTicket/processSeatInfoSync.js +2 -2
  31. package/lib/chevre/service/payment/movieTicket/refundMovieTicket/processSeatInfoSyncCancel.js +1 -2
  32. package/lib/chevre/service/payment/movieTicket/refundMovieTicket.js +10 -3
  33. package/lib/chevre/service/reserveCOA/cancelReservation.js +12 -16
  34. package/lib/chevre/service/taskHandler.js +0 -1
  35. package/lib/chevre/service/transaction/placeOrder/confirm/validation.js +26 -32
  36. package/lib/chevre/service/transaction/placeOrder/confirm.js +2 -4
  37. package/lib/chevre/service/transaction/placeOrder/updateAgent.js +1 -1
  38. package/lib/chevre/service/transaction/returnOrder.js +2 -5
  39. package/package.json +2 -2
  40. package/lib/chevre/repo/place/busStop.d.ts +0 -27
  41. package/lib/chevre/repo/place/busStop.js +0 -169
@@ -127,29 +127,21 @@ const TIMEOUT = 2000;
127
127
  // isAllowed: boolean;
128
128
  // };
129
129
  async function validateByCustomUrl(params) {
130
- try {
131
- // 判定エンジンへのリクエスト
132
- const validationRequest = {
133
- eventSeriesIds: params.eventSeriesIds,
134
- paymentMethodType: params.paymentMethodType,
135
- // amount: params.amount
136
- };
137
- const res = await fetch(params.customValidationUrl, {
138
- method: 'POST',
139
- headers: { 'Content-Type': 'application/json' },
140
- body: JSON.stringify(validationRequest),
141
- // body data type must match "Content-Type" header
142
- signal: AbortSignal.timeout(TIMEOUT)
143
- });
144
- if (!res.ok) {
145
- throw new factory_1.factory.errors.Argument('paymentMethod', `paymentMethod denied by the customValidation. statusCode: ${res.status}`);
146
- }
147
- }
148
- catch (error) {
149
- // ネットワークエラーやタイムアウト時のハンドリング
150
- // サービス継続を優先するか、安全側に倒してエラーにするかはポリシー次第
151
- debug('Custom validation failed:', error.message);
152
- throw error;
130
+ // 判定エンジンへのリクエスト
131
+ const validationRequest = {
132
+ eventSeriesIds: params.eventSeriesIds,
133
+ paymentMethodType: params.paymentMethodType,
134
+ // amount: params.amount
135
+ };
136
+ const res = await fetch(params.customValidationUrl, {
137
+ method: 'POST',
138
+ headers: { 'Content-Type': 'application/json' },
139
+ body: JSON.stringify(validationRequest),
140
+ // body data type must match "Content-Type" header
141
+ signal: AbortSignal.timeout(TIMEOUT)
142
+ });
143
+ if (!res.ok) {
144
+ throw new factory_1.factory.errors.Argument('paymentMethod', `paymentMethod denied by the customValidation. statusCode: ${res.status}`);
153
145
  }
154
146
  }
155
147
  // /**
@@ -15,6 +15,7 @@ const saveScreeningEvents_1 = require("./event/saveScreeningEvents");
15
15
  Object.defineProperty(exports, "saveScreeningEvents", { enumerable: true, get: function () { return saveScreeningEvents_1.saveScreeningEvents; } });
16
16
  const saveScreeningEventSeries_1 = require("./event/saveScreeningEventSeries");
17
17
  Object.defineProperty(exports, "saveScreeningEventSeries", { enumerable: true, get: function () { return saveScreeningEventSeries_1.saveScreeningEventSeries; } });
18
+ const errorHandler_1 = require("../errorHandler");
18
19
  // const customsearch = google.customsearch('v1');
19
20
  const debug = (0, debug_1.default)('chevre-domain:service:event');
20
21
  /**
@@ -118,18 +119,11 @@ function importFromCOA(params) {
118
119
  }
119
120
  catch (error) {
120
121
  let throwsError = true;
121
- if (error.name === 'AbortError'
122
- || error.name === 'TimeoutError' // native AbortSignalの場合
123
- ) {
124
- console.error('saveScreeningEvents throwed an error', error.name, error.message);
122
+ const handledCOAError = (0, errorHandler_1.handleCOAError)(error);
123
+ if (handledCOAError instanceof factory_1.factory.errors.GatewayTimeout) {
124
+ console.error('saveScreeningEvents threw an error', handledCOAError.name, handledCOAError.message);
125
125
  throwsError = false;
126
126
  }
127
- if (error.name === 'COAServiceError') {
128
- if (error.message === 'ESOCKETTIMEDOUT') {
129
- console.error('saveScreeningEvents throwed an error', error.name, error.message);
130
- throwsError = false;
131
- }
132
- }
133
127
  if (throwsError) {
134
128
  throw error;
135
129
  }
@@ -5,17 +5,6 @@ const coa_service_1 = require("@motionpicture/coa-service");
5
5
  const util_1 = require("util");
6
6
  const factory_1 = require("../../../../factory");
7
7
  function coaTicket2offer(params) {
8
- // discontinue eligibleMonetaryAmount(2025-01-03~)
9
- // 適用通貨区分
10
- // const eligibleMonetaryAmount: [factory.offer.IEligibleMonetaryAmount] | undefined
11
- // = (typeof params.ticketResult.usePoint === 'number' && params.ticketResult.usePoint > 0
12
- // && typeof params.defaultCurrencyType?.typeOf === 'string')
13
- // ? [{
14
- // typeOf: 'MonetaryAmount',
15
- // currency: params.defaultCurrencyType.codeValue,
16
- // value: Number(params.ticketResult.usePoint)
17
- // }]
18
- // : undefined;
19
8
  // 決済カード条件へ変更(2025-01-03~)
20
9
  // 適用メンバーシップ区分
21
10
  // const eligibleMembershipType: [factory.offer.IEligibleCategoryCode] | undefined
@@ -85,7 +74,6 @@ function coaTicket2offer(params) {
85
74
  },
86
75
  priceSpecification: unitPriceSpec,
87
76
  // ...(Array.isArray(eligibleMembershipType)) ? { eligibleMembershipType } : undefined, // 決済カード条件へ変更(2025-01-03~)
88
- // ...(Array.isArray(eligibleMonetaryAmount)) ? { eligibleMonetaryAmount } : undefined, // discontinue(2025-01-03~)
89
77
  additionalProperty: [
90
78
  { name: 'theaterCode', value: params.theaterCode },
91
79
  { name: 'ticketCode', value: String(params.ticketResult.ticketCode) },
@@ -5,6 +5,7 @@ exports.importCategoryCodesFromCOA = importCategoryCodesFromCOA;
5
5
  // import type { TaskRepo } from '../../../repo/task';
6
6
  const factory_1 = require("../../../factory");
7
7
  const factory_2 = require("./importFromCOA/factory");
8
+ const errorHandler_1 = require("../../../errorHandler");
8
9
  function importFromCOA(params) {
9
10
  return async (repos) => {
10
11
  // 通貨区分検索
@@ -45,16 +46,10 @@ function importFromCOA(params) {
45
46
  }
46
47
  catch (error) {
47
48
  let throwsError = true;
48
- if (error.name === 'AbortError'
49
- || error.name === 'TimeoutError' // native AbortSignalの場合
50
- ) {
49
+ const handledCOAError = (0, errorHandler_1.handleCOAError)(error);
50
+ if (handledCOAError instanceof factory_1.factory.errors.GatewayTimeout) {
51
51
  throwsError = false;
52
52
  }
53
- if (error.name === 'COAServiceError') {
54
- if (error.message === 'ESOCKETTIMEDOUT') {
55
- throwsError = false;
56
- }
57
- }
58
53
  if (throwsError) {
59
54
  throw error;
60
55
  }
@@ -114,16 +109,10 @@ function importCategoryCodesFromCOA(params) {
114
109
  }
115
110
  catch (error) {
116
111
  let throwsError = true;
117
- if (error.name === 'AbortError'
118
- || error.name === 'TimeoutError' // native AbortSignalの場合
119
- ) {
112
+ const handledCOAError = (0, errorHandler_1.handleCOAError)(error);
113
+ if (handledCOAError instanceof factory_1.factory.errors.GatewayTimeout) {
120
114
  throwsError = false;
121
115
  }
122
- if (error.name === 'COAServiceError') {
123
- if (error.message === 'ESOCKETTIMEDOUT') {
124
- throwsError = false;
125
- }
126
- }
127
116
  if (throwsError) {
128
117
  throw error;
129
118
  }
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createAcceptedOffersWithoutDetails = createAcceptedOffersWithoutDetails;
4
4
  exports.validateOffers = validateOffers;
5
5
  const coa_service_1 = require("@motionpicture/coa-service");
6
- const http_status_1 = require("http-status");
7
6
  const errorHandler_1 = require("../../../../errorHandler");
8
7
  const factory_1 = require("../../../../factory");
8
+ const errorHandler_2 = require("../../../../errorHandler");
9
9
  function createAcceptedOffersWithoutDetails(params) {
10
10
  return async (repos) => {
11
11
  const { listSeat } = await repos.reserveService.stateReserveSeat(params.coaInfo);
@@ -98,13 +98,8 @@ function offer2availableSalesTicket(params) {
98
98
  }
99
99
  catch (error) {
100
100
  // COAサービスエラーの場合ハンドリング
101
- if (error.name === 'COAServiceError') {
102
- // COAはクライアントエラーかサーバーエラーかに関わらずステータスコード200 or 500を返却する。
103
- // 500未満であればクライアントエラーとみなす
104
- if (typeof error.code === 'number'
105
- && error.code < http_status_1.status.INTERNAL_SERVER_ERROR) {
106
- throw new factory_1.factory.errors.NotFound(`offers.${offerIndex}`, `ticketCode ${offer.ticketInfo.ticketCode} not found. ${error.message}`);
107
- }
101
+ if ((0, errorHandler_2.isCOAClientError)(error)) {
102
+ throw new factory_1.factory.errors.NotFound(`offers.${offerIndex}`, `ticketCode ${offer.ticketInfo.ticketCode} not found. ${error.message}`);
108
103
  }
109
104
  throw error;
110
105
  }
@@ -130,13 +125,8 @@ function offer2availableSalesTicket(params) {
130
125
  }
131
126
  catch (error) {
132
127
  // COAサービスエラーの場合ハンドリング
133
- if (error.name === 'COAServiceError') {
134
- // COAはクライアントエラーかサーバーエラーかに関わらずステータスコード200 or 500を返却する。
135
- // 500未満であればクライアントエラーとみなす
136
- if (typeof error.code === 'number'
137
- && error.code < http_status_1.status.INTERNAL_SERVER_ERROR) {
138
- throw new factory_1.factory.errors.NotFound(`offers.${offerIndex}`, `couponTicket ${offer.ticketInfo.ticketCode} not found. ${error.message}`);
139
- }
128
+ if ((0, errorHandler_2.isCOAClientError)(error)) {
129
+ throw new factory_1.factory.errors.NotFound(`offers.${offerIndex}`, `couponTicket ${offer.ticketInfo.ticketCode} not found. ${error.message}`);
140
130
  }
141
131
  throw error;
142
132
  }
@@ -20,7 +20,6 @@ export declare function createAuthorizeSeatReservationActionAttributes(params: {
20
20
  */
21
21
  export declare function offers2resultPrice(offers: IAcceptedOffer4COA[]): {
22
22
  price: number;
23
- eligibleMonetaryAmount: never[];
24
23
  };
25
24
  type IResultAcceptedOffer = Omit<factory.order.IAcceptedOffer, 'itemOffered'> & {
26
25
  itemOffered: factory.order.ICOAEventReservation;
@@ -59,18 +59,7 @@ function createAuthorizeSeatReservationActionAttributes(params) {
59
59
  */
60
60
  function offers2resultPrice(offers) {
61
61
  const price = offers.reduce((a, b) => a + b.price, 0);
62
- // discontinue eligibleMonetaryAmount(2025-01-03~)
63
- // const eligibleMonetaryAmount = offers.reduce<factory.offer.IEligibleMonetaryAmount[]>(
64
- // (a, b) => {
65
- // if (Array.isArray(b.eligibleMonetaryAmount)) {
66
- // return [...a, ...b.eligibleMonetaryAmount];
67
- // } else {
68
- // return a;
69
- // }
70
- // },
71
- // []
72
- // );
73
- return { price, eligibleMonetaryAmount: [] };
62
+ return { price };
74
63
  }
75
64
  /**
76
65
  * COA仮予約結果から注文アイテムを生成する
@@ -55,7 +55,6 @@ function createPriceComponent(params) {
55
55
  });
56
56
  let surfrockChargePriceSpec;
57
57
  let appliesToMovieTicket4surfrock;
58
- // let eligibleMonetaryAmount: [factory.offer.IEligibleMonetaryAmount] | undefined;
59
58
  // appliesToSurfrockの指定があれば強制的にMovieTicket決済
60
59
  const appliesToSurfrockByUnitPriceOffer = availableUnitPriceOffer.priceSpecification.appliesToMovieTicket?.at(0);
61
60
  const surfrockIdentifier = acceptedOffer.priceSpecification?.appliesToSurfrock?.identifier;
@@ -89,11 +88,6 @@ function createPriceComponent(params) {
89
88
  };
90
89
  }
91
90
  else {
92
- // discontinue eligibleMonetaryAmount(2025-01-03~)
93
- // appliesToSurfrockの指定がなければ単価オファーの適用通貨条件を強制適用
94
- // if (Array.isArray(availableUnitPriceOffer.eligibleMonetaryAmount)) {
95
- // eligibleMonetaryAmount = availableUnitPriceOffer.eligibleMonetaryAmount;
96
- // }
97
91
  if (typeof appliesToSurfrockByUnitPriceOffer?.serviceType === 'string') {
98
92
  throw new factory_1.factory.errors.ArgumentNull('priceSpecification.appliesToSurfrock');
99
93
  }
@@ -377,15 +371,6 @@ function validateAcceptedOffers(params) {
377
371
  id: availableUnitPriceOffer.id,
378
372
  identifier: availableUnitPriceOffer.identifier,
379
373
  typeOf: availableUnitPriceOffer.typeOf,
380
- // discontinue eligibleMonetaryAmount(2025-01-03~)
381
- // ...(Array.isArray(eligibleMonetaryAmount)) ? { eligibleMonetaryAmount } : undefined,
382
- // ↓互換性維持対応として
383
- ...{
384
- // discontinue(2025-01-03~)
385
- // seatNumber: itemOffered.serviceOutput?.reservedTicket?.ticketedSeat?.seatNumber,
386
- // discontinue(2025-01-03~)
387
- // seatSection: itemOffered.serviceOutput?.reservedTicket?.ticketedSeat?.seatSection
388
- }
389
374
  };
390
375
  });
391
376
  return { acceptedOffers };
@@ -97,7 +97,7 @@ function authorize(params) {
97
97
  const action = await repos.action.start(actionAttributes);
98
98
  try {
99
99
  // 座席仮予約からオファー情報を生成する
100
- const { price, eligibleMonetaryAmount } = (0, factory_1.offers2resultPrice)(acceptedOffers);
100
+ const { price } = (0, factory_1.offers2resultPrice)(acceptedOffers);
101
101
  const acceptedOffers4result = (0, factory_1.responseBody2acceptedOffers4result)({
102
102
  project: { id: transaction.project.id },
103
103
  responseBody: params.result.responseBody,
@@ -112,10 +112,7 @@ function authorize(params) {
112
112
  typeOf: factory_2.factory.offerType.AggregateOffer, // add(2024-06-18~)
113
113
  price: price,
114
114
  priceCurrency: factory_2.factory.priceCurrency.JPY,
115
- amount: eligibleMonetaryAmount
116
- // requestBody: params.result.requestBody, // discontinue(2024-06-11~)
117
- // responseBody: params.result.responseBody, // discontinue(2024-06-11~)
118
- // acceptedOffers: [] // discontinue(2024-06-17~)
115
+ amount: []
119
116
  };
120
117
  // add orderInTransaction(2024-01-15~)
121
118
  // if (params.options.useCreateOrderOnOfferAccepted) {
@@ -120,7 +120,7 @@ function changeOffers(params) {
120
120
  if (updTmpReserveSeatResult === undefined) {
121
121
  throw new factory_2.factory.errors.NotFound('afterMedia by recipe');
122
122
  }
123
- const { price, eligibleMonetaryAmount } = (0, factory_1.offers2resultPrice)(acceptedOffers);
123
+ const { price } = (0, factory_1.offers2resultPrice)(acceptedOffers);
124
124
  const acceptedOffers4result = (0, factory_1.responseBody2acceptedOffers4result)({
125
125
  project: { id: authorizeAction.project.id },
126
126
  responseBody: updTmpReserveSeatResult,
@@ -134,8 +134,7 @@ function changeOffers(params) {
134
134
  const actionResult = {
135
135
  ...authorizeAction.result,
136
136
  price: price,
137
- amount: eligibleMonetaryAmount
138
- // acceptedOffers: [] // discontinue(2024-06-17~)
137
+ amount: []
139
138
  };
140
139
  // ActiveActionStatus->CompletedActionStatusで再実装(2024-01-15~)
141
140
  await repos.action.reStart({ id: authorizeAction.id, typeOf: authorizeAction.typeOf });
@@ -122,11 +122,15 @@ function createCompoundPriceSpec4event(params) {
122
122
  priceComponent
123
123
  };
124
124
  // 必要な属性のみに限定(2023-02-24~)
125
- const { acceptedPaymentMethod, name, description, alternateName, color, typeOf, id, availability, category, eligibleMembershipType, eligibleSeatingType, eligibleMonetaryAmount, eligibleSubReservation, priceCurrency, validFrom, validThrough, validRateLimit, additionalProperty, identifier, itemOffered, offerIndex, parentOffer } = params.offer;
125
+ const { acceptedPaymentMethod, name, description, alternateName, color, typeOf, id, availability, category, eligibleMembershipType, eligibleSeatingType,
126
+ // eligibleMonetaryAmount, // discontinue(2026-04-19~)
127
+ eligibleSubReservation, priceCurrency, validFrom, validThrough, validRateLimit, additionalProperty, identifier, itemOffered, offerIndex, parentOffer } = params.offer;
126
128
  return {
127
129
  name, description, alternateName, color, typeOf, id,
128
130
  category,
129
- eligibleMembershipType, eligibleSeatingType, eligibleMonetaryAmount, eligibleSubReservation,
131
+ eligibleMembershipType, eligibleSeatingType,
132
+ // eligibleMonetaryAmount, // discontinue(2026-04-19~)
133
+ eligibleSubReservation,
130
134
  priceCurrency,
131
135
  validFrom, validThrough, validRateLimit, additionalProperty,
132
136
  identifier, itemOffered,
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.processSeatInfoSync = processSeatInfoSync;
4
+ const sdk_1 = require("@surfrock/sdk");
4
5
  const http_status_1 = require("http-status");
5
- const errorHandler_1 = require("../../../../errorHandler");
6
6
  const factory_1 = require("../factory");
7
7
  function processSeatInfoSync(params) {
8
8
  return async (repos) => {
@@ -14,7 +14,7 @@ function processSeatInfoSync(params) {
14
14
  catch (error) {
15
15
  let throwsError = true;
16
16
  // 「既に存在する興行システム座席予約番号が入力されました」の場合、着券済なのでok
17
- if (error.name === errorHandler_1.MOVIE_TICKET_RESERVE_REQUEST_ERROR_NAME) {
17
+ if (error instanceof sdk_1.Surfrock.RequestError) {
18
18
  if (error.code === http_status_1.status.BAD_REQUEST && error.message === factory_1.MovieticketReserveRequestErrorMessage.AlreadyPaid) {
19
19
  seatInfoSyncResult = error;
20
20
  throwsError = false;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.processSeatInfoSync = processSeatInfoSync;
4
+ const sdk_1 = require("@surfrock/sdk");
4
5
  const http_status_1 = require("http-status");
5
- const errorHandler_1 = require("../../../../errorHandler");
6
6
  const factory_1 = require("../../../../factory");
7
7
  const factory_2 = require("../factory");
8
8
  function processSeatInfoSync(params) {
@@ -16,7 +16,7 @@ function processSeatInfoSync(params) {
16
16
  catch (error) {
17
17
  let throwsError = true;
18
18
  // 「存在しない興行会社システム座席予約番号が入力されました」の場合、取消済なのでok
19
- if (error.name === errorHandler_1.MOVIE_TICKET_RESERVE_REQUEST_ERROR_NAME) {
19
+ if (error instanceof sdk_1.Surfrock.RequestError) {
20
20
  if (error.code === http_status_1.status.BAD_REQUEST && error.message === factory_2.MovieticketReserveRequestErrorMessage.NotFound) {
21
21
  seatInfoSyncResult = error;
22
22
  throwsError = false;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.processSeatInfoSyncCancel = processSeatInfoSyncCancel;
4
4
  const sdk_1 = require("@surfrock/sdk");
5
5
  const http_status_1 = require("http-status");
6
- const errorHandler_1 = require("../../../../errorHandler");
7
6
  function processSeatInfoSyncCancel(params) {
8
7
  return async (repos) => {
9
8
  let seatInfoSyncCancelResult;
@@ -13,7 +12,7 @@ function processSeatInfoSyncCancel(params) {
13
12
  }
14
13
  catch (error) {
15
14
  let throwsError = true;
16
- if (error.name === errorHandler_1.MOVIE_TICKET_RESERVE_REQUEST_ERROR_NAME) {
15
+ if (error instanceof sdk_1.Surfrock.RequestError) {
17
16
  const surfrockRequestError = error;
18
17
  if (surfrockRequestError.code === http_status_1.status.BAD_REQUEST) {
19
18
  const firstSoapServeError = surfrockRequestError.errors?.at(0);
@@ -123,16 +123,23 @@ function refundMovieTicket(params, options) {
123
123
  }
124
124
  }
125
125
  catch (error) {
126
- let message = String(error.message);
126
+ let message = (error instanceof Error) ? error.message : String(error);
127
127
  message += `決済ID:${paymentMethodId}`; // エラー通知先で情報を読み取りやすくするために、messageに情報付加
128
128
  try {
129
- const actionError = { ...error, message: message, name: error.name };
129
+ const actionError = {
130
+ ...(error instanceof Error) ? error : {},
131
+ message: message,
132
+ name: (error instanceof Error) ? error.name : 'UnknownError'
133
+ };
130
134
  await repos.actions.refund.giveUp({ typeOf: action.typeOf, id: action.id, error: actionError });
131
135
  }
132
136
  catch (__) {
133
137
  // 失敗したら仕方ない
134
138
  }
135
- const handledError = (0, errorHandler_1.handleMvtkReserveError)({ ...error, message: message });
139
+ const handledError = (0, errorHandler_1.handleMvtkReserveError)({
140
+ ...(error instanceof Error) ? error : {},
141
+ message: message
142
+ });
136
143
  throw handledError;
137
144
  }
138
145
  // アクションとしてはFailedだが後続処理を実行するケースに対応(2024-03-21~)
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cancelPendingReservation = cancelPendingReservation;
4
- const http_status_1 = require("http-status");
5
4
  const factory_1 = require("../../factory");
6
5
  const factory_2 = require("./factory");
6
+ const errorHandler_1 = require("../../errorHandler");
7
7
  function createCancelPendingReservationAction(params) {
8
8
  const { object, instrument, project } = params;
9
9
  return {
@@ -31,21 +31,17 @@ function cancelPendingReservation(params) {
31
31
  catch (error) {
32
32
  let deleted = false;
33
33
  // COAサービスエラーの場合ハンドリング
34
- /* istanbul ignore if */
35
- if (error.name === 'COAServiceError') {
36
- if (typeof error.code === 'number'
37
- && error.code < http_status_1.status.INTERNAL_SERVER_ERROR) {
38
- // すでに取消済の場合こうなるので、okとする
39
- if (error.message === '座席取消失敗') {
40
- recipe = (0, factory_2.processCancelPendingCOAReserveResult2recipe)({
41
- processCancelPendingCOAReserveResult: {
42
- delTmpReserveArgs,
43
- delTmpReserveResult: { ...error, message: error.message }
44
- },
45
- project: { id: params.project.id }
46
- });
47
- deleted = true;
48
- }
34
+ if ((0, errorHandler_1.isCOAClientError)(error)) {
35
+ // すでに取消済の場合こうなるので、okとする
36
+ if (error.message === '座席取消失敗') {
37
+ recipe = (0, factory_2.processCancelPendingCOAReserveResult2recipe)({
38
+ processCancelPendingCOAReserveResult: {
39
+ delTmpReserveArgs,
40
+ delTmpReserveResult: { ...error, message: error.message }
41
+ },
42
+ project: { id: params.project.id }
43
+ });
44
+ deleted = true;
49
45
  }
50
46
  }
51
47
  if (!deleted) {
@@ -100,7 +100,6 @@ function executeTask(task, next) {
100
100
  }, (typeof next === 'function') ? next : undefined);
101
101
  }
102
102
  catch (error) {
103
- debug('service.task.execute throwed an error. task:', task.name, task.id, 'error:', error?.name, error?.message);
104
103
  await (0, onOperationFailed_1.onOperationFailed)({
105
104
  task, now, error,
106
105
  ...(typeof next === 'function') ? { next } : undefined
@@ -36,38 +36,32 @@ eventReservationAcceptedOffers, payTransactions, customer) {
36
36
  debug('processing validateMovieTicket... movieTicketPaymentMethodTypes:', movieTicketPaymentMethodTypes);
37
37
  if (Array.isArray(movieTicketPaymentMethodTypes) && movieTicketPaymentMethodTypes.length > 0) {
38
38
  movieTicketPaymentMethodTypes.forEach((paymentMethodType) => {
39
- try {
40
- const authorizeMovieTicketActions = authorizePaymentActions.filter((a) => {
41
- const resultAsInvoice = (Array.isArray(a.result))
42
- // ? a.result.find(({ typeOf }) => typeOf === factory.action.authorize.paymentMethod.any.ResultType.Payment)
43
- ? a.result[0]
44
- : undefined;
45
- return resultAsInvoice?.issuedThrough.typeOf === factory_1.factory.service.paymentService.PaymentServiceType.MovieTicket
46
- // 決済方法区分は必ず存在するはず(2023-08-15~)
47
- && resultAsInvoice.paymentMethodAsObject?.typeOf === paymentMethodType;
48
- });
49
- // 決済承認アクションobject.movieTicketsではなく、payTransaction.object参照で再実装(2024-06-20~)
50
- const authorizedMovieTickets = [];
51
- // authorizeMovieTicketActions.forEach((a) => {
52
- // authorizedMovieTickets.push(...(Array.isArray(a.object.movieTickets)) ? a.object.movieTickets : []);
53
- // });
54
- // 決済承認アクションのinstrument依存をobject依存へ変更(2025-12-14~)
55
- const payTransactionNumbers = authorizeMovieTicketActions.map((authorizeAction) => authorizeAction.object.paymentMethodId);
56
- // const payTransactionNumbers = authorizeMovieTicketActions.map(({ instrument }) => instrument.transactionNumber);
57
- payTransactions.filter(({ object }) => payTransactionNumbers.includes(object.paymentMethodId))
58
- .forEach(({ object }) => {
59
- if (Array.isArray(object.paymentMethod.movieTickets)) {
60
- authorizedMovieTickets.push(...object.paymentMethod.movieTickets);
61
- }
62
- });
63
- debug(authorizedMovieTickets.length, 'movie tickets authorized', 'transaction:', transaction.id);
64
- // validateMovieTicket(paymentMethodType, { id: transaction.id }, authorizePaymentActions, eventReservationAcceptedOffers);
65
- (0, validateMovieTicket_1.validateMovieTicket)(paymentMethodType, { id: transaction.id }, authorizedMovieTickets, eventReservationAcceptedOffers);
66
- }
67
- catch (error) {
68
- debug('validateMovieTicket throwed an error. transaction:', transaction.id, 'paymentMethodType:', paymentMethodType, 'message:', error.message);
69
- throw error;
70
- }
39
+ const authorizeMovieTicketActions = authorizePaymentActions.filter((a) => {
40
+ const resultAsInvoice = (Array.isArray(a.result))
41
+ // ? a.result.find(({ typeOf }) => typeOf === factory.action.authorize.paymentMethod.any.ResultType.Payment)
42
+ ? a.result[0]
43
+ : undefined;
44
+ return resultAsInvoice?.issuedThrough.typeOf === factory_1.factory.service.paymentService.PaymentServiceType.MovieTicket
45
+ // 決済方法区分は必ず存在するはず(2023-08-15~)
46
+ && resultAsInvoice.paymentMethodAsObject?.typeOf === paymentMethodType;
47
+ });
48
+ // 決済承認アクションobject.movieTicketsではなく、payTransaction.object参照で再実装(2024-06-20~)
49
+ const authorizedMovieTickets = [];
50
+ // authorizeMovieTicketActions.forEach((a) => {
51
+ // authorizedMovieTickets.push(...(Array.isArray(a.object.movieTickets)) ? a.object.movieTickets : []);
52
+ // });
53
+ // 決済承認アクションのinstrument依存をobject依存へ変更(2025-12-14~)
54
+ const payTransactionNumbers = authorizeMovieTicketActions.map((authorizeAction) => authorizeAction.object.paymentMethodId);
55
+ // const payTransactionNumbers = authorizeMovieTicketActions.map(({ instrument }) => instrument.transactionNumber);
56
+ payTransactions.filter(({ object }) => payTransactionNumbers.includes(object.paymentMethodId))
57
+ .forEach(({ object }) => {
58
+ if (Array.isArray(object.paymentMethod.movieTickets)) {
59
+ authorizedMovieTickets.push(...object.paymentMethod.movieTickets);
60
+ }
61
+ });
62
+ debug(authorizedMovieTickets.length, 'movie tickets authorized', 'transaction:', transaction.id);
63
+ // validateMovieTicket(paymentMethodType, { id: transaction.id }, authorizePaymentActions, eventReservationAcceptedOffers);
64
+ (0, validateMovieTicket_1.validateMovieTicket)(paymentMethodType, { id: transaction.id }, authorizedMovieTickets, eventReservationAcceptedOffers);
71
65
  });
72
66
  }
73
67
  // 決済URLが発行されている場合、検証
@@ -168,12 +168,10 @@ function confirm(params, options) {
168
168
  });
169
169
  }
170
170
  catch (error) {
171
- if (await (0, errorHandler_1.isMongoError)(error)) {
171
+ if (await (0, errorHandler_1.isMongoDuplicateError)(error)) {
172
172
  // 万が一同一注文番号で確定しようとすると、MongoDBでE11000 duplicate key errorが発生する
173
173
  // message: 'E11000 duplicate key error collection: prodttts.transactions index:result.order.orderNumber_1 dup key:...',
174
- if (error.code === errorHandler_1.MongoErrorCode.DuplicateKey) {
175
- throw new factory_1.factory.errors.AlreadyInUse('transaction', ['result.order.orderNumber']);
176
- }
174
+ throw new factory_1.factory.errors.AlreadyInUse('transaction', ['result.order.orderNumber']);
177
175
  }
178
176
  throw error;
179
177
  }
@@ -18,7 +18,7 @@ function fixCustomer(params) {
18
18
  formattedTelephone = phoneUtil.format(phoneNumber, google_libphonenumber_1.PhoneNumberFormat.E164);
19
19
  }
20
20
  catch (error) {
21
- throw new factory_1.factory.errors.Argument('telephone', error.message);
21
+ throw new factory_1.factory.errors.Argument('telephone', (error instanceof Error) ? error.message : String(error));
22
22
  }
23
23
  const transaction = await repos.placeOrder.findPlaceOrderInProgressById({
24
24
  typeOf: params.typeOf,
@@ -40,12 +40,9 @@ function start(params) {
40
40
  returnOrderTransaction = await repos.returnOrder.startReturnOrder(returnOrderAttributes);
41
41
  }
42
42
  catch (error) {
43
- if (await (0, errorHandler_1.isMongoError)(error)) {
43
+ if (await (0, errorHandler_1.isMongoDuplicateError)(error)) {
44
44
  // 同一取引に対して返品取引を作成しようとすると、MongoDBでE11000 duplicate key errorが発生する
45
- /* istanbul ignore else */
46
- if (error.code === errorHandler_1.MongoErrorCode.DuplicateKey) {
47
- throw new factory_1.factory.errors.Argument('orderNumber', 'Already returned');
48
- }
45
+ throw new factory_1.factory.errors.Argument('orderNumber', 'Already returned');
49
46
  }
50
47
  throw error;
51
48
  }
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-cognito-identity-provider": "3.600.0",
13
13
  "@aws-sdk/credential-providers": "3.600.0",
14
- "@chevre/factory": "8.0.0-alpha.2",
14
+ "@chevre/factory": "8.0.0-alpha.3",
15
15
  "@motionpicture/coa-service": "10.0.0",
16
16
  "@motionpicture/gmo-service": "6.0.0",
17
17
  "@sendgrid/client": "8.1.4",
@@ -91,5 +91,5 @@
91
91
  "postversion": "git push origin --tags",
92
92
  "prepublishOnly": "npm run clean && npm run build"
93
93
  },
94
- "version": "24.0.0-alpha.80"
94
+ "version": "24.0.0-alpha.81"
95
95
  }
@@ -1,27 +0,0 @@
1
- import type { Connection, FilterQuery } from 'mongoose';
2
- import { factory } from '../../factory';
3
- /**
4
- * ターミナルリポジトリ
5
- */
6
- export declare class BusStopRepo {
7
- private readonly civicStructureModel;
8
- constructor(connection: Connection);
9
- static CREATE_BUS_STOP_MONGO_CONDITIONS(params: factory.place.busStop.ISearchConditions): FilterQuery<import("@chevre/factory/lib/chevre/place/busStop").IPlace>[];
10
- saveBusStop(params: factory.place.busStop.IPlace): Promise<factory.place.busStop.IPlace>;
11
- findBusStopByBranchCode(params: {
12
- project: {
13
- id: string;
14
- };
15
- branchCode: string;
16
- }): Promise<factory.place.movieTheater.IPlace>;
17
- searchBusStops(params: factory.place.busStop.ISearchConditions): Promise<factory.place.busStop.IPlace[]>;
18
- findBusStopById(params: {
19
- id: string;
20
- }, projection?: any): Promise<factory.place.busStop.IPlace>;
21
- deleteBusStopById(params: {
22
- project: {
23
- id: string;
24
- };
25
- id: string;
26
- }): Promise<void>;
27
- }