@chevre/domain 25.0.0-alpha.8 → 25.0.0
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/message.d.ts +7 -15
- package/lib/chevre/repo/message.js +37 -74
- package/lib/chevre/repo/mongoose/schemas/message.d.ts +1 -1
- package/lib/chevre/repo/mongoose/schemas/order.d.ts +4 -0
- package/lib/chevre/repo/mongoose/schemas/order.js +11 -110
- package/lib/chevre/repo/mongoose/schemas/setting.d.ts +7 -15
- package/lib/chevre/repo/mongoose/schemas/setting.js +1 -1
- package/lib/chevre/repo/mongoose/schemas/transaction.js +51 -50
- package/lib/chevre/repo/order.d.ts +3 -7
- package/lib/chevre/repo/order.js +56 -26
- package/lib/chevre/repo/orderInTransaction.d.ts +45 -22
- package/lib/chevre/repo/orderInTransaction.js +108 -77
- package/lib/chevre/repo/orderNumber.d.ts +4 -0
- package/lib/chevre/repo/orderNumber.js +32 -60
- package/lib/chevre/repo/passport.d.ts +5 -2
- package/lib/chevre/repo/setting/waiter.d.ts +17 -0
- package/lib/chevre/repo/setting/waiter.js +39 -0
- package/lib/chevre/repo/setting.d.ts +12 -11
- package/lib/chevre/repo/setting.js +6 -18
- package/lib/chevre/repo/task.d.ts +1 -1
- package/lib/chevre/repo/transaction/placeOrder.d.ts +1 -6
- package/lib/chevre/repo/transaction/placeOrder.js +37 -26
- package/lib/chevre/repo/transaction.d.ts +1 -1
- package/lib/chevre/repo/transaction.js +2 -2
- package/lib/chevre/repository.d.ts +5 -0
- package/lib/chevre/repository.js +11 -0
- package/lib/chevre/service/assetTransaction/reserve/start.d.ts +0 -2
- package/lib/chevre/service/offer/any.d.ts +2 -3
- package/lib/chevre/service/offer/any.js +8 -8
- package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre.d.ts +0 -2
- package/lib/chevre/service/offer/event/authorize.d.ts +0 -4
- package/lib/chevre/service/offer/event/authorize.js +6 -8
- package/lib/chevre/service/offer/event/voidTransaction.js +29 -17
- package/lib/chevre/service/offer/event/voidTransactionByActionId.js +16 -12
- package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.d.ts +0 -6
- package/lib/chevre/service/offer/eventServiceByCOA/acceptOffer.js +10 -12
- package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.d.ts +1 -1
- package/lib/chevre/service/offer/eventServiceByCOA/authorize.js +7 -7
- package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +21 -17
- package/lib/chevre/service/order/deleteOrder.d.ts +6 -10
- package/lib/chevre/service/order/deleteOrder.js +7 -48
- package/lib/chevre/service/order/onOrderStatusChanged/onOrderCancelled/factory.d.ts +1 -1
- package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially/factory.d.ts +1 -1
- package/lib/chevre/service/order/onOrderStatusChanged/onOrderPaymentDue.d.ts +4 -1
- package/lib/chevre/service/order/onOrderStatusChanged/onOrderPaymentDue.js +1 -26
- package/lib/chevre/service/order/onOrderStatusChanged/onOrderReturned/factory.d.ts +1 -1
- package/lib/chevre/service/order/placeOrder/createPlacingOrderFromExistingTransaction.js +3 -2
- package/lib/chevre/service/order/placeOrder/factory.d.ts +1 -1
- package/lib/chevre/service/order/placeOrder/factory.js +6 -6
- package/lib/chevre/service/order/placeOrder/voidAcceptedOfferIfNecessary.d.ts +1 -3
- package/lib/chevre/service/order/placeOrder/voidAcceptedOfferIfNecessary.js +3 -15
- package/lib/chevre/service/order/placeOrder.js +6 -6
- package/lib/chevre/service/order.d.ts +1 -2
- package/lib/chevre/service/order.js +1 -5
- package/lib/chevre/service/payment/any/authorize/fixOrderAsNeeded.d.ts +2 -4
- package/lib/chevre/service/payment/any/authorize/fixOrderAsNeeded.js +4 -6
- package/lib/chevre/service/payment/any/authorize.d.ts +2 -0
- package/lib/chevre/service/payment/any/publishPaymentUrl.d.ts +0 -4
- package/lib/chevre/service/payment/any/publishPaymentUrl.js +5 -8
- package/lib/chevre/service/task/acceptCOAOffer.js +8 -10
- package/lib/chevre/service/task/authorizePayment.js +2 -6
- package/lib/chevre/service/task/deleteTransaction.js +2 -10
- package/lib/chevre/service/task/publishPaymentUrl.js +6 -9
- package/lib/chevre/service/taskHandler.js +0 -1
- package/lib/chevre/service/transaction/deleteTransaction.d.ts +8 -16
- package/lib/chevre/service/transaction/deleteTransaction.js +46 -145
- package/lib/chevre/service/transaction/placeOrder/confirm/factory/result.d.ts +7 -2
- package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions/sendEmailMessage.d.ts +3 -2
- package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions.d.ts +3 -2
- package/lib/chevre/service/transaction/placeOrder/confirm.d.ts +2 -5
- package/lib/chevre/service/transaction/placeOrder/confirm.js +29 -24
- package/lib/chevre/service/transaction/placeOrder/exportTasks/factory.d.ts +2 -3
- package/lib/chevre/service/transaction/placeOrder/exportTasks/factory.js +45 -54
- package/lib/chevre/service/transaction/placeOrder/exportTasksById.d.ts +0 -4
- package/lib/chevre/service/transaction/placeOrder/exportTasksById.js +2 -3
- package/lib/chevre/service/transaction/placeOrder/issueOrderNumberIfNotExist.d.ts +5 -0
- package/lib/chevre/service/transaction/placeOrder/issueOrderNumberIfNotExist.js +37 -23
- package/lib/chevre/service/transaction/placeOrder/start/factory.d.ts +20 -4
- package/lib/chevre/service/transaction/placeOrder/start/factory.js +20 -7
- package/lib/chevre/service/transaction/placeOrder/start.d.ts +9 -4
- package/lib/chevre/service/transaction/placeOrder/start.js +18 -1
- package/lib/chevre/service/transaction/placeOrder/updateAgent.d.ts +0 -4
- package/lib/chevre/service/transaction/placeOrder/updateAgent.js +20 -22
- package/lib/chevre/service/transaction/placeOrder.d.ts +1 -2
- package/lib/chevre/service/transaction/placeOrder.js +1 -3
- package/lib/chevre/service/transaction.d.ts +0 -4
- package/lib/chevre/service/transaction.js +1 -1
- package/lib/chevre/service.d.ts +0 -2
- package/lib/chevre/service.js +0 -2
- package/package.json +2 -2
- package/lib/chevre/factory/order.d.ts +0 -2
- package/lib/chevre/factory/order.js +0 -5
- package/lib/chevre/service/order/placeOrderWithoutTransaction.d.ts +0 -22
- package/lib/chevre/service/order/placeOrderWithoutTransaction.js +0 -51
- package/lib/chevre/service/task/deletePerson.d.ts +0 -6
- package/lib/chevre/service/task/deletePerson.js +0 -465
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フィールドを厳密に定義する
|
|
@@ -239,6 +239,10 @@ class OrderRepo {
|
|
|
239
239
|
}
|
|
240
240
|
});
|
|
241
241
|
}
|
|
242
|
+
const identifierEq = params.identifier?.$eq;
|
|
243
|
+
if (typeof identifierEq === 'string') {
|
|
244
|
+
andConditions.push({ identifier: { $eq: identifierEq } });
|
|
245
|
+
}
|
|
242
246
|
if (Array.isArray(params.orderNumbers)) {
|
|
243
247
|
if (params.orderNumbers.length === 1) {
|
|
244
248
|
// use $eq(2025-04-01~)
|
|
@@ -483,31 +487,37 @@ class OrderRepo {
|
|
|
483
487
|
}
|
|
484
488
|
return andConditions;
|
|
485
489
|
}
|
|
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
|
-
|
|
490
|
+
// OrderInTransactionリポジトリにて注文ドキュメントが生成されるように変更したのでもう不要
|
|
491
|
+
// /**
|
|
492
|
+
// * なければ作成する
|
|
493
|
+
// */
|
|
494
|
+
// public async createIfNotExist(order: IOrderWithoutAcceptedOffers & {
|
|
495
|
+
// acceptedOffers: factory.order.IAcceptedOffer[];
|
|
496
|
+
// }): Promise<void> {
|
|
497
|
+
// try {
|
|
498
|
+
// // 存在しなければ上書き
|
|
499
|
+
// // updateOneに変更(2024-01-14~)
|
|
500
|
+
// // await this.orderModel.findOneAndUpdate(
|
|
501
|
+
// await this.orderModel.updateOne(
|
|
502
|
+
// { orderNumber: order.orderNumber },
|
|
503
|
+
// { $setOnInsert: order },
|
|
504
|
+
// {
|
|
505
|
+
// // new: true,
|
|
506
|
+
// upsert: true
|
|
507
|
+
// }
|
|
508
|
+
// )
|
|
509
|
+
// .exec();
|
|
510
|
+
// } catch (error) {
|
|
511
|
+
// let throwsError = true;
|
|
512
|
+
// if (await isMongoDuplicateError(error)) {
|
|
513
|
+
// // すでにorderNumberが存在する場合ok
|
|
514
|
+
// throwsError = false;
|
|
515
|
+
// }
|
|
516
|
+
// if (throwsError) {
|
|
517
|
+
// throw error;
|
|
518
|
+
// }
|
|
519
|
+
// }
|
|
520
|
+
// }
|
|
511
521
|
/**
|
|
512
522
|
* 注文ステータスを変更する
|
|
513
523
|
*/
|
|
@@ -838,6 +848,26 @@ class OrderRepo {
|
|
|
838
848
|
})
|
|
839
849
|
.exec();
|
|
840
850
|
}
|
|
851
|
+
// public async updateIdentifier4migration(params: {
|
|
852
|
+
// project: { id: string };
|
|
853
|
+
// orderNumber: string;
|
|
854
|
+
// identifier: string;
|
|
855
|
+
// }) {
|
|
856
|
+
// const { orderNumber, project, identifier } = params;
|
|
857
|
+
// return this.orderModel.updateOne(
|
|
858
|
+
// {
|
|
859
|
+
// orderNumber: { $eq: orderNumber },
|
|
860
|
+
// 'project.id': { $eq: project.id },
|
|
861
|
+
// typeOf: { $eq: factory.order.OrderType.Order }
|
|
862
|
+
// },
|
|
863
|
+
// {
|
|
864
|
+
// $set: {
|
|
865
|
+
// ...(typeof identifier === 'string') ? { identifier } : undefined
|
|
866
|
+
// }
|
|
867
|
+
// }
|
|
868
|
+
// )
|
|
869
|
+
// .exec();
|
|
870
|
+
// }
|
|
841
871
|
async aggregateOrder(params) {
|
|
842
872
|
const matchConditions = {
|
|
843
873
|
orderDate: {
|
|
@@ -1,16 +1,21 @@
|
|
|
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
|
+
export type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project' | 'broker'> & {
|
|
5
5
|
typeOf: factory.transactionType.PlaceOrder;
|
|
6
6
|
orderDate: Date;
|
|
7
|
+
/**
|
|
8
|
+
* 注文取引IDとして再定義(2026-06-22~)
|
|
9
|
+
*/
|
|
10
|
+
identifier: string;
|
|
7
11
|
acceptedOffers: factory.order.IAcceptedOffer[];
|
|
8
12
|
customer?: factory.order.ICustomer;
|
|
13
|
+
seller?: factory.order.ISeller;
|
|
9
14
|
};
|
|
10
15
|
/**
|
|
11
16
|
* typeOf: Orderへドキュメント変換時の編集フィールド
|
|
12
17
|
*/
|
|
13
|
-
export type IPlacingOrder = Pick<factory.order.IOrder, 'confirmationNumber' | 'orderDate' | 'orderNumber' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'price' | 'priceCurrency' | '
|
|
18
|
+
export type IPlacingOrder = Pick<factory.order.IOrder, 'confirmationNumber' | 'orderDate' | 'orderNumber' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'price' | 'priceCurrency' | 'typeOf'> & {
|
|
14
19
|
url?: never;
|
|
15
20
|
identifier?: never;
|
|
16
21
|
name?: never;
|
|
@@ -26,6 +31,10 @@ export type IPlacingOrder = Pick<factory.order.IOrder, 'confirmationNumber' | 'o
|
|
|
26
31
|
* 上書きしてはいけない
|
|
27
32
|
*/
|
|
28
33
|
broker?: never;
|
|
34
|
+
/**
|
|
35
|
+
* 上書きしてはいけない
|
|
36
|
+
*/
|
|
37
|
+
seller?: never;
|
|
29
38
|
};
|
|
30
39
|
export type IMinimizedReservationFor = Pick<factory.order.IEventAsReservationFor, 'endDate' | 'id' | 'startDate' | 'typeOf'> & {
|
|
31
40
|
location: Pick<factory.order.IEventAsReservationFor['location'], 'branchCode' | 'typeOf'>;
|
|
@@ -53,12 +62,35 @@ export type IMinimizedAcceptedOffer = Pick<factory.order.IOptimizedAcceptedOffer
|
|
|
53
62
|
export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
54
63
|
private readonly orderModel;
|
|
55
64
|
constructor(connection: Connection);
|
|
65
|
+
createPlaceOrderIfNotExists(params: Pick<IOrderInTransaction, 'orderNumber' | 'project' | 'identifier' | 'broker' | 'seller' | 'customer'>): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
66
|
+
/**
|
|
67
|
+
* 注文取引から注文番号を参照する
|
|
68
|
+
* 存在しなければNotFoundError
|
|
69
|
+
*/
|
|
70
|
+
findOrderNumberByIdentifier(params: {
|
|
71
|
+
identifier: string;
|
|
72
|
+
project: {
|
|
73
|
+
id: string;
|
|
74
|
+
};
|
|
75
|
+
}, options: {
|
|
76
|
+
/**
|
|
77
|
+
* 注文取引タイプのドキュメントのみを参照対象にするかどうか
|
|
78
|
+
*/
|
|
79
|
+
onlyPlaceOrder: boolean;
|
|
80
|
+
}): Promise<string>;
|
|
81
|
+
/**
|
|
82
|
+
* 注文ドキュメントからcustomer属性を参照する
|
|
83
|
+
* customer未設定であれば、NotFound
|
|
84
|
+
*/
|
|
85
|
+
findCustomerByOrderIdentifier(params: {
|
|
86
|
+
identifier: string;
|
|
87
|
+
}): Promise<factory.order.ICustomer>;
|
|
56
88
|
/**
|
|
57
89
|
* 取引進行中の注文からacceptedOffersを検索する
|
|
58
90
|
* 予約取引から予約ごとの価格仕様も参照する
|
|
59
91
|
*/
|
|
60
|
-
|
|
61
|
-
|
|
92
|
+
findAcceptedOffersWithPriceByIdentifier(params: {
|
|
93
|
+
identifier: string;
|
|
62
94
|
project: {
|
|
63
95
|
id: string;
|
|
64
96
|
};
|
|
@@ -69,21 +101,22 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
69
101
|
* 注文を受注する
|
|
70
102
|
* typeOf: PlaceOrder -> typeOf: Order
|
|
71
103
|
*/
|
|
72
|
-
|
|
104
|
+
placeOrderByIdentifier(filter: {
|
|
105
|
+
identifier: string;
|
|
106
|
+
}, order: IPlacingOrder): Promise<void>;
|
|
73
107
|
/**
|
|
74
108
|
* 注文documentがなければ作成し、受け入れられたオファーを追加する
|
|
75
109
|
* このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
|
|
76
110
|
*/
|
|
77
|
-
|
|
111
|
+
acceptOfferByIdentifier(params: Pick<IOrderInTransaction, 'project' | 'identifier'> & {
|
|
78
112
|
acceptedOffers: IMinimizedAcceptedOffer[] | factory.order.ICOAAcceptedOffer[];
|
|
79
|
-
broker?: factory.order.IBroker;
|
|
80
113
|
}): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
81
114
|
/**
|
|
82
115
|
* serialNumberからオファーを除外する
|
|
83
116
|
* ホワイトリストとブラックリスト両方に対応
|
|
84
117
|
*/
|
|
85
|
-
|
|
86
|
-
|
|
118
|
+
voidAcceptedOfferByIdentifier(params: {
|
|
119
|
+
identifier: string;
|
|
87
120
|
acceptedOffers: {
|
|
88
121
|
serialNumber: {
|
|
89
122
|
$in?: string[];
|
|
@@ -91,20 +124,10 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
91
124
|
};
|
|
92
125
|
};
|
|
93
126
|
}): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
94
|
-
|
|
127
|
+
setCustomerByIdentifier(params: Pick<IOrderInTransaction, 'project' | 'identifier'> & {
|
|
95
128
|
customer: factory.order.ICustomer;
|
|
96
129
|
}): Promise<import("mongoose").UpdateWriteOpResult>;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
* customer未設定であれば、NotFound
|
|
100
|
-
*/
|
|
101
|
-
findCustomerByOrderNumber(params: {
|
|
102
|
-
orderNumber: {
|
|
103
|
-
$eq: string;
|
|
104
|
-
};
|
|
105
|
-
}): Promise<factory.order.ICustomer>;
|
|
106
|
-
deleteByOrderNumber(params: {
|
|
107
|
-
orderNumber: string;
|
|
130
|
+
deleteByIdentifier(params: {
|
|
131
|
+
identifier: string;
|
|
108
132
|
}): Promise<import("mongodb").DeleteResult>;
|
|
109
133
|
}
|
|
110
|
-
export {};
|
|
@@ -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,13 +16,86 @@ 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, seller, customer } = 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
|
+
...((seller !== undefined) && { seller }),
|
|
28
|
+
...((customer !== undefined) && { customer }),
|
|
29
|
+
...((broker !== undefined) && { broker })
|
|
30
|
+
};
|
|
31
|
+
try {
|
|
32
|
+
return this.orderModel.updateOne({
|
|
33
|
+
identifier: { $eq: identifier }, // 取引IDに対してユニークネスを保証する
|
|
34
|
+
}, { $setOnInsert: setOnInsert }, { upsert: true })
|
|
35
|
+
.exec();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
let throwsError = true;
|
|
39
|
+
if (await (0, errorHandler_1.isMongoDuplicateError)(error)) {
|
|
40
|
+
// すでにidentifierが存在する場合ok
|
|
41
|
+
throwsError = false;
|
|
42
|
+
}
|
|
43
|
+
if (throwsError) {
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 注文取引から注文番号を参照する
|
|
50
|
+
* 存在しなければNotFoundError
|
|
51
|
+
*/
|
|
52
|
+
async findOrderNumberByIdentifier(params, options) {
|
|
53
|
+
const { project, identifier } = params;
|
|
54
|
+
const onlyPlaceOrder = options.onlyPlaceOrder === true;
|
|
55
|
+
const doc = await this.orderModel.findOne({
|
|
56
|
+
identifier: { $eq: identifier },
|
|
57
|
+
'project.id': { $eq: project.id },
|
|
58
|
+
...((onlyPlaceOrder) && { typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder } })
|
|
59
|
+
}, {
|
|
60
|
+
_id: 0,
|
|
61
|
+
orderNumber: 1
|
|
62
|
+
})
|
|
63
|
+
.lean()
|
|
64
|
+
.exec();
|
|
65
|
+
if (doc === null) {
|
|
66
|
+
throw new factory_1.factory.errors.NotFound('orderInTransaction');
|
|
67
|
+
}
|
|
68
|
+
return doc.orderNumber;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 注文ドキュメントからcustomer属性を参照する
|
|
72
|
+
* customer未設定であれば、NotFound
|
|
73
|
+
*/
|
|
74
|
+
async findCustomerByOrderIdentifier(params) {
|
|
75
|
+
const doc = await this.orderModel.findOne({
|
|
76
|
+
identifier: { $eq: params.identifier }
|
|
77
|
+
// typeOf: { $eq: factory.transactionType.PlaceOrder } // 検証しない
|
|
78
|
+
}, {
|
|
79
|
+
_id: 0,
|
|
80
|
+
customer: 1
|
|
81
|
+
})
|
|
82
|
+
.lean()
|
|
83
|
+
.exec();
|
|
84
|
+
if (doc === null) {
|
|
85
|
+
throw new factory_1.factory.errors.NotFound('orderInTransaction');
|
|
86
|
+
}
|
|
87
|
+
if (typeof doc.customer?.typeOf !== 'string') {
|
|
88
|
+
throw new factory_1.factory.errors.NotFound('orderInTransaction.customer');
|
|
89
|
+
}
|
|
90
|
+
return doc.customer;
|
|
91
|
+
}
|
|
18
92
|
/**
|
|
19
93
|
* 取引進行中の注文からacceptedOffersを検索する
|
|
20
94
|
* 予約取引から予約ごとの価格仕様も参照する
|
|
21
95
|
*/
|
|
22
|
-
async
|
|
96
|
+
async findAcceptedOffersWithPriceByIdentifier(params) {
|
|
23
97
|
const doc = await this.orderModel.findOne({
|
|
24
|
-
|
|
98
|
+
identifier: { $eq: params.identifier },
|
|
25
99
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder }
|
|
26
100
|
}, { acceptedOffers: 1 })
|
|
27
101
|
.lean()
|
|
@@ -59,40 +133,19 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
59
133
|
};
|
|
60
134
|
});
|
|
61
135
|
}
|
|
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
136
|
/**
|
|
83
137
|
* 注文を受注する
|
|
84
138
|
* typeOf: PlaceOrder -> typeOf: Order
|
|
85
139
|
*/
|
|
86
|
-
async
|
|
140
|
+
async placeOrderByIdentifier(filter, order) {
|
|
141
|
+
const { identifier } = filter;
|
|
87
142
|
if (!(order.orderDate instanceof Date)) {
|
|
88
143
|
throw new factory_1.factory.errors.Argument('orderDate', 'must be Date');
|
|
89
144
|
}
|
|
90
|
-
// acceptedOffersを上書きしない
|
|
91
|
-
// const { acceptedOffers, ...orderWithoutAcceptedOffers } = order;
|
|
92
145
|
const setFields = order;
|
|
93
146
|
// typeOf:PlaceOrderのドキュメントが存在すれば、typeOf:Orderに変更する
|
|
94
147
|
await this.orderModel.updateOne({
|
|
95
|
-
|
|
148
|
+
identifier: { $eq: identifier },
|
|
96
149
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder }
|
|
97
150
|
}, { $set: setFields }, {})
|
|
98
151
|
.exec();
|
|
@@ -101,48 +154,44 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
101
154
|
* 注文documentがなければ作成し、受け入れられたオファーを追加する
|
|
102
155
|
* このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
|
|
103
156
|
*/
|
|
104
|
-
async
|
|
157
|
+
async acceptOfferByIdentifier(params) {
|
|
105
158
|
if (!Array.isArray(params.acceptedOffers) || params.acceptedOffers.length === 0) {
|
|
106
159
|
return;
|
|
107
160
|
}
|
|
108
|
-
const
|
|
109
|
-
typeOf: factory_1.factory.transactionType.PlaceOrder,
|
|
110
|
-
orderDate: new Date(), // orderDate required(2024-12-09~)
|
|
111
|
-
orderNumber: params.orderNumber,
|
|
112
|
-
project: params.project
|
|
113
|
-
};
|
|
114
|
-
return this.orderModel.updateOne({
|
|
161
|
+
const result = await this.orderModel.updateOne({
|
|
115
162
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
116
|
-
|
|
163
|
+
identifier: { $eq: params.identifier },
|
|
117
164
|
// プロジェクトでもフィルター(注文番号重複バグがあったため)(2026-02-21~)
|
|
118
165
|
// 万が一異なるプロジェクトで同じ注文番号でオファーを受け入れようとしても、DBにインデックスによってDuplicateKey
|
|
119
166
|
'project.id': { $eq: params.project.id }
|
|
120
167
|
}, {
|
|
121
|
-
$setOnInsert: setOnInsert,
|
|
168
|
+
// $setOnInsert: setOnInsert, // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
122
169
|
$push: {
|
|
123
170
|
acceptedOffers: {
|
|
124
171
|
$each: params.acceptedOffers
|
|
125
172
|
}
|
|
126
|
-
},
|
|
127
|
-
$set: {
|
|
128
|
-
...((params.broker !== undefined) && {
|
|
129
|
-
broker: { id: params.broker.id, typeOf: params.broker.typeOf }
|
|
130
|
-
}) // set broker(2026-06-21~)
|
|
131
173
|
}
|
|
132
|
-
}, {
|
|
174
|
+
}, {
|
|
175
|
+
// upsert: true // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
176
|
+
})
|
|
133
177
|
.exec();
|
|
178
|
+
if (result.matchedCount !== 1) {
|
|
179
|
+
console.error(params, result);
|
|
180
|
+
throw new factory_1.factory.errors.Internal(`orderInTransaction not found`);
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
134
183
|
}
|
|
135
184
|
/**
|
|
136
185
|
* serialNumberからオファーを除外する
|
|
137
186
|
* ホワイトリストとブラックリスト両方に対応
|
|
138
187
|
*/
|
|
139
|
-
async
|
|
188
|
+
async voidAcceptedOfferByIdentifier(params) {
|
|
140
189
|
const serialNumberIn = params.acceptedOffers.serialNumber.$in;
|
|
141
190
|
const serialNumberNin = params.acceptedOffers.serialNumber.$nin;
|
|
142
191
|
if (Array.isArray(serialNumberIn) && serialNumberIn.length > 0) {
|
|
143
192
|
return this.orderModel.updateOne({
|
|
144
193
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
145
|
-
|
|
194
|
+
identifier: { $eq: params.identifier }
|
|
146
195
|
}, {
|
|
147
196
|
$pull: {
|
|
148
197
|
acceptedOffers: {
|
|
@@ -155,7 +204,7 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
155
204
|
else if (Array.isArray(serialNumberNin) && serialNumberNin.length > 0) {
|
|
156
205
|
return this.orderModel.updateOne({
|
|
157
206
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
158
|
-
|
|
207
|
+
identifier: { $eq: params.identifier }
|
|
159
208
|
}, {
|
|
160
209
|
$pull: {
|
|
161
210
|
acceptedOffers: {
|
|
@@ -169,51 +218,33 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
169
218
|
return;
|
|
170
219
|
}
|
|
171
220
|
}
|
|
172
|
-
async
|
|
173
|
-
const { customer,
|
|
221
|
+
async setCustomerByIdentifier(params) {
|
|
222
|
+
const { customer, identifier, project } = params;
|
|
174
223
|
const filter = {
|
|
175
224
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
176
|
-
|
|
225
|
+
identifier: { $eq: identifier },
|
|
177
226
|
// プロジェクトでもフィルター(注文番号重複バグがあったため)(2026-02-21~)
|
|
178
227
|
// 万が一異なるプロジェクトで同じ注文番号でオファーを受け入れようとしても、DBにインデックスによってDuplicateKey
|
|
179
228
|
'project.id': { $eq: project.id }
|
|
180
229
|
};
|
|
181
|
-
const setOnInsert = {
|
|
182
|
-
typeOf: factory_1.factory.transactionType.PlaceOrder,
|
|
183
|
-
orderDate: new Date(), // orderDate required(2024-12-09~)
|
|
184
|
-
orderNumber,
|
|
185
|
-
project
|
|
186
|
-
};
|
|
187
230
|
const setKeys = { customer };
|
|
188
|
-
|
|
189
|
-
$setOnInsert: setOnInsert,
|
|
231
|
+
const result = await this.orderModel.updateOne(filter, {
|
|
232
|
+
// $setOnInsert: setOnInsert, // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
190
233
|
$set: setKeys
|
|
191
|
-
}, {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* 注文ドキュメントからcustomer属性を参照する
|
|
196
|
-
* customer未設定であれば、NotFound
|
|
197
|
-
*/
|
|
198
|
-
async findCustomerByOrderNumber(params) {
|
|
199
|
-
const doc = await this.orderModel.findOne({
|
|
200
|
-
orderNumber: { $eq: params.orderNumber.$eq }
|
|
201
|
-
// typeOf: { $eq: factory.transactionType.PlaceOrder } // 検証しない
|
|
202
|
-
}, { customer: 1 })
|
|
203
|
-
.lean()
|
|
234
|
+
}, {
|
|
235
|
+
// upsert: true // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
236
|
+
})
|
|
204
237
|
.exec();
|
|
205
|
-
if (
|
|
206
|
-
|
|
238
|
+
if (result.matchedCount !== 1) {
|
|
239
|
+
console.error(params, result);
|
|
240
|
+
throw new factory_1.factory.errors.Internal(`orderInTransaction not found`);
|
|
207
241
|
}
|
|
208
|
-
|
|
209
|
-
throw new factory_1.factory.errors.NotFound('orderInTransaction.customer');
|
|
210
|
-
}
|
|
211
|
-
return doc.customer;
|
|
242
|
+
return result;
|
|
212
243
|
}
|
|
213
|
-
async
|
|
244
|
+
async deleteByIdentifier(params) {
|
|
214
245
|
return this.orderModel.deleteOne({
|
|
215
246
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
216
|
-
|
|
247
|
+
identifier: { $eq: params.identifier }
|
|
217
248
|
})
|
|
218
249
|
.exec();
|
|
219
250
|
}
|
|
@@ -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
|
*/
|