@chevre/domain 25.0.0-alpha.0 → 25.0.0-alpha.10
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/emailMessageBuilder.d.ts +10 -4
- package/lib/chevre/emailMessageBuilder.js +48 -73
- package/lib/chevre/repo/acceptedOffer.d.ts +1 -5
- package/lib/chevre/repo/acceptedOffer.js +5 -5
- package/lib/chevre/repo/acceptedOfferInReserve.d.ts +1 -5
- package/lib/chevre/repo/acceptedOfferInReserve.js +4 -4
- package/lib/chevre/repo/emailMessage.d.ts +18 -9
- package/lib/chevre/repo/emailMessage.js +26 -36
- package/lib/chevre/repo/factory/acceptedOffer/reserveTransaction2itemOffered.d.ts +1 -3
- package/lib/chevre/repo/factory/acceptedOffer/reserveTransaction2itemOffered.js +2 -3
- package/lib/chevre/repo/mongoose/schemas/emailMessages.d.ts +9 -1
- package/lib/chevre/repo/mongoose/schemas/emailMessages.js +5 -20
- package/lib/chevre/repo/mongoose/schemas/order.d.ts +4 -0
- package/lib/chevre/repo/mongoose/schemas/order.js +10 -109
- package/lib/chevre/repo/mongoose/schemas/setting.d.ts +0 -6
- package/lib/chevre/repo/order.d.ts +9 -6
- package/lib/chevre/repo/order.js +45 -26
- package/lib/chevre/repo/orderInTransaction.d.ts +13 -15
- package/lib/chevre/repo/orderInTransaction.js +10 -3
- package/lib/chevre/repo/orderNumber.d.ts +4 -0
- package/lib/chevre/repo/orderNumber.js +32 -60
- package/lib/chevre/repo/transaction.d.ts +5 -1
- package/lib/chevre/repo/transaction.js +4 -0
- package/lib/chevre/service/offer/any.d.ts +3 -6
- package/lib/chevre/service/offer/any.js +3 -1
- package/lib/chevre/service/offer/event/authorize/factory.js +1 -1
- package/lib/chevre/service/offer/event/authorize.js +3 -1
- package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.js +1 -1
- package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +1 -0
- package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +1 -0
- package/lib/chevre/service/order/deleteOrder.js +1 -1
- package/lib/chevre/service/order/placeOrder/factory.js +4 -2
- package/lib/chevre/service/order.d.ts +1 -2
- package/lib/chevre/service/order.js +1 -5
- package/lib/chevre/service/reserve/findByCode.js +1 -1
- package/lib/chevre/service/reserve/searchByOrder.js +1 -1
- package/lib/chevre/service/task/confirmReserveTransaction.js +1 -1
- package/lib/chevre/service/task/payment/payByTask.js +1 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions/sendEmailMessage.d.ts +0 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions/sendEmailMessage.js +8 -23
- package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions.d.ts +0 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions.js +1 -6
- package/lib/chevre/service/transaction/placeOrder/confirm.d.ts +1 -3
- package/lib/chevre/service/transaction/placeOrder/confirm.js +17 -14
- package/lib/chevre/service/transaction/placeOrder/start/factory.d.ts +0 -1
- package/lib/chevre/service/transaction/placeOrder/start/factory.js +3 -5
- package/lib/chevre/service/transaction/placeOrder/updateAgent.js +1 -0
- package/lib/chevre/service/transaction/returnOrder/potentialActions/returnPaymentMethod.js +2 -37
- package/lib/chevre/service/transaction/returnOrder/potentialActions/sendEmailMessage.d.ts +2 -2
- package/lib/chevre/service/transaction/returnOrder/potentialActions/sendEmailMessage.js +3 -18
- package/lib/chevre/service/transaction/returnOrder/potentialActions.d.ts +0 -1
- package/lib/chevre/service/transaction/returnOrder/potentialActions.js +0 -4
- package/lib/chevre/service/transaction/returnOrder/preStart.js +1 -1
- package/lib/chevre/service/transaction/returnOrder.d.ts +0 -2
- package/lib/chevre/service/transaction/returnOrder.js +13 -12
- package/lib/chevre/service/validation/validateOrder.js +1 -1
- package/package.json +2 -2
- package/lib/chevre/service/order/placeOrderWithoutTransaction.d.ts +0 -22
- 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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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?: {
|
package/lib/chevre/repo/order.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
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: {
|
|
@@ -4,19 +4,17 @@ import { AcceptedOfferInReserveRepo } from './acceptedOfferInReserve';
|
|
|
4
4
|
type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'> & {
|
|
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
|
-
|
|
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, '
|
|
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'>;
|
|
@@ -76,13 +78,9 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
76
78
|
* 注文documentがなければ作成し、受け入れられたオファーを追加する
|
|
77
79
|
* このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
|
|
78
80
|
*/
|
|
79
|
-
acceptOffer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project'> & {
|
|
80
|
-
acceptedOffers: IMinimizedAcceptedOffer[] |
|
|
81
|
-
|
|
82
|
-
* COA以外では注文ドキュメントにpriceSpecificationが存在しないのでIFを補完
|
|
83
|
-
*/
|
|
84
|
-
priceSpecification?: factory.order.ITicketPriceSpecification;
|
|
85
|
-
})[];
|
|
81
|
+
acceptOffer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project' | 'identifier'> & {
|
|
82
|
+
acceptedOffers: IMinimizedAcceptedOffer[] | factory.order.ICOAAcceptedOffer[];
|
|
83
|
+
broker?: factory.order.IBroker;
|
|
86
84
|
}): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
87
85
|
/**
|
|
88
86
|
* serialNumberからオファーを除外する
|
|
@@ -97,7 +95,7 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
97
95
|
};
|
|
98
96
|
};
|
|
99
97
|
}): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
100
|
-
setCustomer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project'> & {
|
|
98
|
+
setCustomer(params: Pick<IOrderInTransaction, 'orderNumber' | 'project' | 'identifier'> & {
|
|
101
99
|
customer: factory.order.ICustomer;
|
|
102
100
|
}): Promise<import("mongoose").UpdateWriteOpResult>;
|
|
103
101
|
/**
|
|
@@ -38,7 +38,7 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
38
38
|
let acceptedOffersByReserveTransaction = [];
|
|
39
39
|
const reservationNumbers = [...new Set(doc.acceptedOffers.map((aceptedOffer) => aceptedOffer.itemOffered.reservationNumber))];
|
|
40
40
|
if (reservationNumbers.length > 0) {
|
|
41
|
-
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers }
|
|
41
|
+
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers });
|
|
42
42
|
}
|
|
43
43
|
return doc.acceptedOffers.map((acceptedOffer) => {
|
|
44
44
|
const acceptedOfferByReserve = acceptedOffersByReserveTransaction.find((acceptedOfferByReserveTransaction) => acceptedOfferByReserveTransaction.itemOffered.id === acceptedOffer.itemOffered.id);
|
|
@@ -109,7 +109,8 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
109
109
|
typeOf: factory_1.factory.transactionType.PlaceOrder,
|
|
110
110
|
orderDate: new Date(), // orderDate required(2024-12-09~)
|
|
111
111
|
orderNumber: params.orderNumber,
|
|
112
|
-
project: params.project
|
|
112
|
+
project: params.project,
|
|
113
|
+
identifier: params.identifier // 取引ID(2026-06-22~)
|
|
113
114
|
};
|
|
114
115
|
return this.orderModel.updateOne({
|
|
115
116
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
@@ -123,6 +124,11 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
123
124
|
acceptedOffers: {
|
|
124
125
|
$each: params.acceptedOffers
|
|
125
126
|
}
|
|
127
|
+
},
|
|
128
|
+
$set: {
|
|
129
|
+
...((params.broker !== undefined) && {
|
|
130
|
+
broker: { id: params.broker.id, typeOf: params.broker.typeOf }
|
|
131
|
+
}) // set broker(2026-06-21~)
|
|
126
132
|
}
|
|
127
133
|
}, { upsert: true })
|
|
128
134
|
.exec();
|
|
@@ -177,7 +183,8 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
177
183
|
typeOf: factory_1.factory.transactionType.PlaceOrder,
|
|
178
184
|
orderDate: new Date(), // orderDate required(2024-12-09~)
|
|
179
185
|
orderNumber,
|
|
180
|
-
project
|
|
186
|
+
project,
|
|
187
|
+
identifier: params.identifier // 取引ID(2026-06-22~)
|
|
181
188
|
};
|
|
182
189
|
const setKeys = { customer };
|
|
183
190
|
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
|
*/
|
|
@@ -17,36 +17,25 @@ const ORDER_NUMBER_SEPARATOR = '-';
|
|
|
17
17
|
class OrderNumberRepo {
|
|
18
18
|
counterRepo;
|
|
19
19
|
settingModel;
|
|
20
|
+
// static にすることで、クラスが何回 new されてもメモリ上で1つだけ保持される
|
|
21
|
+
static cachedSettings;
|
|
22
|
+
static cacheExpiry = 0;
|
|
23
|
+
static CACHE_TTL_MS = 10 * 60 * 1000; // 10分
|
|
20
24
|
constructor(params) {
|
|
21
25
|
this.counterRepo = new transactionNumberCounter_1.TransactionNumberCounterRepo(params);
|
|
22
26
|
this.settingModel = params.connection.model(setting_1.modelName, (0, setting_1.createSchema)());
|
|
23
27
|
}
|
|
24
|
-
// public static GENERATE_VERSION0(timestamp: string, seq: number): string {
|
|
25
|
-
// let orderNumber = `${timestamp}${seq}`;
|
|
26
|
-
// // checkdigit
|
|
27
|
-
// const cd = cdigit.luhn.compute(orderNumber);
|
|
28
|
-
// orderNumber = fpe({ password: cd })
|
|
29
|
-
// .encrypt(orderNumber);
|
|
30
|
-
// orderNumber = `${cd}${orderNumber}`;
|
|
31
|
-
// return orderNumber;
|
|
32
|
-
// }
|
|
33
28
|
/**
|
|
34
29
|
* 注文日時から新しい注文番号を発行する
|
|
35
30
|
* グローバルユニークである前提
|
|
36
31
|
*/
|
|
37
32
|
async issueOrderNumber(params) {
|
|
38
|
-
const { fpeSecret, version
|
|
39
|
-
// versioningForceProjects
|
|
40
|
-
// versioningExceptionProjects
|
|
41
|
-
} = await this.findSetting();
|
|
33
|
+
const { fpeSecret, version } = await this.findSetting();
|
|
42
34
|
const timestamp = (0, moment_timezone_1.default)(params.orderDate)
|
|
43
35
|
.valueOf()
|
|
44
36
|
.toString();
|
|
45
|
-
// const projectPrefix = params.project.alternateName
|
|
46
|
-
// .toUpperCase();
|
|
47
37
|
const projectPrefix = params.project.alternateName
|
|
48
38
|
.toUpperCase().at(0);
|
|
49
|
-
// const dataFeedIdentifier = `${projectPrefix}:${timestamp}`;
|
|
50
39
|
const dataFeedIdentifier = timestamp; // reconsider increment scope(2026-02-21~)
|
|
51
40
|
const dataFeedExpires = (0, moment_timezone_1.default)(params.orderDate)
|
|
52
41
|
.add(1, 'minute') // ミリ秒でカウントしていくので、注文日時後1分で十分
|
|
@@ -57,32 +46,16 @@ class OrderNumberRepo {
|
|
|
57
46
|
expires: dataFeedExpires
|
|
58
47
|
});
|
|
59
48
|
let orderNumber;
|
|
60
|
-
const useVersioning = (validFrom instanceof Date && (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
orderNumber
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
].join(ORDER_NUMBER_SEPARATOR)}`;
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
// discontinue version0(2026-02-13~)
|
|
74
|
-
throw new factory_1.factory.errors.NotImplemented('orderNumber with no version discontinued');
|
|
75
|
-
// orderNumber = OrderNumberRepo.GENERATE_VERSION0(timestamp, incrReply);
|
|
76
|
-
// orderNumber = `${projectPrefix}${orderNumber}`;
|
|
77
|
-
// orderNumber = `${[
|
|
78
|
-
// // tslint:disable-next-line:no-magic-numbers
|
|
79
|
-
// orderNumber.slice(0, 4),
|
|
80
|
-
// // tslint:disable-next-line:no-magic-numbers
|
|
81
|
-
// orderNumber.slice(4, 11),
|
|
82
|
-
// // tslint:disable-next-line:no-magic-numbers
|
|
83
|
-
// orderNumber.slice(11)
|
|
84
|
-
// ].join(ORDER_NUMBER_SEPARATOR)}`;
|
|
85
|
-
}
|
|
49
|
+
// const useVersioning: boolean = (validFrom instanceof Date && moment(validFrom)
|
|
50
|
+
// .isSameOrBefore(params.orderDate));
|
|
51
|
+
const transactionFactory = new transactionNumber_1.TransactionNumberFactory({ fpeSecret, version });
|
|
52
|
+
orderNumber = transactionFactory.generate(timestamp, incrReply);
|
|
53
|
+
orderNumber = `${projectPrefix}${orderNumber}`; // 桁数をversion0に合わせるためにエイリアスの1文字目のみを採用
|
|
54
|
+
orderNumber = `${[
|
|
55
|
+
orderNumber.slice(0, 4),
|
|
56
|
+
orderNumber.slice(4, 11),
|
|
57
|
+
orderNumber.slice(11)
|
|
58
|
+
].join(ORDER_NUMBER_SEPARATOR)}`;
|
|
86
59
|
return orderNumber;
|
|
87
60
|
}
|
|
88
61
|
async decrypt(id) {
|
|
@@ -97,41 +70,40 @@ class OrderNumberRepo {
|
|
|
97
70
|
throw new factory_1.factory.errors.NotImplemented('no version not implemented');
|
|
98
71
|
}
|
|
99
72
|
}
|
|
73
|
+
clearSettingCache() {
|
|
74
|
+
OrderNumberRepo.cacheExpiry = 0;
|
|
75
|
+
OrderNumberRepo.cachedSettings = undefined;
|
|
76
|
+
}
|
|
100
77
|
/**
|
|
101
78
|
* 注文番号生成設定を検索する
|
|
102
79
|
*/
|
|
103
80
|
async findSetting() {
|
|
81
|
+
const now = Date.now();
|
|
82
|
+
// キャッシュ参照(2026-06-22~)
|
|
83
|
+
if (OrderNumberRepo.cachedSettings !== undefined && now < OrderNumberRepo.cacheExpiry) {
|
|
84
|
+
return OrderNumberRepo.cachedSettings;
|
|
85
|
+
}
|
|
104
86
|
const filterQuery = { 'project.id': { $eq: '*' } };
|
|
105
|
-
const
|
|
87
|
+
const setting = await this.settingModel.findOne(filterQuery, {
|
|
106
88
|
_id: 0,
|
|
107
89
|
orderNumber: 1
|
|
108
|
-
}
|
|
109
|
-
const setting = await this.settingModel.findOne(filterQuery, projection)
|
|
90
|
+
})
|
|
110
91
|
.lean()
|
|
111
92
|
.exec();
|
|
112
93
|
if (setting === null || setting.orderNumber === undefined) {
|
|
113
|
-
|
|
114
|
-
// versioningForceProjects: []
|
|
115
|
-
// versioningExceptionProjects: []
|
|
116
|
-
};
|
|
94
|
+
throw new factory_1.factory.errors.NotFound('setting.orderNumber');
|
|
117
95
|
}
|
|
118
|
-
const { fpeSecret, version
|
|
96
|
+
const { fpeSecret, version } = setting.orderNumber;
|
|
119
97
|
if (typeof fpeSecret !== 'string' || fpeSecret === '') {
|
|
120
98
|
throw new factory_1.factory.errors.NotFound('setting.orderNumber.secret');
|
|
121
99
|
}
|
|
122
100
|
if (typeof version !== 'string' || version === '') {
|
|
123
101
|
throw new factory_1.factory.errors.NotFound('setting.orderNumber.version');
|
|
124
102
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return
|
|
129
|
-
fpeSecret, version, validFrom
|
|
130
|
-
// versioningForceProjects: [
|
|
131
|
-
// ...(Array.isArray(versioningForceProjects)) ? versioningForceProjects : []
|
|
132
|
-
// ]
|
|
133
|
-
// versioningExceptionProjects: (Array.isArray(versioningExceptionProjects)) ? versioningExceptionProjects : []
|
|
134
|
-
};
|
|
103
|
+
// キャッシュを更新
|
|
104
|
+
OrderNumberRepo.cachedSettings = { fpeSecret, version };
|
|
105
|
+
OrderNumberRepo.cacheExpiry = now + OrderNumberRepo.CACHE_TTL_MS;
|
|
106
|
+
return OrderNumberRepo.cachedSettings;
|
|
135
107
|
}
|
|
136
108
|
}
|
|
137
109
|
exports.OrderNumberRepo = OrderNumberRepo;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Connection } from 'mongoose';
|
|
1
|
+
import type { Connection, UpdateQuery } from 'mongoose';
|
|
2
2
|
import { factory } from '../factory';
|
|
3
3
|
import { IDocType } from './mongoose/schemas/transaction';
|
|
4
4
|
interface IAggregationByStatus {
|
|
@@ -116,6 +116,10 @@ export declare class TransactionRepo {
|
|
|
116
116
|
filter: any;
|
|
117
117
|
$unset: any;
|
|
118
118
|
}): Promise<import("mongoose").UpdateWriteOpResult>;
|
|
119
|
+
updateById4migration(params: {
|
|
120
|
+
id: string;
|
|
121
|
+
update: UpdateQuery<IDocType>;
|
|
122
|
+
}): Promise<import("mongoose").UpdateWriteOpResult>;
|
|
119
123
|
/**
|
|
120
124
|
* 終了日時を一定期間過ぎたアクションを削除する
|
|
121
125
|
*/
|
|
@@ -297,6 +297,10 @@ class TransactionRepo {
|
|
|
297
297
|
return this.transactionModel.updateMany(params.filter, { $unset: params.$unset }, { timestamps: false })
|
|
298
298
|
.exec();
|
|
299
299
|
}
|
|
300
|
+
async updateById4migration(params) {
|
|
301
|
+
return this.transactionModel.updateOne({ _id: { $eq: params.id } }, params.update)
|
|
302
|
+
.exec();
|
|
303
|
+
}
|
|
300
304
|
/**
|
|
301
305
|
* 終了日時を一定期間過ぎたアクションを削除する
|
|
302
306
|
*/
|
|
@@ -10,12 +10,9 @@ export declare function acceptOffer(params: {
|
|
|
10
10
|
project: {
|
|
11
11
|
id: string;
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*/
|
|
17
|
-
priceSpecification?: factory.order.ITicketPriceSpecification;
|
|
18
|
-
})[];
|
|
13
|
+
placeOrderId: string;
|
|
14
|
+
acceptedOffers: IMinimizedAcceptedOffer[] | factory.order.ICOAAcceptedOffer[];
|
|
15
|
+
broker?: factory.order.IBroker;
|
|
19
16
|
}): IAcceptOfferOperation<void>;
|
|
20
17
|
export declare function voidAcceptedOffer(params: {
|
|
21
18
|
/**
|
|
@@ -13,7 +13,9 @@ function acceptOffer(params) {
|
|
|
13
13
|
await repos.orderInTransaction.acceptOffer({
|
|
14
14
|
orderNumber: params.orderNumber,
|
|
15
15
|
project: { id: params.project.id, typeOf: factory_1.factory.organizationType.Project },
|
|
16
|
-
|
|
16
|
+
identifier: params.placeOrderId,
|
|
17
|
+
acceptedOffers: params.acceptedOffers,
|
|
18
|
+
...((params.broker !== undefined) && { broker: params.broker })
|
|
17
19
|
});
|
|
18
20
|
};
|
|
19
21
|
}
|