@chevre/domain 25.0.0-alpha.1 → 25.0.0-alpha.11

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.
Files changed (63) hide show
  1. package/lib/chevre/emailMessageBuilder.d.ts +10 -4
  2. package/lib/chevre/emailMessageBuilder.js +48 -73
  3. package/lib/chevre/repo/acceptedOffer.d.ts +1 -5
  4. package/lib/chevre/repo/acceptedOffer.js +5 -5
  5. package/lib/chevre/repo/acceptedOfferInReserve.d.ts +1 -5
  6. package/lib/chevre/repo/acceptedOfferInReserve.js +4 -4
  7. package/lib/chevre/repo/emailMessage.d.ts +18 -9
  8. package/lib/chevre/repo/emailMessage.js +26 -36
  9. package/lib/chevre/repo/factory/acceptedOffer/reserveTransaction2itemOffered.d.ts +1 -3
  10. package/lib/chevre/repo/factory/acceptedOffer/reserveTransaction2itemOffered.js +2 -3
  11. package/lib/chevre/repo/mongoose/schemas/emailMessages.d.ts +9 -1
  12. package/lib/chevre/repo/mongoose/schemas/emailMessages.js +5 -20
  13. package/lib/chevre/repo/mongoose/schemas/order.d.ts +4 -0
  14. package/lib/chevre/repo/mongoose/schemas/order.js +10 -109
  15. package/lib/chevre/repo/mongoose/schemas/setting.d.ts +0 -6
  16. package/lib/chevre/repo/order.d.ts +9 -6
  17. package/lib/chevre/repo/order.js +45 -26
  18. package/lib/chevre/repo/orderInTransaction.d.ts +15 -16
  19. package/lib/chevre/repo/orderInTransaction.js +38 -23
  20. package/lib/chevre/repo/orderNumber.d.ts +4 -0
  21. package/lib/chevre/repo/orderNumber.js +32 -60
  22. package/lib/chevre/repo/transaction.d.ts +5 -1
  23. package/lib/chevre/repo/transaction.js +4 -0
  24. package/lib/chevre/service/offer/any.d.ts +3 -6
  25. package/lib/chevre/service/offer/any.js +3 -1
  26. package/lib/chevre/service/offer/event/authorize.js +3 -1
  27. package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +1 -0
  28. package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +1 -0
  29. package/lib/chevre/service/order/deleteOrder.js +1 -1
  30. package/lib/chevre/service/order/placeOrder/factory.js +4 -2
  31. package/lib/chevre/service/order.d.ts +1 -2
  32. package/lib/chevre/service/order.js +1 -5
  33. package/lib/chevre/service/reserve/findByCode.js +1 -1
  34. package/lib/chevre/service/reserve/searchByOrder.js +1 -1
  35. package/lib/chevre/service/task/confirmReserveTransaction.js +1 -1
  36. package/lib/chevre/service/task/payment/payByTask.js +1 -1
  37. package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions/sendEmailMessage.d.ts +0 -1
  38. package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions/sendEmailMessage.js +8 -23
  39. package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions.d.ts +0 -1
  40. package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions.js +1 -6
  41. package/lib/chevre/service/transaction/placeOrder/confirm.d.ts +1 -3
  42. package/lib/chevre/service/transaction/placeOrder/confirm.js +17 -14
  43. package/lib/chevre/service/transaction/placeOrder/start/factory.d.ts +0 -1
  44. package/lib/chevre/service/transaction/placeOrder/start/factory.js +3 -5
  45. package/lib/chevre/service/transaction/placeOrder/updateAgent.js +1 -0
  46. package/lib/chevre/service/transaction/placeOrder.d.ts +2 -2
  47. package/lib/chevre/service/transaction/placeOrder.js +3 -3
  48. package/lib/chevre/service/transaction/returnOrder/potentialActions/returnPaymentMethod.js +2 -37
  49. package/lib/chevre/service/transaction/returnOrder/potentialActions/sendEmailMessage.d.ts +2 -2
  50. package/lib/chevre/service/transaction/returnOrder/potentialActions/sendEmailMessage.js +3 -18
  51. package/lib/chevre/service/transaction/returnOrder/potentialActions.d.ts +0 -1
  52. package/lib/chevre/service/transaction/returnOrder/potentialActions.js +0 -4
  53. package/lib/chevre/service/transaction/returnOrder/preStart.js +1 -1
  54. package/lib/chevre/service/transaction/returnOrder.d.ts +0 -2
  55. package/lib/chevre/service/transaction/returnOrder.js +13 -12
  56. package/lib/chevre/service/validation/validateOrder.js +1 -1
  57. package/lib/chevre/service.d.ts +0 -2
  58. package/lib/chevre/service.js +0 -2
  59. package/package.json +2 -2
  60. package/lib/chevre/factory/order.d.ts +0 -2
  61. package/lib/chevre/factory/order.js +0 -5
  62. package/lib/chevre/service/order/placeOrderWithoutTransaction.d.ts +0 -22
  63. package/lib/chevre/service/order/placeOrderWithoutTransaction.js +0 -51
@@ -3,6 +3,10 @@ import { IVirtuals } from '../virtuals';
3
3
  import { factory } from '../../../factory';
4
4
  type IDocType = Omit<factory.order.IOrder, 'id'> & {
5
5
  acceptedOffers?: factory.order.IAcceptedOffer[];
6
+ /**
7
+ * 注文取引IDとして再定義(2026-06-22~)
8
+ */
9
+ identifier?: string;
6
10
  };
7
11
  type IModel = Model<IDocType, Record<string, never>, Record<string, never>, IVirtuals>;
8
12
  type ISchemaDefinition = SchemaDefinition<IDocType>;
@@ -25,7 +25,8 @@ const schemaDefinition = {
25
25
  previousOrderStatus: String,
26
26
  orderDate: { type: Date, required: true },
27
27
  dateReturned: Date,
28
- orderedItem: [mongoose_1.SchemaTypes.Mixed]
28
+ orderedItem: [mongoose_1.SchemaTypes.Mixed],
29
+ identifier: String, // 注文取引IDとして再定義(2026-06-22~)
29
30
  // 以下廃止(2026-06-13~)
30
31
  // identifier: SchemaTypes.Mixed, // 廃止するためにMixed化(2026-06-12~)
31
32
  // isGift: Boolean,
@@ -60,15 +61,14 @@ const indexes = [
60
61
  { 'project.id': 1, orderDate: -1 },
61
62
  { name: 'searchByProjectId-v20220721' }
62
63
  ],
63
- // [
64
- // { identifier: 1, orderDate: -1 },
65
- // {
66
- // name: 'searchByIdentifier',
67
- // partialFilterExpression: {
68
- // identifier: { $exists: true }
69
- // }
70
- // }
71
- // ],
64
+ [
65
+ // 注文取引IDはユニークなはず
66
+ { identifier: 1 },
67
+ {
68
+ unique: true,
69
+ name: 'uniqueIdentifier'
70
+ }
71
+ ],
72
72
  [
73
73
  // 注文番号はユニークなはず
74
74
  { orderNumber: 1 },
@@ -77,15 +77,6 @@ const indexes = [
77
77
  name: 'uniqueOrderNumber'
78
78
  }
79
79
  ],
80
- // [
81
- // { 'seller.typeOf': 1, orderDate: -1 },
82
- // {
83
- // name: 'searchBySellerTypeOf',
84
- // partialFilterExpression: {
85
- // 'seller.typeOf': { $exists: true }
86
- // }
87
- // }
88
- // ],
89
80
  [
90
81
  { 'seller.id': 1, orderDate: -1 },
91
82
  {
@@ -152,24 +143,6 @@ const indexes = [
152
143
  }
153
144
  }
154
145
  ],
155
- // [
156
- // { 'customer.additionalProperty': 1, orderDate: -1 },
157
- // {
158
- // name: 'searchByCustomerAdditionalProperty',
159
- // partialFilterExpression: {
160
- // 'customer.additionalProperty': { $exists: true }
161
- // }
162
- // }
163
- // ],
164
- // [
165
- // { 'customer.memberOf.membershipNumber': 1, orderDate: -1 },
166
- // {
167
- // name: 'searchByCustomerMemberhipNumberAndOrderDate',
168
- // partialFilterExpression: {
169
- // 'customer.memberOf.membershipNumber': { $exists: true }
170
- // }
171
- // }
172
- // ],
173
146
  [
174
147
  { 'customer.givenName': 1, orderDate: -1 },
175
148
  {
@@ -233,15 +206,6 @@ const indexes = [
233
206
  }
234
207
  }
235
208
  ],
236
- // [
237
- // { 'paymentMethods.typeOf': 1, orderDate: -1 },
238
- // {
239
- // name: 'searchByPaymentMethodTypeAndOrderDate',
240
- // partialFilterExpression: {
241
- // 'paymentMethods.typeOf': { $exists: true }
242
- // }
243
- // }
244
- // ],
245
209
  [
246
210
  { 'paymentMethods.paymentMethod.identifier': 1, orderDate: -1 },
247
211
  {
@@ -269,15 +233,6 @@ const indexes = [
269
233
  }
270
234
  }
271
235
  ],
272
- // [
273
- // { 'acceptedOffers.itemOffered.identifier': 1, orderDate: -1 },
274
- // {
275
- // name: 'searchByItemOfferedIdentifier',
276
- // partialFilterExpression: {
277
- // 'acceptedOffers.itemOffered.identifier': { $exists: true }
278
- // }
279
- // }
280
- // ],
281
236
  [
282
237
  { 'acceptedOffers.itemOffered.id': 1, orderDate: -1 },
283
238
  {
@@ -287,42 +242,6 @@ const indexes = [
287
242
  }
288
243
  }
289
244
  ],
290
- // [
291
- // { 'acceptedOffers.itemOffered.issuedThrough.typeOf': 1, orderDate: -1 },
292
- // {
293
- // name: 'searchByItemOfferedIssuedThroughTypeOf',
294
- // partialFilterExpression: {
295
- // 'acceptedOffers.itemOffered.issuedThrough.typeOf': { $exists: true }
296
- // }
297
- // }
298
- // ],
299
- // [
300
- // { 'acceptedOffers.itemOffered.issuedThrough.id': 1, orderDate: -1 },
301
- // {
302
- // name: 'searchByItemOfferedIssuedThroughId',
303
- // partialFilterExpression: {
304
- // 'acceptedOffers.itemOffered.issuedThrough.id': { $exists: true }
305
- // }
306
- // }
307
- // ],
308
- // [
309
- // { 'acceptedOffers.itemOffered.programMembershipUsed.identifier': 1, orderDate: -1 },
310
- // {
311
- // name: 'searchByItemOfferedProgramMembershipUsedIdentifier',
312
- // partialFilterExpression: {
313
- // 'acceptedOffers.itemOffered.programMembershipUsed.identifier': { $exists: true }
314
- // }
315
- // }
316
- // ],
317
- // [
318
- // { 'acceptedOffers.itemOffered.programMembershipUsed.issuedThrough.serviceType.codeValue': 1, orderDate: -1 },
319
- // {
320
- // name: 'searchByItemOfferedMembershipUsedServiceType',
321
- // partialFilterExpression: {
322
- // 'acceptedOffers.itemOffered.programMembershipUsed.issuedThrough.serviceType.codeValue': { $exists: true }
323
- // }
324
- // }
325
- // ],
326
245
  [
327
246
  { 'acceptedOffers.itemOffered.reservationNumber': 1, orderDate: -1 },
328
247
  {
@@ -341,24 +260,6 @@ const indexes = [
341
260
  }
342
261
  }
343
262
  ],
344
- // [
345
- // { 'acceptedOffers.itemOffered.reservationFor.identifier': 1, orderDate: -1 },
346
- // {
347
- // name: 'searchByItemOfferedReservationForIdentifierAndOrderDate',
348
- // partialFilterExpression: {
349
- // 'acceptedOffers.itemOffered.reservationFor.identifier': { $exists: true }
350
- // }
351
- // }
352
- // ],
353
- // [
354
- // { 'acceptedOffers.itemOffered.reservationFor.name': 1, orderDate: -1 },
355
- // {
356
- // name: 'searchByItemOfferedReservationForNameAndOrderDate',
357
- // partialFilterExpression: {
358
- // 'acceptedOffers.itemOffered.reservationFor.name': { $exists: true }
359
- // }
360
- // }
361
- // ],
362
263
  [
363
264
  { 'acceptedOffers.itemOffered.reservationFor.endDate': 1, orderDate: -1 },
364
265
  {
@@ -111,7 +111,6 @@ export interface IJWTSetting {
111
111
  algorithm: Algorithm;
112
112
  }
113
113
  export interface IOrderNumberSetting {
114
- validFrom: Date;
115
114
  /**
116
115
  * fpe暗号鍵
117
116
  */
@@ -120,11 +119,6 @@ export interface IOrderNumberSetting {
120
119
  * "A"
121
120
  */
122
121
  version: string;
123
- versioningForceProjects?: string[];
124
- /**
125
- * 強制的にバージョニング不使用のプロジェクト
126
- */
127
- versioningExceptionProjects?: string[];
128
122
  }
129
123
  export interface ITransactionNumberSetting {
130
124
  validFrom: Date;
@@ -34,12 +34,6 @@ export declare class OrderRepo {
34
34
  private readonly orderModel;
35
35
  constructor(connection: Connection);
36
36
  static CREATE_MONGO_CONDITIONS(params: ISearchConditions): FilterQuery<factory.order.IOrder>[];
37
- /**
38
- * なければ作成する
39
- */
40
- createIfNotExist(order: IOrderWithoutAcceptedOffers & {
41
- acceptedOffers: factory.order.IAcceptedOffer[];
42
- }): Promise<void>;
43
37
  /**
44
38
  * 注文ステータスを変更する
45
39
  */
@@ -140,12 +134,14 @@ export declare class OrderRepo {
140
134
  })[]>;
141
135
  getCursor(conditions: any, projection: any): import("mongoose").Cursor<import("mongoose").Document<unknown, Record<string, never>, IDocType, import("./mongoose/virtuals").IVirtuals, {}> & Omit<factory.order.IOrder, "id"> & {
142
136
  acceptedOffers?: factory.order.IAcceptedOffer[];
137
+ identifier?: string;
143
138
  } & {
144
139
  _id: import("mongoose").Types.ObjectId;
145
140
  } & {
146
141
  __v: number;
147
142
  }, import("mongoose").QueryOptions<IDocType>, (import("mongoose").Document<unknown, Record<string, never>, IDocType, import("./mongoose/virtuals").IVirtuals, {}> & Omit<factory.order.IOrder, "id"> & {
148
143
  acceptedOffers?: factory.order.IAcceptedOffer[];
144
+ identifier?: string;
149
145
  } & {
150
146
  _id: import("mongoose").Types.ObjectId;
151
147
  } & {
@@ -156,6 +152,13 @@ export declare class OrderRepo {
156
152
  $unset: any;
157
153
  arrayFilters?: any[];
158
154
  }): Promise<import("mongoose").UpdateWriteOpResult>;
155
+ updateIdentifier4migration(params: {
156
+ project: {
157
+ id: string;
158
+ };
159
+ orderNumber: string;
160
+ identifier: string;
161
+ }): Promise<import("mongoose").UpdateWriteOpResult>;
159
162
  aggregateOrder(params: {
160
163
  project?: {
161
164
  id?: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OrderRepo = void 0;
4
4
  const factory_1 = require("../factory");
5
5
  const order_1 = require("./mongoose/schemas/order");
6
- const errorHandler_1 = require("../errorHandler");
6
+ // import { isMongoDuplicateError } from '../errorHandler';
7
7
  const settings_1 = require("../settings");
8
8
  /**
9
9
  * ドキュメント検索時に指定可能なprojectionフィールドを厳密に定義する
@@ -483,31 +483,37 @@ class OrderRepo {
483
483
  }
484
484
  return andConditions;
485
485
  }
486
- /**
487
- * なければ作成する
488
- */
489
- async createIfNotExist(order) {
490
- try {
491
- // 存在しなければ上書き
492
- // updateOneに変更(2024-01-14~)
493
- // await this.orderModel.findOneAndUpdate(
494
- await this.orderModel.updateOne({ orderNumber: order.orderNumber }, { $setOnInsert: order }, {
495
- // new: true,
496
- upsert: true
497
- })
498
- .exec();
499
- }
500
- catch (error) {
501
- let throwsError = true;
502
- if (await (0, errorHandler_1.isMongoDuplicateError)(error)) {
503
- // すでにorderNumberが存在する場合ok
504
- throwsError = false;
505
- }
506
- if (throwsError) {
507
- throw error;
508
- }
509
- }
510
- }
486
+ // OrderInTransactionリポジトリにて注文ドキュメントが生成されるように変更したのでもう不要
487
+ // /**
488
+ // * なければ作成する
489
+ // */
490
+ // public async createIfNotExist(order: IOrderWithoutAcceptedOffers & {
491
+ // acceptedOffers: factory.order.IAcceptedOffer[];
492
+ // }): Promise<void> {
493
+ // try {
494
+ // // 存在しなければ上書き
495
+ // // updateOneに変更(2024-01-14~)
496
+ // // await this.orderModel.findOneAndUpdate(
497
+ // await this.orderModel.updateOne(
498
+ // { orderNumber: order.orderNumber },
499
+ // { $setOnInsert: order },
500
+ // {
501
+ // // new: true,
502
+ // upsert: true
503
+ // }
504
+ // )
505
+ // .exec();
506
+ // } catch (error) {
507
+ // let throwsError = true;
508
+ // if (await isMongoDuplicateError(error)) {
509
+ // // すでにorderNumberが存在する場合ok
510
+ // throwsError = false;
511
+ // }
512
+ // if (throwsError) {
513
+ // throw error;
514
+ // }
515
+ // }
516
+ // }
511
517
  /**
512
518
  * 注文ステータスを変更する
513
519
  */
@@ -838,6 +844,19 @@ class OrderRepo {
838
844
  })
839
845
  .exec();
840
846
  }
847
+ async updateIdentifier4migration(params) {
848
+ const { orderNumber, project, identifier } = params;
849
+ return this.orderModel.updateOne({
850
+ orderNumber: { $eq: orderNumber },
851
+ 'project.id': { $eq: project.id },
852
+ typeOf: { $eq: factory_1.factory.order.OrderType.Order }
853
+ }, {
854
+ $set: {
855
+ ...(typeof identifier === 'string') ? { identifier } : undefined
856
+ }
857
+ })
858
+ .exec();
859
+ }
841
860
  async aggregateOrder(params) {
842
861
  const matchConditions = {
843
862
  orderDate: {
@@ -1,22 +1,20 @@
1
1
  import type { Connection } from 'mongoose';
2
2
  import { factory } from '../factory';
3
3
  import { AcceptedOfferInReserveRepo } from './acceptedOfferInReserve';
4
- type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'> & {
4
+ type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project' | 'broker'> & {
5
5
  typeOf: factory.transactionType.PlaceOrder;
6
6
  orderDate: Date;
7
- acceptedOffers: factory.order.IAcceptedOffer[];
8
- customer?: factory.order.ICustomer;
9
- };
10
- type IAcceptedOffer = factory.order.IAcceptedOffer & {
11
7
  /**
12
- * 受け入れ時に指定必須
8
+ * 注文取引IDとして再定義(2026-06-22~)
13
9
  */
14
- offeredThrough: factory.offer.IOfferedThrough;
10
+ identifier: string;
11
+ acceptedOffers: factory.order.IAcceptedOffer[];
12
+ customer?: factory.order.ICustomer;
15
13
  };
16
14
  /**
17
15
  * typeOf: Orderへドキュメント変換時の編集フィールド
18
16
  */
19
- export type IPlacingOrder = Pick<factory.order.IOrder, 'broker' | 'confirmationNumber' | 'orderDate' | 'orderNumber' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'price' | 'priceCurrency' | 'seller' | 'typeOf'> & {
17
+ export type IPlacingOrder = Pick<factory.order.IOrder, 'confirmationNumber' | 'orderDate' | 'orderNumber' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'price' | 'priceCurrency' | 'seller' | 'typeOf'> & {
20
18
  url?: never;
21
19
  identifier?: never;
22
20
  name?: never;
@@ -28,6 +26,10 @@ export type IPlacingOrder = Pick<factory.order.IOrder, 'broker' | 'confirmationN
28
26
  * 上書きしてはいけない
29
27
  */
30
28
  customer?: never;
29
+ /**
30
+ * 上書きしてはいけない
31
+ */
32
+ broker?: never;
31
33
  };
32
34
  export type IMinimizedReservationFor = Pick<factory.order.IEventAsReservationFor, 'endDate' | 'id' | 'startDate' | 'typeOf'> & {
33
35
  location: Pick<factory.order.IEventAsReservationFor['location'], 'branchCode' | 'typeOf'>;
@@ -55,6 +57,7 @@ export type IMinimizedAcceptedOffer = Pick<factory.order.IOptimizedAcceptedOffer
55
57
  export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
56
58
  private readonly orderModel;
57
59
  constructor(connection: Connection);
60
+ createPlaceOrderIfNotExists(params: Pick<IOrderInTransaction, 'orderNumber' | 'project' | 'identifier' | 'broker'>): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
58
61
  /**
59
62
  * 取引進行中の注文からacceptedOffersを検索する
60
63
  * 予約取引から予約ごとの価格仕様も参照する
@@ -76,13 +79,9 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
76
79
  * 注文documentがなければ作成し、受け入れられたオファーを追加する
77
80
  * このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
78
81
  */
79
- acceptOffer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project'> & {
80
- acceptedOffers: IMinimizedAcceptedOffer[] | (Omit<IAcceptedOffer, 'priceSpecification'> & {
81
- /**
82
- * COA以外では注文ドキュメントにpriceSpecificationが存在しないのでIFを補完
83
- */
84
- priceSpecification?: factory.order.ITicketPriceSpecification;
85
- })[];
82
+ acceptOffer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project' | 'identifier'> & {
83
+ acceptedOffers: IMinimizedAcceptedOffer[] | factory.order.ICOAAcceptedOffer[];
84
+ broker?: factory.order.IBroker;
86
85
  }): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
87
86
  /**
88
87
  * serialNumberからオファーを除外する
@@ -97,7 +96,7 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
97
96
  };
98
97
  };
99
98
  }): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
100
- setCustomer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project'> & {
99
+ setCustomer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project' | 'identifier'> & {
101
100
  customer: factory.order.ICustomer;
102
101
  }): Promise<import("mongoose").UpdateWriteOpResult>;
103
102
  /**
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OrderInTransactionRepo = void 0;
4
4
  // import { isDeepStrictEqual } from 'util';
5
+ const errorHandler_1 = require("../errorHandler");
5
6
  const factory_1 = require("../factory");
6
7
  const order_1 = require("./mongoose/schemas/order");
7
8
  const acceptedOfferInReserve_1 = require("./acceptedOfferInReserve");
@@ -15,6 +16,33 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
15
16
  super(connection);
16
17
  this.orderModel = connection.model(order_1.modelName, (0, order_1.createSchema)());
17
18
  }
19
+ async createPlaceOrderIfNotExists(params) {
20
+ const { orderNumber, project, identifier, broker } = params;
21
+ const setOnInsert = {
22
+ typeOf: factory_1.factory.transactionType.PlaceOrder,
23
+ orderDate: new Date(), // orderDate required(2024-12-09~)
24
+ orderNumber,
25
+ project,
26
+ identifier, // 取引ID(2026-06-22~)
27
+ ...((broker !== undefined) && { broker })
28
+ };
29
+ try {
30
+ return this.orderModel.updateOne({
31
+ identifier: { $eq: identifier }, // 取引IDに対してユニークネスを保証する
32
+ }, { $setOnInsert: setOnInsert }, { upsert: true })
33
+ .exec();
34
+ }
35
+ catch (error) {
36
+ let throwsError = true;
37
+ if (await (0, errorHandler_1.isMongoDuplicateError)(error)) {
38
+ // すでにidentifierが存在する場合ok
39
+ throwsError = false;
40
+ }
41
+ if (throwsError) {
42
+ throw error;
43
+ }
44
+ }
45
+ }
18
46
  /**
19
47
  * 取引進行中の注文からacceptedOffersを検索する
20
48
  * 予約取引から予約ごとの価格仕様も参照する
@@ -38,7 +66,7 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
38
66
  let acceptedOffersByReserveTransaction = [];
39
67
  const reservationNumbers = [...new Set(doc.acceptedOffers.map((aceptedOffer) => aceptedOffer.itemOffered.reservationNumber))];
40
68
  if (reservationNumbers.length > 0) {
41
- acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers }, { noName: true });
69
+ acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers });
42
70
  }
43
71
  return doc.acceptedOffers.map((acceptedOffer) => {
44
72
  const acceptedOfferByReserve = acceptedOffersByReserveTransaction.find((acceptedOfferByReserveTransaction) => acceptedOfferByReserveTransaction.itemOffered.id === acceptedOffer.itemOffered.id);
@@ -59,26 +87,6 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
59
87
  };
60
88
  });
61
89
  }
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
- // }
82
90
  /**
83
91
  * 注文を受注する
84
92
  * typeOf: PlaceOrder -> typeOf: Order
@@ -109,7 +117,8 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
109
117
  typeOf: factory_1.factory.transactionType.PlaceOrder,
110
118
  orderDate: new Date(), // orderDate required(2024-12-09~)
111
119
  orderNumber: params.orderNumber,
112
- project: params.project
120
+ project: params.project,
121
+ identifier: params.identifier // 取引ID(2026-06-22~)
113
122
  };
114
123
  return this.orderModel.updateOne({
115
124
  typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
@@ -123,6 +132,11 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
123
132
  acceptedOffers: {
124
133
  $each: params.acceptedOffers
125
134
  }
135
+ },
136
+ $set: {
137
+ ...((params.broker !== undefined) && {
138
+ broker: { id: params.broker.id, typeOf: params.broker.typeOf }
139
+ }) // set broker(2026-06-21~)
126
140
  }
127
141
  }, { upsert: true })
128
142
  .exec();
@@ -177,7 +191,8 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
177
191
  typeOf: factory_1.factory.transactionType.PlaceOrder,
178
192
  orderDate: new Date(), // orderDate required(2024-12-09~)
179
193
  orderNumber,
180
- project
194
+ project,
195
+ identifier: params.identifier // 取引ID(2026-06-22~)
181
196
  };
182
197
  const setKeys = { customer };
183
198
  return this.orderModel.updateOne(filter, {
@@ -5,6 +5,9 @@ import type { Connection } from 'mongoose';
5
5
  export declare class OrderNumberRepo {
6
6
  private readonly counterRepo;
7
7
  private readonly settingModel;
8
+ private static cachedSettings;
9
+ private static cacheExpiry;
10
+ private static readonly CACHE_TTL_MS;
8
11
  constructor(params: {
9
12
  connection: Connection;
10
13
  });
@@ -22,6 +25,7 @@ export declare class OrderNumberRepo {
22
25
  orderDate: Date;
23
26
  }): Promise<string>;
24
27
  decrypt(id: string): Promise<string>;
28
+ clearSettingCache(): void;
25
29
  /**
26
30
  * 注文番号生成設定を検索する
27
31
  */