@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.
@@ -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
- return doc.acceptedOffers;
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 itemOffered.programMembershipUsed?.typeOf === 'string')
381
- ? { programMembershipUsed: itemOffered.programMembershipUsed }
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 };
@@ -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
@@ -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.1.0-alpha.14"
94
+ "version": "24.1.0-alpha.15"
95
95
  }