@chevre/domain 24.1.0-alpha.14 → 24.1.0-alpha.15
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 +12 -0
- package/lib/chevre/repo/orderInTransaction.js +51 -1
- package/lib/chevre/service/offer/event/authorize/factory.js +4 -7
- package/lib/chevre/service/order/placeOrder/factory/orderedItem.d.ts +1 -1
- package/lib/chevre/service/order/placeOrder/factory/orderedItem.js +0 -5
- package/lib/chevre/service/order/placeOrder/factory.d.ts +1 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateInvoiceReferencesOrder.d.ts +1 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateMovieTicket.d.ts +1 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/validation.d.ts +2 -2
- package/lib/chevre/service/transaction/placeOrder/confirm.js +1 -1
- package/package.json +1 -1
|
@@ -6,8 +6,17 @@ type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'>
|
|
|
6
6
|
acceptedOffers: factory.order.IAcceptedOffer[];
|
|
7
7
|
customer?: factory.order.ICustomer;
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* typeOf: Orderへドキュメント変換時の編集フィールド
|
|
11
|
+
*/
|
|
9
12
|
export type IPlacingOrder = Pick<factory.order.IOrder, 'broker' | 'confirmationNumber' | 'identifier' | 'isGift' | 'name' | 'orderDate' | 'orderNumber' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'price' | 'priceCurrency' | 'seller' | 'typeOf' | 'url'> & {
|
|
13
|
+
/**
|
|
14
|
+
* 上書きしてはいけない
|
|
15
|
+
*/
|
|
10
16
|
acceptedOffers?: never;
|
|
17
|
+
/**
|
|
18
|
+
* 上書きしてはいけない
|
|
19
|
+
*/
|
|
11
20
|
customer?: never;
|
|
12
21
|
};
|
|
13
22
|
/**
|
|
@@ -15,7 +24,9 @@ export type IPlacingOrder = Pick<factory.order.IOrder, 'broker' | 'confirmationN
|
|
|
15
24
|
*/
|
|
16
25
|
export declare class OrderInTransactionRepo {
|
|
17
26
|
private readonly orderModel;
|
|
27
|
+
private readonly reserveTransactionModel;
|
|
18
28
|
constructor(connection: Connection);
|
|
29
|
+
private findSubReservationsByReservationNumbers;
|
|
19
30
|
/**
|
|
20
31
|
* 取引進行中の注文からacceptedOffersを検索する
|
|
21
32
|
*/
|
|
@@ -26,6 +37,7 @@ export declare class OrderInTransactionRepo {
|
|
|
26
37
|
}): Promise<factory.order.IAcceptedOffer[]>;
|
|
27
38
|
/**
|
|
28
39
|
* 注文を受注する
|
|
40
|
+
* typeOf: PlaceOrder -> typeOf: Order
|
|
29
41
|
*/
|
|
30
42
|
placeOrder(order: IPlacingOrder): Promise<void>;
|
|
31
43
|
/**
|
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OrderInTransactionRepo = void 0;
|
|
4
|
+
const util_1 = require("util");
|
|
4
5
|
const factory_1 = require("../factory");
|
|
5
6
|
const order_1 = require("./mongoose/schemas/order");
|
|
7
|
+
const assetTransaction_1 = require("./mongoose/schemas/assetTransaction");
|
|
6
8
|
/**
|
|
7
9
|
* 取引中注文リポジトリ
|
|
8
10
|
*/
|
|
9
11
|
class OrderInTransactionRepo {
|
|
10
12
|
orderModel;
|
|
13
|
+
reserveTransactionModel;
|
|
11
14
|
constructor(connection) {
|
|
12
15
|
this.orderModel = connection.model(order_1.modelName, (0, order_1.createSchema)());
|
|
16
|
+
this.reserveTransactionModel = connection.model(assetTransaction_1.modelName, (0, assetTransaction_1.createSchema)());
|
|
17
|
+
}
|
|
18
|
+
async findSubReservationsByReservationNumbers(params) {
|
|
19
|
+
const { reservationNumbers } = params;
|
|
20
|
+
if (!Array.isArray(reservationNumbers) || reservationNumbers.length === 0) {
|
|
21
|
+
throw new factory_1.factory.errors.ArgumentNull('reservationNumbers');
|
|
22
|
+
}
|
|
23
|
+
const aggregate = this.reserveTransactionModel.aggregate([
|
|
24
|
+
{
|
|
25
|
+
$match: {
|
|
26
|
+
typeOf: { $eq: factory_1.factory.assetTransactionType.Reserve },
|
|
27
|
+
transactionNumber: { $in: reservationNumbers }
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
$unwind: {
|
|
32
|
+
path: '$object.subReservation'
|
|
33
|
+
// includeArrayIndex: 'elementIndex'
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
$project: {
|
|
38
|
+
_id: 0,
|
|
39
|
+
id: '$object.subReservation.id',
|
|
40
|
+
price: '$object.subReservation.price',
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]);
|
|
44
|
+
return aggregate.exec();
|
|
13
45
|
}
|
|
14
46
|
/**
|
|
15
47
|
* 取引進行中の注文からacceptedOffersを検索する
|
|
@@ -24,10 +56,28 @@ class OrderInTransactionRepo {
|
|
|
24
56
|
if (doc === null) {
|
|
25
57
|
throw new factory_1.factory.errors.NotFound('orderInTransaction');
|
|
26
58
|
}
|
|
27
|
-
|
|
59
|
+
// priceSpecificationを予約取引から補完する(2026-05-12~)
|
|
60
|
+
const reservationNumbers = [...new Set(doc.acceptedOffers.map((aceptedOffer) => aceptedOffer.itemOffered.reservationNumber))];
|
|
61
|
+
let subReservations = [];
|
|
62
|
+
if (reservationNumbers.length > 0) {
|
|
63
|
+
subReservations = await this.findSubReservationsByReservationNumbers({ reservationNumbers });
|
|
64
|
+
}
|
|
65
|
+
return doc.acceptedOffers.map(({ priceSpecification, ...acceptedOfferWithoutPrice }) => {
|
|
66
|
+
const priceBySubReservation = subReservations.find((subReservation) => subReservation.id === acceptedOfferWithoutPrice.itemOffered.id)?.price;
|
|
67
|
+
const priceSpecMatched = (0, util_1.isDeepStrictEqual)(priceSpecification, priceBySubReservation);
|
|
68
|
+
console.log('findAcceptedOffersByOrderNumber: priceSpecMatched?', priceSpecMatched);
|
|
69
|
+
if (!priceSpecMatched) {
|
|
70
|
+
console.error('findAcceptedOffersByOrderNumber: priceSpecMatched: false!!!', acceptedOfferWithoutPrice.itemOffered.id, params.orderNumber.$eq);
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
...acceptedOfferWithoutPrice,
|
|
74
|
+
...((priceBySubReservation !== undefined) && { priceSpecification: priceBySubReservation })
|
|
75
|
+
};
|
|
76
|
+
});
|
|
28
77
|
}
|
|
29
78
|
/**
|
|
30
79
|
* 注文を受注する
|
|
80
|
+
* typeOf: PlaceOrder -> typeOf: Order
|
|
31
81
|
*/
|
|
32
82
|
async placeOrder(order) {
|
|
33
83
|
if (!(order.orderDate instanceof Date)) {
|
|
@@ -302,7 +302,6 @@ function responseBody2acceptedOffers4result(params) {
|
|
|
302
302
|
* 注文データの予約を生成する
|
|
303
303
|
*/
|
|
304
304
|
function createReservation(params) {
|
|
305
|
-
// const { itemOffered, event, reservationFor } = params;
|
|
306
305
|
const { itemOffered } = params;
|
|
307
306
|
const event = params.reservationFor;
|
|
308
307
|
let reservationItem;
|
|
@@ -367,19 +366,17 @@ function createReservation(params) {
|
|
|
367
366
|
if (params.issuedThrough.typeOf !== factory_1.factory.product.ProductType.EventService) {
|
|
368
367
|
throw new factory_1.factory.errors.Argument('issuedThrough', `issuedThrough.typeOf must be ${factory_1.factory.product.ProductType.EventService}`);
|
|
369
368
|
}
|
|
369
|
+
const { additionalProperty, additionalTicketText, programMembershipUsed } = itemOffered;
|
|
370
370
|
reservationItem = {
|
|
371
371
|
typeOf: itemOffered.typeOf,
|
|
372
|
-
additionalProperty: itemOffered.additionalProperty,
|
|
373
|
-
additionalTicketText: itemOffered.additionalTicketText,
|
|
374
372
|
id: itemOffered.id,
|
|
375
373
|
issuedThrough: params.issuedThrough,
|
|
376
374
|
reservationNumber: params.reservationNumber,
|
|
377
375
|
reservationFor,
|
|
378
376
|
reservedTicket,
|
|
379
|
-
|
|
380
|
-
...(typeof
|
|
381
|
-
|
|
382
|
-
: undefined
|
|
377
|
+
...((Array.isArray(additionalProperty)) && { additionalProperty }),
|
|
378
|
+
...((typeof additionalTicketText === 'string') && { additionalTicketText }),
|
|
379
|
+
...((typeof programMembershipUsed?.typeOf === 'string') && { programMembershipUsed }) // 使用メンバーシップがあれば追加
|
|
383
380
|
};
|
|
384
381
|
}
|
|
385
382
|
else {
|
|
@@ -3,6 +3,6 @@ import { factory } from '../../../../factory';
|
|
|
3
3
|
* 受入オファーを注文アイテムに変換する
|
|
4
4
|
*/
|
|
5
5
|
declare function acceptedOffers2orderedItem(params: {
|
|
6
|
-
eventReservationAcceptedOffers: factory.order.IAcceptedOffer[];
|
|
6
|
+
eventReservationAcceptedOffers: Pick<factory.order.IAcceptedOffer, 'itemOffered'>[];
|
|
7
7
|
}): factory.order.IOrderedItem[];
|
|
8
8
|
export { acceptedOffers2orderedItem };
|
|
@@ -9,11 +9,6 @@ function acceptedOffers2orderedItem(params) {
|
|
|
9
9
|
// 予約がある場合
|
|
10
10
|
const { reservationOrderItems } = createReservationAcceptedOffers(params);
|
|
11
11
|
// 通貨転送がある場合
|
|
12
|
-
// const { moneyTransferOrderItems } = createMoneyTransferAcceptedOffers(params);
|
|
13
|
-
// プロダクトがある場合
|
|
14
|
-
// const { productOrderItems } = createProductItems(params);
|
|
15
|
-
// return [...reservationOrderItems, ...moneyTransferOrderItems, ...productOrderItems];
|
|
16
|
-
// return [...reservationOrderItems, ...productOrderItems];
|
|
17
12
|
return reservationOrderItems;
|
|
18
13
|
}
|
|
19
14
|
function createReservationAcceptedOffers(params) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { IPlacingOrder } from '../../../repo/orderInTransaction';
|
|
2
2
|
import { factory } from '../../../factory';
|
|
3
3
|
type IPlaceOrderTransaction = Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'project' | 'typeOf' | 'result' | 'object' | 'seller'>;
|
|
4
|
-
type IOrderAcceptedOffer = factory.order.IAcceptedOffer
|
|
4
|
+
type IOrderAcceptedOffer = Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>;
|
|
5
5
|
declare function createPaymentMethods(params: {
|
|
6
6
|
authorizePaymentActions: Pick<factory.action.authorize.paymentMethod.any.IAction, 'result'>[];
|
|
7
7
|
}): {
|
|
@@ -4,5 +4,5 @@ declare function validateInvoiceReferencesOrder(authorizePaymentActions: IAuthor
|
|
|
4
4
|
/**
|
|
5
5
|
* 受け入れられた興行オファー
|
|
6
6
|
*/
|
|
7
|
-
eventReservationAcceptedOffers: factory.order.IAcceptedOffer[]): void;
|
|
7
|
+
eventReservationAcceptedOffers: Pick<factory.order.IAcceptedOffer, 'itemOffered'>[]): void;
|
|
8
8
|
export { validateInvoiceReferencesOrder };
|
package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateMovieTicket.d.ts
CHANGED
|
@@ -18,4 +18,4 @@ authorizedMovieTickets: IMovieTicket4validate[],
|
|
|
18
18
|
/**
|
|
19
19
|
* 受け入れられた興行オファー
|
|
20
20
|
*/
|
|
21
|
-
eventReservationAcceptedOffers: factory.order.IAcceptedOffer[]): void;
|
|
21
|
+
eventReservationAcceptedOffers: Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'priceSpecification'>[]): void;
|
|
@@ -5,7 +5,7 @@ export { IAcceptPayAction, IAuthorizeEventServiceOffer, IAuthorizePaymentAction,
|
|
|
5
5
|
/**
|
|
6
6
|
* 取引が確定可能な状態かどうかをチェックする
|
|
7
7
|
*/
|
|
8
|
-
export declare function validateTransaction(transaction: Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'object'>, acceptPayActions: IAcceptPayAction[], authorizePaymentActions: IAuthorizePaymentAction[], authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[], eventReservationAcceptedOffers: factory.order.IAcceptedOffer[], payTransactions: IPayTransaction[], customer: factory.order.ICustomer): void;
|
|
8
|
+
export declare function validateTransaction(transaction: Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'object'>, acceptPayActions: IAcceptPayAction[], authorizePaymentActions: IAuthorizePaymentAction[], authorizeEventServiceOfferActions: Pick<IAuthorizeEventServiceOffer, 'id' | 'result'>[], eventReservationAcceptedOffers: Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'priceSpecification'>[], payTransactions: IPayTransaction[], customer: factory.order.ICustomer): void;
|
|
9
9
|
export type IOrderURLGenerator = (order: factory.order.IOrder) => string;
|
|
10
10
|
/**
|
|
11
11
|
* 注文オファー数検証
|
|
@@ -14,7 +14,7 @@ export declare function validateAcceptedOffers(params: {
|
|
|
14
14
|
result: {
|
|
15
15
|
order: PlaceOrderFactory.IResultOrderParams;
|
|
16
16
|
};
|
|
17
|
-
acceptedOffers: factory.order.IAcceptedOffer[];
|
|
17
|
+
acceptedOffers: (Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'offeredThrough' | 'serialNumber'>)[];
|
|
18
18
|
}): void;
|
|
19
19
|
export declare function validateOrderedItem(params: {
|
|
20
20
|
order: Pick<factory.order.IOrder, 'orderedItem'>;
|
|
@@ -288,7 +288,7 @@ function createResult(params, options) {
|
|
|
288
288
|
const itemOfferedTypeOf = acceptedOffer.itemOffered.typeOf;
|
|
289
289
|
switch (itemOfferedTypeOf) {
|
|
290
290
|
case factory_1.factory.reservationType.EventReservation:
|
|
291
|
-
eventReservationAcceptedOffers.push(acceptedOffer);
|
|
291
|
+
eventReservationAcceptedOffers.push((acceptedOffer));
|
|
292
292
|
break;
|
|
293
293
|
// case factory.permit.PermitType.Permit:
|
|
294
294
|
// productAcceptedOffers.push((acceptedOffer as factory.order.IAcceptedOffer<factory.order.IPermit>));
|
package/package.json
CHANGED