@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.
- package/lib/chevre/errorHandler.d.ts +5 -0
- package/lib/chevre/errorHandler.js +26 -4
- package/lib/chevre/repo/accountingReport.js +2 -25
- package/lib/chevre/repo/aggregateOffer.js +11 -36
- package/lib/chevre/repo/event.js +2 -37
- package/lib/chevre/repo/eventSeries.js +0 -144
- package/lib/chevre/repo/message.js +1 -3
- package/lib/chevre/repo/offer/unitPriceInCatalog.js +1 -1
- package/lib/chevre/repo/order.js +2 -4
- package/lib/chevre/repo/ownershipInfo.js +2 -4
- package/lib/chevre/repo/passport.js +1 -1
- package/lib/chevre/repo/pendingReservation.js +2 -35
- package/lib/chevre/repo/task.js +5 -7
- package/lib/chevre/repo/transactionNumberCounter.js +4 -6
- package/lib/chevre/repository.d.ts +0 -8
- package/lib/chevre/repository.js +0 -14
- package/lib/chevre/service/aggregation/event/importFromCOA.js +4 -8
- package/lib/chevre/service/assetTransaction/pay/start/preStart/validateAcceptedPaymentMethodIfNeeded.js +15 -23
- package/lib/chevre/service/event.js +4 -10
- package/lib/chevre/service/offer/event/importFromCOA/factory.js +0 -12
- package/lib/chevre/service/offer/event/importFromCOA.js +5 -16
- package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer/authorize.js +5 -15
- package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.d.ts +0 -1
- package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.js +1 -12
- package/lib/chevre/service/offer/eventServiceByCOA/authorize/validateAcceptedOffers.js +0 -15
- package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +2 -5
- package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +2 -3
- package/lib/chevre/service/offer/factory.js +6 -2
- package/lib/chevre/service/payment/movieTicket/payMovieTicket/processSeatInfoSync.js +2 -2
- package/lib/chevre/service/payment/movieTicket/refundMovieTicket/processSeatInfoSync.js +2 -2
- package/lib/chevre/service/payment/movieTicket/refundMovieTicket/processSeatInfoSyncCancel.js +1 -2
- package/lib/chevre/service/payment/movieTicket/refundMovieTicket.js +10 -3
- package/lib/chevre/service/reserveCOA/cancelReservation.js +12 -16
- package/lib/chevre/service/taskHandler.js +0 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/validation.js +26 -32
- package/lib/chevre/service/transaction/placeOrder/confirm.js +2 -4
- package/lib/chevre/service/transaction/placeOrder/updateAgent.js +1 -1
- package/lib/chevre/service/transaction/returnOrder.js +2 -5
- package/package.json +2 -2
- package/lib/chevre/repo/place/busStop.d.ts +0 -27
- 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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
122
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
118
|
-
|
|
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 (
|
|
102
|
-
|
|
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 (
|
|
134
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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;
|
package/lib/chevre/service/payment/movieTicket/refundMovieTicket/processSeatInfoSyncCancel.js
CHANGED
|
@@ -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
|
|
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 =
|
|
126
|
+
let message = (error instanceof Error) ? error.message : String(error);
|
|
127
127
|
message += `決済ID:${paymentMethodId}`; // エラー通知先で情報を読み取りやすくするために、messageに情報付加
|
|
128
128
|
try {
|
|
129
|
-
const actionError = {
|
|
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)({
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
43
|
+
if (await (0, errorHandler_1.isMongoDuplicateError)(error)) {
|
|
44
44
|
// 同一取引に対して返品取引を作成しようとすると、MongoDBでE11000 duplicate key errorが発生する
|
|
45
|
-
|
|
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.
|
|
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.
|
|
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
|
-
}
|