@chevre/domain 24.1.0-alpha.32 → 24.1.0-alpha.34
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/repo/acceptedOffer.d.ts +3 -3
- package/lib/chevre/repo/acceptedOffer.js +17 -24
- package/lib/chevre/repo/acceptedOfferInReserve.d.ts +3 -1
- package/lib/chevre/repo/acceptedOfferInReserve.js +12 -6
- package/lib/chevre/repo/mongoose/schemas/setting.d.ts +10 -8
- package/lib/chevre/repo/orderInTransaction.d.ts +7 -9
- package/lib/chevre/repo/orderInTransaction.js +28 -16
- package/lib/chevre/service/offer/any.d.ts +2 -2
- package/lib/chevre/service/offer/event/authorize/factory.d.ts +1 -1
- package/lib/chevre/service/offer/event/authorize/factory.js +9 -8
- package/lib/chevre/service/offer/event/authorize.d.ts +3 -4
- package/lib/chevre/service/offer/event/authorize.js +26 -9
- package/lib/chevre/service/order/deleteOrder.js +3 -1
- package/lib/chevre/service/order/placeOrder/createPlacingOrderFromExistingTransaction.js +4 -1
- package/lib/chevre/service/order/sendOrder.js +3 -1
- package/lib/chevre/service/payment/creditCard/authorize.js +4 -3
- package/lib/chevre/service/reserve/findByCode.js +3 -1
- package/lib/chevre/service/reserve/searchByOrder.js +3 -1
- package/lib/chevre/service/task/acceptCOAOffer.js +3 -2
- package/lib/chevre/service/task/confirmReserveTransaction.js +3 -1
- package/lib/chevre/service/task/payment/payByTask.js +3 -1
- package/lib/chevre/service/transaction/returnOrder/preStart.js +3 -1
- package/lib/chevre/service/validation/validateOrder.js +3 -1
- package/package.json +1 -1
|
@@ -19,7 +19,7 @@ export declare class AcceptedOfferRepo extends AcceptedOfferInReserveRepo {
|
|
|
19
19
|
* オファー展開の注文検索
|
|
20
20
|
*/
|
|
21
21
|
searchWithUnwoundAcceptedOffers(params: factory.order.ISearchConditions, projection: IProjection4searchWithUnwoundAcceptedOffers, options: {
|
|
22
|
-
|
|
22
|
+
useItemOfferedByReserve: boolean;
|
|
23
23
|
}): Promise<(factory.order.IOrder & {
|
|
24
24
|
acceptedOffers: [IAcceptedOffer];
|
|
25
25
|
_id?: never;
|
|
@@ -68,7 +68,7 @@ export declare class AcceptedOfferRepo extends AcceptedOfferInReserveRepo {
|
|
|
68
68
|
};
|
|
69
69
|
};
|
|
70
70
|
}, options: {
|
|
71
|
-
|
|
71
|
+
useItemOfferedByReserve: boolean;
|
|
72
72
|
}): Promise<IAcceptedOffer[]>;
|
|
73
73
|
/**
|
|
74
74
|
* 注文オファーをsliceして検索する(2024-01-10~)
|
|
@@ -84,7 +84,7 @@ export declare class AcceptedOfferRepo extends AcceptedOfferInReserveRepo {
|
|
|
84
84
|
};
|
|
85
85
|
};
|
|
86
86
|
}, options: {
|
|
87
|
-
|
|
87
|
+
useItemOfferedByReserve: boolean;
|
|
88
88
|
}): Promise<ISearchSlicedAcceptedOffersResult>;
|
|
89
89
|
countByOrderNumber(filter: {
|
|
90
90
|
orderNumber: {
|
|
@@ -53,8 +53,8 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
53
53
|
.exec();
|
|
54
54
|
// 予約取引を参照(2026-05-17~)
|
|
55
55
|
const offeredThroughIdentifier = orders.at(0)?.acceptedOffers[0].offeredThrough?.identifier;
|
|
56
|
-
const useReserveTransaction =
|
|
57
|
-
|
|
56
|
+
const useReserveTransaction = offeredThroughIdentifier !== factory_1.factory.service.webAPI.Identifier.COA; // COAでは予約取引を参照しない
|
|
57
|
+
const { useItemOfferedByReserve } = options;
|
|
58
58
|
if (useReserveTransaction) {
|
|
59
59
|
const reservationNumbers = [...new Set(orders.map((order) => String(order.acceptedOffers[0].serialNumber)))];
|
|
60
60
|
let acceptedOffersByReserveTransaction = [];
|
|
@@ -73,17 +73,22 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
73
73
|
if (priceSpecByReserveTransaction === undefined) {
|
|
74
74
|
console.error('repo:acceptedOffer: searchWithUnwoundAcceptedOffers: priceSpecByReserveTransaction: undefined!!!', acceptedOffer.itemOffered.id);
|
|
75
75
|
}
|
|
76
|
+
const itemOfferedByReserve = acceptedOfferByReserveTransaction?.itemOffered;
|
|
77
|
+
// itemOfferedByReserveは必ず存在するはず
|
|
78
|
+
if (itemOfferedByReserve === undefined) {
|
|
79
|
+
console.error('repo:acceptedOffer: searchWithUnwoundAcceptedOffers: itemOfferedByReserve: undefined!!!', acceptedOffer.itemOffered.id);
|
|
80
|
+
}
|
|
76
81
|
const { priceSpecification: _originalPriceSpec, // 注文ドキュメントのpriceSpecificationはもう採用しない(2026-05-21~)
|
|
77
|
-
...acceptedOfferWithoutPrice } = acceptedOffer;
|
|
82
|
+
itemOffered, ...acceptedOfferWithoutPrice } = acceptedOffer;
|
|
78
83
|
return {
|
|
79
84
|
...order,
|
|
80
85
|
acceptedOffers: [
|
|
81
86
|
{
|
|
82
87
|
...acceptedOfferWithoutPrice,
|
|
83
|
-
...((priceSpecByReserveTransaction !== undefined) && { priceSpecification: priceSpecByReserveTransaction }) // 予約取引参照の値で上書き
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
...((priceSpecByReserveTransaction !== undefined) && { priceSpecification: priceSpecByReserveTransaction }), // 予約取引参照の値で上書き
|
|
89
|
+
...(useItemOfferedByReserve && itemOfferedByReserve !== undefined)
|
|
90
|
+
? { itemOffered: itemOfferedByReserve } // 予約取引参照の値で上書き(2026-05-25~)
|
|
91
|
+
: { itemOffered }
|
|
87
92
|
}
|
|
88
93
|
]
|
|
89
94
|
};
|
|
@@ -220,13 +225,7 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
220
225
|
.option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
|
|
221
226
|
.exec();
|
|
222
227
|
// 予約取引を参照(2026-05-18~)
|
|
223
|
-
|
|
224
|
-
if (useReserveTransaction) {
|
|
225
|
-
return this.addAcceptedOffersDetails(acceptedOffers);
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
return acceptedOffers;
|
|
229
|
-
}
|
|
228
|
+
return this.addAcceptedOffersDetails(acceptedOffers, options);
|
|
230
229
|
}
|
|
231
230
|
/**
|
|
232
231
|
* 注文オファーをsliceして検索する(2024-01-10~)
|
|
@@ -252,16 +251,10 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
252
251
|
}
|
|
253
252
|
const { acceptedOffers, numAcceptedOffers } = result;
|
|
254
253
|
// 予約取引を参照(2026-05-18~)
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
numAcceptedOffers
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
return result;
|
|
264
|
-
}
|
|
254
|
+
return {
|
|
255
|
+
acceptedOffers: await this.addAcceptedOffersDetails(acceptedOffers, options),
|
|
256
|
+
numAcceptedOffers
|
|
257
|
+
};
|
|
265
258
|
}
|
|
266
259
|
async countByOrderNumber(filter) {
|
|
267
260
|
const aggregate = this.orderModel.aggregate([
|
|
@@ -26,5 +26,7 @@ export declare class AcceptedOfferInReserveRepo {
|
|
|
26
26
|
/**
|
|
27
27
|
* 予約取引からオファー詳細情報を付加する
|
|
28
28
|
*/
|
|
29
|
-
protected addAcceptedOffersDetails(acceptedOffers: IAcceptedOffer[]
|
|
29
|
+
protected addAcceptedOffersDetails(acceptedOffers: IAcceptedOffer[], options: {
|
|
30
|
+
useItemOfferedByReserve: boolean;
|
|
31
|
+
}): Promise<IAcceptedOffer[]>;
|
|
30
32
|
}
|
|
@@ -41,7 +41,7 @@ class AcceptedOfferInReserveRepo {
|
|
|
41
41
|
/**
|
|
42
42
|
* 予約取引からオファー詳細情報を付加する
|
|
43
43
|
*/
|
|
44
|
-
async addAcceptedOffersDetails(acceptedOffers) {
|
|
44
|
+
async addAcceptedOffersDetails(acceptedOffers, options) {
|
|
45
45
|
const offeredThroughIdentifier = acceptedOffers.at(0)?.offeredThrough?.identifier;
|
|
46
46
|
if (offeredThroughIdentifier === factory_1.factory.service.webAPI.Identifier.COA) {
|
|
47
47
|
// COAでは予約取引を参照しない
|
|
@@ -52,6 +52,7 @@ class AcceptedOfferInReserveRepo {
|
|
|
52
52
|
if (reservationNumbers.length > 0) {
|
|
53
53
|
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers });
|
|
54
54
|
}
|
|
55
|
+
const { useItemOfferedByReserve } = options;
|
|
55
56
|
return acceptedOffers.map((acceptedOffer) => {
|
|
56
57
|
const acceptedOfferByReserveTransaction = acceptedOffersByReserveTransaction.find(((offer) => offer.itemOffered.id === acceptedOffer.itemOffered.id));
|
|
57
58
|
// 予約は必ず存在するはず
|
|
@@ -63,14 +64,19 @@ class AcceptedOfferInReserveRepo {
|
|
|
63
64
|
if (priceSpecByReserveTransaction === undefined) {
|
|
64
65
|
console.error('repo:acceptedOffer: addAcceptedOffersDetails: priceSpecByReserveTransaction: undefined!!!', acceptedOffer.itemOffered.id);
|
|
65
66
|
}
|
|
67
|
+
const itemOfferedByReserve = acceptedOfferByReserveTransaction?.itemOffered;
|
|
68
|
+
// itemOfferedByReserveは必ず存在するはず
|
|
69
|
+
if (itemOfferedByReserve === undefined) {
|
|
70
|
+
console.error('repo:acceptedOffer: addAcceptedOffersDetails: itemOfferedByReserve: undefined!!!', acceptedOffer.itemOffered.id);
|
|
71
|
+
}
|
|
66
72
|
const { priceSpecification: _originalPriceSpec, // 注文ドキュメントのpriceSpecificationはもう採用しない(2026-05-21~)
|
|
67
|
-
...acceptedOfferWithoutPrice } = acceptedOffer;
|
|
73
|
+
itemOffered, ...acceptedOfferWithoutPrice } = acceptedOffer;
|
|
68
74
|
return {
|
|
69
75
|
...acceptedOfferWithoutPrice,
|
|
70
|
-
...((priceSpecByReserveTransaction !== undefined) && { priceSpecification: priceSpecByReserveTransaction }) // 予約取引参照の値で上書き
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
...((priceSpecByReserveTransaction !== undefined) && { priceSpecification: priceSpecByReserveTransaction }), // 予約取引参照の値で上書き
|
|
77
|
+
...(useItemOfferedByReserve && itemOfferedByReserve !== undefined)
|
|
78
|
+
? { itemOffered: itemOfferedByReserve } // 予約取引参照の値で上書き
|
|
79
|
+
: { itemOffered }
|
|
74
80
|
};
|
|
75
81
|
});
|
|
76
82
|
}
|
|
@@ -147,6 +147,14 @@ export interface IServiceOutputIdentifierSetting {
|
|
|
147
147
|
*/
|
|
148
148
|
version: string;
|
|
149
149
|
}
|
|
150
|
+
interface ICOAIntegrationSettings {
|
|
151
|
+
timeoutReserve: number;
|
|
152
|
+
timeoutMaster: number;
|
|
153
|
+
}
|
|
154
|
+
interface IGMOIntegrationSettings {
|
|
155
|
+
timeout: number;
|
|
156
|
+
timeoutBackground: number;
|
|
157
|
+
}
|
|
150
158
|
interface ISurfrockSettings {
|
|
151
159
|
/**
|
|
152
160
|
* 着券時タイムアウト
|
|
@@ -174,14 +182,8 @@ export interface IIntegrationSettings {
|
|
|
174
182
|
abortedTasksWithoutReport: string[];
|
|
175
183
|
numTryConfirmReserveTransaction: number;
|
|
176
184
|
deliverOrderLimit: number;
|
|
177
|
-
coa:
|
|
178
|
-
|
|
179
|
-
timeoutMaster: number;
|
|
180
|
-
};
|
|
181
|
-
gmo: {
|
|
182
|
-
timeout: number;
|
|
183
|
-
timeoutBackground: number;
|
|
184
|
-
};
|
|
185
|
+
coa: ICOAIntegrationSettings;
|
|
186
|
+
gmo: IGMOIntegrationSettings;
|
|
185
187
|
movieticketReserve: ISurfrockSettings;
|
|
186
188
|
useExperimentalFeature: boolean;
|
|
187
189
|
}
|
|
@@ -26,6 +26,12 @@ export type IPlacingOrder = Pick<factory.order.IOrder, 'broker' | 'confirmationN
|
|
|
26
26
|
*/
|
|
27
27
|
customer?: never;
|
|
28
28
|
};
|
|
29
|
+
export type IMinimizedItemOffered = Pick<factory.order.IEventReservation, 'id' | 'reservationFor' | 'reservationNumber' | 'typeOf'> & {
|
|
30
|
+
reservedTicket: Pick<factory.order.IReservedTicket, 'identifier' | 'ticketedSeat' | 'typeOf'>;
|
|
31
|
+
};
|
|
32
|
+
export type IMinimizedAcceptedOffer = Pick<factory.order.IOptimizedAcceptedOffer, 'id' | 'name' | 'offeredThrough' | 'priceSpecification' | 'serialNumber' | 'typeOf'> & {
|
|
33
|
+
itemOffered: IMinimizedItemOffered;
|
|
34
|
+
};
|
|
29
35
|
/**
|
|
30
36
|
* 取引中注文リポジトリ
|
|
31
37
|
*/
|
|
@@ -44,14 +50,6 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
44
50
|
}): Promise<(Omit<factory.order.IAcceptedOffer, 'priceSpecification'> & {
|
|
45
51
|
priceSpecification?: factory.order.ITicketPriceSpecification;
|
|
46
52
|
})[]>;
|
|
47
|
-
/**
|
|
48
|
-
* 取引進行中の注文からacceptedOffersを検索する
|
|
49
|
-
*/
|
|
50
|
-
findAcceptedOffersByOrderNumber(params: {
|
|
51
|
-
orderNumber: {
|
|
52
|
-
$eq: string;
|
|
53
|
-
};
|
|
54
|
-
}): Promise<Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>[]>;
|
|
55
53
|
/**
|
|
56
54
|
* 注文を受注する
|
|
57
55
|
* typeOf: PlaceOrder -> typeOf: Order
|
|
@@ -62,7 +60,7 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
62
60
|
* このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
|
|
63
61
|
*/
|
|
64
62
|
acceptOffer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project'> & {
|
|
65
|
-
acceptedOffers: (Omit<IAcceptedOffer, 'priceSpecification'> & {
|
|
63
|
+
acceptedOffers: IMinimizedAcceptedOffer[] | (Omit<IAcceptedOffer, 'priceSpecification'> & {
|
|
66
64
|
/**
|
|
67
65
|
* COA以外では注文ドキュメントにpriceSpecificationが存在しないのでIFを補完
|
|
68
66
|
*/
|
|
@@ -41,32 +41,44 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
41
41
|
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers });
|
|
42
42
|
}
|
|
43
43
|
return doc.acceptedOffers.map((acceptedOffer) => {
|
|
44
|
-
const
|
|
44
|
+
const acceptedOfferByReserve = acceptedOffersByReserveTransaction.find((acceptedOfferByReserveTransaction) => acceptedOfferByReserveTransaction.itemOffered.id === acceptedOffer.itemOffered.id);
|
|
45
|
+
const priceSpecification = acceptedOfferByReserve?.priceSpecification;
|
|
45
46
|
// COA予約でなければ、予約取引の価格は必ず存在するはず(2026-05-20~)
|
|
46
47
|
if (priceSpecification === undefined) {
|
|
47
48
|
throw new factory_1.factory.errors.Internal(`findAcceptedOffersWithPriceByOrderNumber: priceSpecification undefined. ${acceptedOffer.itemOffered.id}`);
|
|
48
49
|
}
|
|
50
|
+
const itemOffered = acceptedOfferByReserve?.itemOffered;
|
|
51
|
+
// COA予約でなければ、予約取引のitemOfferedは必ず存在するはず(2026-05-25~)
|
|
52
|
+
if (itemOffered === undefined) {
|
|
53
|
+
throw new factory_1.factory.errors.Internal(`findAcceptedOffersWithPriceByOrderNumber: itemOffered undefined. ${acceptedOffer.itemOffered.id}`);
|
|
54
|
+
}
|
|
49
55
|
return {
|
|
50
56
|
...acceptedOffer,
|
|
57
|
+
itemOffered,
|
|
51
58
|
priceSpecification
|
|
52
59
|
};
|
|
53
60
|
});
|
|
54
61
|
}
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
async findAcceptedOffersByOrderNumber(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
62
|
+
// /**
|
|
63
|
+
// * 取引進行中の注文からacceptedOffersを検索する
|
|
64
|
+
// */
|
|
65
|
+
// public async findAcceptedOffersByOrderNumber(
|
|
66
|
+
// params: { orderNumber: { $eq: string } }
|
|
67
|
+
// ): Promise<Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>[]> {
|
|
68
|
+
// const doc = await this.orderModel.findOne<HydratedDocument<Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>>>(
|
|
69
|
+
// {
|
|
70
|
+
// orderNumber: { $eq: params.orderNumber.$eq },
|
|
71
|
+
// typeOf: { $eq: factory.transactionType.PlaceOrder }
|
|
72
|
+
// },
|
|
73
|
+
// { acceptedOffers: 1 }
|
|
74
|
+
// )
|
|
75
|
+
// .lean<Pick<IOrderInTransaction, 'acceptedOffers'>>()
|
|
76
|
+
// .exec();
|
|
77
|
+
// if (doc === null) {
|
|
78
|
+
// throw new factory.errors.NotFound('orderInTransaction');
|
|
79
|
+
// }
|
|
80
|
+
// return doc.acceptedOffers;
|
|
81
|
+
// }
|
|
70
82
|
/**
|
|
71
83
|
* 注文を受注する
|
|
72
84
|
* typeOf: PlaceOrder -> typeOf: Order
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { factory } from '../../factory';
|
|
2
|
-
import type { OrderInTransactionRepo } from '../../repo/orderInTransaction';
|
|
2
|
+
import type { IMinimizedAcceptedOffer, OrderInTransactionRepo } from '../../repo/orderInTransaction';
|
|
3
3
|
interface IAcceptOfferOperationRepos {
|
|
4
4
|
orderInTransaction: OrderInTransactionRepo;
|
|
5
5
|
}
|
|
@@ -10,7 +10,7 @@ export declare function acceptOffer(params: {
|
|
|
10
10
|
project: {
|
|
11
11
|
id: string;
|
|
12
12
|
};
|
|
13
|
-
acceptedOffers: (Omit<factory.order.IAcceptedOffer, 'priceSpecification'> & {
|
|
13
|
+
acceptedOffers: IMinimizedAcceptedOffer[] | (Omit<factory.order.IAcceptedOffer, 'priceSpecification'> & {
|
|
14
14
|
/**
|
|
15
15
|
* COA以外では注文ドキュメントにpriceSpecificationが存在しないのでIFを補完
|
|
16
16
|
*/
|
|
@@ -32,7 +32,7 @@ declare function acceptedOffers2authorizeResult(params: {
|
|
|
32
32
|
ticketOffers: factory.product.ITicketOffer[];
|
|
33
33
|
}): factory.action.authorize.offer.eventService.IResult;
|
|
34
34
|
type IObjectSubReservation = factory.assetTransaction.reserve.IObjectSubReservation;
|
|
35
|
-
export type IResultAcceptedOffer = Omit<factory.order.
|
|
35
|
+
export type IResultAcceptedOffer = Omit<factory.order.IOptimizedAcceptedOffer, 'priceSpecification'> & {
|
|
36
36
|
itemOffered: factory.order.IEventReservation;
|
|
37
37
|
offeredThrough: factory.offer.IOfferedThrough;
|
|
38
38
|
serialNumber: string;
|
|
@@ -305,16 +305,17 @@ function createReservation(params) {
|
|
|
305
305
|
const { itemOffered } = params;
|
|
306
306
|
const event = params.reservationFor;
|
|
307
307
|
let reservationItem;
|
|
308
|
+
const ticketType = {
|
|
309
|
+
typeOf: itemOffered.reservedTicket.ticketType.typeOf,
|
|
310
|
+
id: itemOffered.reservedTicket.ticketType.id,
|
|
311
|
+
identifier: itemOffered.reservedTicket.ticketType.identifier,
|
|
312
|
+
name: itemOffered.reservedTicket.ticketType.name,
|
|
313
|
+
description: itemOffered.reservedTicket.ticketType.description,
|
|
314
|
+
...((Array.isArray(itemOffered.reservedTicket.ticketType.additionalProperty)) && { additionalProperty: itemOffered.reservedTicket.ticketType.additionalProperty })
|
|
315
|
+
};
|
|
308
316
|
const reservedTicket = {
|
|
309
317
|
typeOf: itemOffered.reservedTicket.typeOf,
|
|
310
|
-
ticketType
|
|
311
|
-
typeOf: itemOffered.reservedTicket.ticketType.typeOf,
|
|
312
|
-
id: itemOffered.reservedTicket.ticketType.id,
|
|
313
|
-
identifier: itemOffered.reservedTicket.ticketType.identifier,
|
|
314
|
-
name: itemOffered.reservedTicket.ticketType.name,
|
|
315
|
-
description: itemOffered.reservedTicket.ticketType.description,
|
|
316
|
-
additionalProperty: itemOffered.reservedTicket.ticketType.additionalProperty
|
|
317
|
-
},
|
|
318
|
+
ticketType,
|
|
318
319
|
...(typeof itemOffered.reservedTicket.identifier === 'string')
|
|
319
320
|
? { identifier: itemOffered.reservedTicket.identifier }
|
|
320
321
|
: undefined, // チケット識別子追加(2024-04-15~)
|
|
@@ -68,11 +68,10 @@ interface IAuthorizeOptions {
|
|
|
68
68
|
*/
|
|
69
69
|
maxReservationGracePeriodInDays: number;
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* 2026-005-19~
|
|
71
|
+
* acceptedOfferのitemOfferedを最小化するかどうか
|
|
72
|
+
* 2026-05-25~
|
|
74
73
|
*/
|
|
75
|
-
|
|
74
|
+
useAcceptedOfferItemOfferedMinimized?: boolean;
|
|
76
75
|
}
|
|
77
76
|
/**
|
|
78
77
|
* 興行オファー承認
|
|
@@ -56,21 +56,20 @@ function authorize(params, options) {
|
|
|
56
56
|
...(typeof params.object.broker?.typeOf === 'string') ? { broker: params.object.broker } : undefined
|
|
57
57
|
}, options)(repos, settings);
|
|
58
58
|
acceptedOffers4result = processStartReserveResult.acceptedOffers4result;
|
|
59
|
-
// add orderInTransaction(2024-01-15~)
|
|
60
59
|
if (!noOfferSpecified) {
|
|
61
|
-
const
|
|
60
|
+
const useAcceptedOfferItemOfferedMinimized = options.useAcceptedOfferItemOfferedMinimized === true;
|
|
62
61
|
await (0, any_1.acceptOffer)({
|
|
63
62
|
orderNumber,
|
|
64
63
|
project: transaction.project,
|
|
65
64
|
acceptedOffers: acceptedOffers4result.map((acceptOffer4result) => {
|
|
66
65
|
// support useAcceptedOfferNoPriceSpec(2026-05-19~)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
66
|
+
const { priceSpecification: _priceSpecification, itemOffered, ...acceptOfferNoPriceSpec } = acceptOffer4result;
|
|
67
|
+
return {
|
|
68
|
+
...acceptOfferNoPriceSpec,
|
|
69
|
+
itemOffered: (useAcceptedOfferItemOfferedMinimized) // support useAcceptedOfferItemOfferedMinimized(2026-05-25~)
|
|
70
|
+
? minimizeItemOffered(itemOffered)
|
|
71
|
+
: itemOffered
|
|
72
|
+
};
|
|
74
73
|
})
|
|
75
74
|
})(repos);
|
|
76
75
|
}
|
|
@@ -89,6 +88,24 @@ function authorize(params, options) {
|
|
|
89
88
|
return { id: action.id, result };
|
|
90
89
|
};
|
|
91
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* 注文ドキュメントに保管するitemOfferedを最小化する
|
|
93
|
+
* 2026-05-25~
|
|
94
|
+
*/
|
|
95
|
+
function minimizeItemOffered(itemOffered) {
|
|
96
|
+
const { id, reservationNumber, typeOf, reservationFor, reservedTicket } = itemOffered;
|
|
97
|
+
return {
|
|
98
|
+
id,
|
|
99
|
+
reservationNumber,
|
|
100
|
+
typeOf,
|
|
101
|
+
reservationFor,
|
|
102
|
+
reservedTicket: {
|
|
103
|
+
typeOf: reservedTicket.typeOf,
|
|
104
|
+
...((typeof reservedTicket.ticketedSeat?.typeOf === 'string') && { ticketedSeat: reservedTicket.ticketedSeat }),
|
|
105
|
+
...((typeof reservedTicket.identifier === 'string') && { identifier: reservedTicket.identifier })
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
92
109
|
function validateCreateRequest(params) {
|
|
93
110
|
return async (repos) => {
|
|
94
111
|
const transaction = await repos.placeOrder.findPlaceOrderInProgressById({
|
|
@@ -96,7 +96,9 @@ function deleteReservationsByOrder(order) {
|
|
|
96
96
|
acceptedOffers: {
|
|
97
97
|
// itemOffered: { typeOf: { $in: [factory.reservationType.EventReservation] } }
|
|
98
98
|
}
|
|
99
|
-
}, {
|
|
99
|
+
}, {
|
|
100
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
101
|
+
} // 予約取引参照(2026-05-18~)
|
|
100
102
|
);
|
|
101
103
|
const reservationIds = acceptedOffers.map((o) => String(o.itemOffered.id));
|
|
102
104
|
if (reservationIds.length > 0) {
|
|
@@ -80,7 +80,10 @@ function createPlacingOrderFromExistingTransaction(params) {
|
|
|
80
80
|
.map(({ instrument }) => String(instrument.transactionNumber));
|
|
81
81
|
try {
|
|
82
82
|
// すでにtypeOf: Orderに変更済の場合acceptedOffersは空になるが、そもそもorderedItemはその後上書きされないので、空のまま処理して問題なし
|
|
83
|
-
acceptedOffers = (await repos.orderInTransaction.
|
|
83
|
+
acceptedOffers = (await repos.orderInTransaction.findAcceptedOffersWithPriceByOrderNumber({
|
|
84
|
+
orderNumber,
|
|
85
|
+
project: { id: params.project.id }
|
|
86
|
+
}))
|
|
84
87
|
.filter(({ serialNumber }) => typeof serialNumber === 'string' && serialNumbers.includes(serialNumber));
|
|
85
88
|
}
|
|
86
89
|
catch (error) {
|
|
@@ -101,7 +101,9 @@ function sendOrder(params) {
|
|
|
101
101
|
$slice: [offerIndexBase, limit],
|
|
102
102
|
orderNumber: { $eq: order.orderNumber },
|
|
103
103
|
project: { id: { $eq: order.project.id } }
|
|
104
|
-
}, {
|
|
104
|
+
}, {
|
|
105
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
106
|
+
} // 予約取引参照(2026-05-18~)
|
|
105
107
|
);
|
|
106
108
|
acceptedOffers = searchSlicedAcceptedOffersResult.acceptedOffers;
|
|
107
109
|
debug('delivering...', order.orderNumber, acceptedOffers.map((offer) => `${offer.itemOffered.id}`), // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
@@ -47,10 +47,11 @@ payTransaction, paymentServiceId, options) {
|
|
|
47
47
|
try {
|
|
48
48
|
// タスクによって実行されているかどうか
|
|
49
49
|
const executedByTask = typeof options.executor?.id === 'string' && options.executor.id !== '';
|
|
50
|
+
const gmoIntegrationSettings = await settings.getByKey('gmo');
|
|
50
51
|
// 非同期承認時に長時間対応(2024-05-18~)
|
|
51
|
-
const timeout = (executedByTask && typeof
|
|
52
|
-
?
|
|
53
|
-
:
|
|
52
|
+
const timeout = (executedByTask && typeof gmoIntegrationSettings.timeoutBackground === 'number')
|
|
53
|
+
? gmoIntegrationSettings.timeoutBackground
|
|
54
|
+
: gmoIntegrationSettings.timeout;
|
|
54
55
|
debug('processAuthorizeCreditCard processing... executor:', options.executor?.id, 'timeout:', timeout);
|
|
55
56
|
const creditCardService = new gmo_service_1.GMO.service.Credit({
|
|
56
57
|
endpoint: String(availableChannel.serviceUrl)
|
|
@@ -39,7 +39,9 @@ function findByCode(params) {
|
|
|
39
39
|
// typeOf?: { $in?: factory.order.IItemOffered['typeOf'][] };
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
}, {
|
|
42
|
+
}, {
|
|
43
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
44
|
+
} // 予約取引参照(2026-05-18~)
|
|
43
45
|
)).shift();
|
|
44
46
|
if (acceptedOffer === undefined) {
|
|
45
47
|
throw new factory_1.factory.errors.NotFound('acceptedOffer');
|
|
@@ -16,7 +16,9 @@ function searchByOrder(params) {
|
|
|
16
16
|
// typeOf: { $in: [reservationType] }
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
}, {
|
|
19
|
+
}, {
|
|
20
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
21
|
+
} // 予約取引参照(2026-05-18~)
|
|
20
22
|
);
|
|
21
23
|
const reservationIds = acceptedOffers.map((offer) => {
|
|
22
24
|
if (offer.itemOffered.typeOf === reservationType) {
|
|
@@ -58,14 +58,15 @@ function call(params) {
|
|
|
58
58
|
const actionRepo = new acceptCOAOffer_1.AcceptCOAOfferActionRepo(connection);
|
|
59
59
|
// const transactionProcessRepo = new TransactionProcessRepo(redisClient, { lockExpiresInSeconds: 120 });
|
|
60
60
|
try {
|
|
61
|
+
const coaIntegrationSettings = await settings.getByKey('coa');
|
|
61
62
|
const reserveService = new coa_service_1.COA.service.Reserve({
|
|
62
63
|
endpoint: coaAuthClient.options.endpoint, // same as authClient(2024-07-17~)
|
|
63
64
|
auth: coaAuthClient
|
|
64
|
-
}, { timeout:
|
|
65
|
+
}, { timeout: coaIntegrationSettings.timeoutReserve });
|
|
65
66
|
const masterService = new coa_service_1.COA.service.Master({
|
|
66
67
|
endpoint: coaAuthClient.options.endpoint, // same as authClient(2024-07-17~)
|
|
67
68
|
auth: coaAuthClient
|
|
68
|
-
}, { timeout:
|
|
69
|
+
}, { timeout: coaIntegrationSettings.timeoutMaster });
|
|
69
70
|
const { agent, object, potentialActions, purpose } = params.data;
|
|
70
71
|
// agent.idからflgMemberを自動セット(2024-12-16~)
|
|
71
72
|
const isMember = memberClients.includes(agent.id);
|
|
@@ -137,7 +137,9 @@ function fixOrderAsPurpose(params) {
|
|
|
137
137
|
const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
|
|
138
138
|
orderNumber: { $eq: order.orderNumber },
|
|
139
139
|
project: { id: { $eq: params.project.id } }
|
|
140
|
-
}, {
|
|
140
|
+
}, {
|
|
141
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
142
|
+
} // 予約取引参照(2026-05-18~)
|
|
141
143
|
);
|
|
142
144
|
return {
|
|
143
145
|
...order,
|
|
@@ -77,7 +77,9 @@ function fixOrderAsPurpose(params, transaction) {
|
|
|
77
77
|
reservedTicket: { ticketedSeat: { seatNumber: { $in: seatNumbers } } }
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
}, {
|
|
80
|
+
}, {
|
|
81
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
82
|
+
} // 予約取引参照(2026-05-18~)
|
|
81
83
|
);
|
|
82
84
|
}
|
|
83
85
|
return {
|
|
@@ -144,7 +144,9 @@ function fixOrders(params) {
|
|
|
144
144
|
const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
|
|
145
145
|
orderNumber: { $eq: params.object.order[0].orderNumber },
|
|
146
146
|
project: { id: { $eq: params.project.id } }
|
|
147
|
-
}, {
|
|
147
|
+
}, {
|
|
148
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
149
|
+
} // 予約取引参照(2026-05-18~)
|
|
148
150
|
);
|
|
149
151
|
return { acceptedOffers, eventIds, offerIds, orders };
|
|
150
152
|
};
|
|
@@ -22,7 +22,9 @@ function validateOrder(params) {
|
|
|
22
22
|
const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
|
|
23
23
|
orderNumber: { $eq: params.orderNumber },
|
|
24
24
|
project: { id: { $eq: params.project.id } }
|
|
25
|
-
}, {
|
|
25
|
+
}, {
|
|
26
|
+
useItemOfferedByReserve: true // 2026-05-25~
|
|
27
|
+
} // 予約取引参照(2026-05-18~)
|
|
26
28
|
);
|
|
27
29
|
let payTransactions = [];
|
|
28
30
|
if (order.paymentMethods.length > 0) {
|
package/package.json
CHANGED