@chevre/domain 24.1.0-alpha.15 → 24.1.0-alpha.16
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/orderInTransaction.d.ts +20 -2
- package/lib/chevre/repo/orderInTransaction.js +26 -5
- package/lib/chevre/service/aggregation/event/aggregateOffers.js +6 -1
- package/lib/chevre/service/offer/any.d.ts +3 -1
- package/lib/chevre/service/offer/event/authorize/factory.d.ts +2 -1
- package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.d.ts +1 -0
- package/lib/chevre/service/transaction/placeOrder/confirm.js +4 -1
- package/package.json +1 -1
|
@@ -6,6 +6,12 @@ type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'>
|
|
|
6
6
|
acceptedOffers: factory.order.IAcceptedOffer[];
|
|
7
7
|
customer?: factory.order.ICustomer;
|
|
8
8
|
};
|
|
9
|
+
type IAcceptedOffer = factory.order.IAcceptedOffer & {
|
|
10
|
+
/**
|
|
11
|
+
* 受け入れ時に指定必須
|
|
12
|
+
*/
|
|
13
|
+
offeredThrough: factory.offer.IOfferedThrough;
|
|
14
|
+
};
|
|
9
15
|
/**
|
|
10
16
|
* typeOf: Orderへドキュメント変換時の編集フィールド
|
|
11
17
|
*/
|
|
@@ -27,6 +33,16 @@ export declare class OrderInTransactionRepo {
|
|
|
27
33
|
private readonly reserveTransactionModel;
|
|
28
34
|
constructor(connection: Connection);
|
|
29
35
|
private findSubReservationsByReservationNumbers;
|
|
36
|
+
/**
|
|
37
|
+
* 取引進行中の注文からacceptedOffersを検索する
|
|
38
|
+
* 予約取引から予約ごとの価格仕様も参照する
|
|
39
|
+
*/
|
|
40
|
+
findAcceptedOffersWithPriceByOrderNumber(params: {
|
|
41
|
+
orderNumber: string;
|
|
42
|
+
project: {
|
|
43
|
+
id: string;
|
|
44
|
+
};
|
|
45
|
+
}): Promise<factory.order.IAcceptedOffer[]>;
|
|
30
46
|
/**
|
|
31
47
|
* 取引進行中の注文からacceptedOffersを検索する
|
|
32
48
|
*/
|
|
@@ -34,7 +50,7 @@ export declare class OrderInTransactionRepo {
|
|
|
34
50
|
orderNumber: {
|
|
35
51
|
$eq: string;
|
|
36
52
|
};
|
|
37
|
-
}): Promise<factory.order.IAcceptedOffer[]>;
|
|
53
|
+
}): Promise<Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>[]>;
|
|
38
54
|
/**
|
|
39
55
|
* 注文を受注する
|
|
40
56
|
* typeOf: PlaceOrder -> typeOf: Order
|
|
@@ -44,7 +60,9 @@ export declare class OrderInTransactionRepo {
|
|
|
44
60
|
* 注文documentがなければ作成し、受け入れられたオファーを追加する
|
|
45
61
|
* このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
|
|
46
62
|
*/
|
|
47
|
-
acceptOffer(params: Pick<IOrderInTransaction, '
|
|
63
|
+
acceptOffer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project'> & {
|
|
64
|
+
acceptedOffers: IAcceptedOffer[];
|
|
65
|
+
}): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
48
66
|
/**
|
|
49
67
|
* serialNumberからオファーを除外する
|
|
50
68
|
* ホワイトリストとブラックリスト両方に対応
|
|
@@ -45,10 +45,11 @@ class OrderInTransactionRepo {
|
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* 取引進行中の注文からacceptedOffersを検索する
|
|
48
|
+
* 予約取引から予約ごとの価格仕様も参照する
|
|
48
49
|
*/
|
|
49
|
-
async
|
|
50
|
+
async findAcceptedOffersWithPriceByOrderNumber(params) {
|
|
50
51
|
const doc = await this.orderModel.findOne({
|
|
51
|
-
orderNumber: { $eq: params.orderNumber
|
|
52
|
+
orderNumber: { $eq: params.orderNumber },
|
|
52
53
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder }
|
|
53
54
|
}, { acceptedOffers: 1 })
|
|
54
55
|
.lean()
|
|
@@ -56,18 +57,23 @@ class OrderInTransactionRepo {
|
|
|
56
57
|
if (doc === null) {
|
|
57
58
|
throw new factory_1.factory.errors.NotFound('orderInTransaction');
|
|
58
59
|
}
|
|
60
|
+
const isCOA = doc.acceptedOffers.at(0)?.offeredThrough?.identifier === factory_1.factory.service.webAPI.Identifier.COA;
|
|
61
|
+
// COAの場合、予約取引は存在しないのでそのまま返す
|
|
62
|
+
if (isCOA) {
|
|
63
|
+
return doc.acceptedOffers;
|
|
64
|
+
}
|
|
59
65
|
// priceSpecificationを予約取引から補完する(2026-05-12~)
|
|
60
|
-
const reservationNumbers = [...new Set(doc.acceptedOffers.map((aceptedOffer) => aceptedOffer.itemOffered.reservationNumber))];
|
|
61
66
|
let subReservations = [];
|
|
67
|
+
const reservationNumbers = [...new Set(doc.acceptedOffers.map((aceptedOffer) => aceptedOffer.itemOffered.reservationNumber))];
|
|
62
68
|
if (reservationNumbers.length > 0) {
|
|
63
69
|
subReservations = await this.findSubReservationsByReservationNumbers({ reservationNumbers });
|
|
64
70
|
}
|
|
65
71
|
return doc.acceptedOffers.map(({ priceSpecification, ...acceptedOfferWithoutPrice }) => {
|
|
66
72
|
const priceBySubReservation = subReservations.find((subReservation) => subReservation.id === acceptedOfferWithoutPrice.itemOffered.id)?.price;
|
|
67
73
|
const priceSpecMatched = (0, util_1.isDeepStrictEqual)(priceSpecification, priceBySubReservation);
|
|
68
|
-
console.log('findAcceptedOffersByOrderNumber: priceSpecMatched?', priceSpecMatched);
|
|
74
|
+
console.log('findAcceptedOffersByOrderNumber: priceSpecMatched?', priceSpecMatched, acceptedOfferWithoutPrice.itemOffered.id, params.orderNumber, params.project.id);
|
|
69
75
|
if (!priceSpecMatched) {
|
|
70
|
-
console.error('findAcceptedOffersByOrderNumber: priceSpecMatched: false!!!', acceptedOfferWithoutPrice.itemOffered.id, params.orderNumber
|
|
76
|
+
console.error('findAcceptedOffersByOrderNumber: priceSpecMatched: false!!!', acceptedOfferWithoutPrice.itemOffered.id, params.orderNumber, params.project.id);
|
|
71
77
|
}
|
|
72
78
|
return {
|
|
73
79
|
...acceptedOfferWithoutPrice,
|
|
@@ -75,6 +81,21 @@ class OrderInTransactionRepo {
|
|
|
75
81
|
};
|
|
76
82
|
});
|
|
77
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* 取引進行中の注文からacceptedOffersを検索する
|
|
86
|
+
*/
|
|
87
|
+
async findAcceptedOffersByOrderNumber(params) {
|
|
88
|
+
const doc = await this.orderModel.findOne({
|
|
89
|
+
orderNumber: { $eq: params.orderNumber.$eq },
|
|
90
|
+
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder }
|
|
91
|
+
}, { acceptedOffers: 1 })
|
|
92
|
+
.lean()
|
|
93
|
+
.exec();
|
|
94
|
+
if (doc === null) {
|
|
95
|
+
throw new factory_1.factory.errors.NotFound('orderInTransaction');
|
|
96
|
+
}
|
|
97
|
+
return doc.acceptedOffers;
|
|
98
|
+
}
|
|
78
99
|
/**
|
|
79
100
|
* 注文を受注する
|
|
80
101
|
* typeOf: PlaceOrder -> typeOf: Order
|
|
@@ -150,7 +150,12 @@ function aggregateReservationByOffer(params) {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
});
|
|
153
|
-
console.log(
|
|
153
|
+
// console.log(
|
|
154
|
+
// 'aggregateReservationByOffer: reservationCount4offer:', reservationCount4offer,
|
|
155
|
+
// 'aggregateSeatingType:', aggregateSeatingType,
|
|
156
|
+
// 'offer.id:', params.offer.id,
|
|
157
|
+
// 'offer.category:', params.offer.category?.codeValue
|
|
158
|
+
// );
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
161
|
const { maximumAttendeeCapacity, remainingAttendeeCapacity } = await calculateCapacityByOffer(params)(repos);
|
|
@@ -10,7 +10,9 @@ export declare function acceptOffer(params: {
|
|
|
10
10
|
project: {
|
|
11
11
|
id: string;
|
|
12
12
|
};
|
|
13
|
-
acceptedOffers: factory.order.IAcceptedOffer
|
|
13
|
+
acceptedOffers: (factory.order.IAcceptedOffer & {
|
|
14
|
+
offeredThrough: factory.offer.IOfferedThrough;
|
|
15
|
+
})[];
|
|
14
16
|
}): IAcceptOfferOperation<void>;
|
|
15
17
|
export declare function voidAcceptedOffer(params: {
|
|
16
18
|
/**
|
|
@@ -23,7 +23,7 @@ declare function createAuthorizeSeatReservationActionAttributes(params: {
|
|
|
23
23
|
transaction: Pick<factory.transaction.ITransaction<factory.transactionType.PlaceOrder>, 'agent' | 'id' | 'project' | 'seller' | 'typeOf'>;
|
|
24
24
|
}): factory.action.authorize.offer.eventService.IAttributes;
|
|
25
25
|
declare function acceptedOffers2amount(params: {
|
|
26
|
-
acceptedOffers: IResultAcceptedOffer[];
|
|
26
|
+
acceptedOffers: Pick<IResultAcceptedOffer, 'priceSpecification' | 'id'>[];
|
|
27
27
|
}): number;
|
|
28
28
|
declare function acceptedOffers2authorizeResult(params: {
|
|
29
29
|
acceptedOffers: factory.assetTransaction.reserve.IAcceptedTicketOfferWithoutDetail[];
|
|
@@ -34,6 +34,7 @@ declare function acceptedOffers2authorizeResult(params: {
|
|
|
34
34
|
type IObjectSubReservation = factory.assetTransaction.reserve.IObjectSubReservation;
|
|
35
35
|
export type IResultAcceptedOffer = factory.order.IAcceptedOffer & {
|
|
36
36
|
itemOffered: factory.order.IReservation;
|
|
37
|
+
offeredThrough: factory.offer.IOfferedThrough;
|
|
37
38
|
};
|
|
38
39
|
declare function responseBody2acceptedOffers4result(params: {
|
|
39
40
|
issuedThrough: factory.assetTransaction.reserve.IIssuedThrough;
|
|
@@ -23,6 +23,7 @@ export declare function offers2resultPrice(offers: IAcceptedOffer4COA[]): {
|
|
|
23
23
|
};
|
|
24
24
|
type IResultAcceptedOffer = Omit<factory.order.IAcceptedOffer, 'itemOffered'> & {
|
|
25
25
|
itemOffered: factory.order.ICOAEventReservation;
|
|
26
|
+
offeredThrough: factory.offer.IOfferedThrough;
|
|
26
27
|
};
|
|
27
28
|
/**
|
|
28
29
|
* COA仮予約結果から注文アイテムを生成する
|
|
@@ -99,7 +99,10 @@ function confirm(params, options) {
|
|
|
99
99
|
// authorizeProductOfferActions,
|
|
100
100
|
serialNumbers } = dissolveAuthorizeActions(completedAuthorizeActions);
|
|
101
101
|
// orderInTransactionから検索する(2024-03-04~)
|
|
102
|
-
const acceptedOffers = (await repos.orderInTransaction.
|
|
102
|
+
const acceptedOffers = (await repos.orderInTransaction.findAcceptedOffersWithPriceByOrderNumber({
|
|
103
|
+
orderNumber,
|
|
104
|
+
project: { id: transaction.project.id }
|
|
105
|
+
}))
|
|
103
106
|
.filter(({ serialNumber }) => typeof serialNumber === 'string' && serialNumbers.includes(serialNumber));
|
|
104
107
|
// authorizePaymentActionsからpayTransactionsを参照(2024-06-20~)
|
|
105
108
|
let payTransactions = [];
|
package/package.json
CHANGED