@chevre/domain 25.0.0-alpha.9 → 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.js +2 -110
- package/lib/chevre/repo/mongoose/schemas/setting.d.ts +7 -9
- 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 +1 -7
- package/lib/chevre/repo/order.js +56 -26
- package/lib/chevre/repo/orderInTransaction.d.ts +41 -22
- package/lib/chevre/repo/orderInTransaction.js +108 -79
- 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 +1 -3
- package/lib/chevre/service/offer/any.js +7 -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 +5 -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 +6 -7
- package/lib/chevre/service/offer/eventServiceByCOA/changeOffers.js +20 -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 +19 -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
|
@@ -1,7 +1,7 @@
|
|
|
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
7
|
/**
|
|
@@ -10,11 +10,12 @@ type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'>
|
|
|
10
10
|
identifier: string;
|
|
11
11
|
acceptedOffers: factory.order.IAcceptedOffer[];
|
|
12
12
|
customer?: factory.order.ICustomer;
|
|
13
|
+
seller?: factory.order.ISeller;
|
|
13
14
|
};
|
|
14
15
|
/**
|
|
15
16
|
* typeOf: Orderへドキュメント変換時の編集フィールド
|
|
16
17
|
*/
|
|
17
|
-
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'> & {
|
|
18
19
|
url?: never;
|
|
19
20
|
identifier?: never;
|
|
20
21
|
name?: never;
|
|
@@ -30,6 +31,10 @@ export type IPlacingOrder = Pick<factory.order.IOrder, 'confirmationNumber' | 'o
|
|
|
30
31
|
* 上書きしてはいけない
|
|
31
32
|
*/
|
|
32
33
|
broker?: never;
|
|
34
|
+
/**
|
|
35
|
+
* 上書きしてはいけない
|
|
36
|
+
*/
|
|
37
|
+
seller?: never;
|
|
33
38
|
};
|
|
34
39
|
export type IMinimizedReservationFor = Pick<factory.order.IEventAsReservationFor, 'endDate' | 'id' | 'startDate' | 'typeOf'> & {
|
|
35
40
|
location: Pick<factory.order.IEventAsReservationFor['location'], 'branchCode' | 'typeOf'>;
|
|
@@ -57,12 +62,35 @@ export type IMinimizedAcceptedOffer = Pick<factory.order.IOptimizedAcceptedOffer
|
|
|
57
62
|
export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
58
63
|
private readonly orderModel;
|
|
59
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>;
|
|
60
88
|
/**
|
|
61
89
|
* 取引進行中の注文からacceptedOffersを検索する
|
|
62
90
|
* 予約取引から予約ごとの価格仕様も参照する
|
|
63
91
|
*/
|
|
64
|
-
|
|
65
|
-
|
|
92
|
+
findAcceptedOffersWithPriceByIdentifier(params: {
|
|
93
|
+
identifier: string;
|
|
66
94
|
project: {
|
|
67
95
|
id: string;
|
|
68
96
|
};
|
|
@@ -73,21 +101,22 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
73
101
|
* 注文を受注する
|
|
74
102
|
* typeOf: PlaceOrder -> typeOf: Order
|
|
75
103
|
*/
|
|
76
|
-
|
|
104
|
+
placeOrderByIdentifier(filter: {
|
|
105
|
+
identifier: string;
|
|
106
|
+
}, order: IPlacingOrder): Promise<void>;
|
|
77
107
|
/**
|
|
78
108
|
* 注文documentがなければ作成し、受け入れられたオファーを追加する
|
|
79
109
|
* このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
|
|
80
110
|
*/
|
|
81
|
-
|
|
111
|
+
acceptOfferByIdentifier(params: Pick<IOrderInTransaction, 'project' | 'identifier'> & {
|
|
82
112
|
acceptedOffers: IMinimizedAcceptedOffer[] | factory.order.ICOAAcceptedOffer[];
|
|
83
|
-
broker?: factory.order.IBroker;
|
|
84
113
|
}): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
85
114
|
/**
|
|
86
115
|
* serialNumberからオファーを除外する
|
|
87
116
|
* ホワイトリストとブラックリスト両方に対応
|
|
88
117
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
118
|
+
voidAcceptedOfferByIdentifier(params: {
|
|
119
|
+
identifier: string;
|
|
91
120
|
acceptedOffers: {
|
|
92
121
|
serialNumber: {
|
|
93
122
|
$in?: string[];
|
|
@@ -95,20 +124,10 @@ export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
|
|
|
95
124
|
};
|
|
96
125
|
};
|
|
97
126
|
}): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
|
|
98
|
-
|
|
127
|
+
setCustomerByIdentifier(params: Pick<IOrderInTransaction, 'project' | 'identifier'> & {
|
|
99
128
|
customer: factory.order.ICustomer;
|
|
100
129
|
}): Promise<import("mongoose").UpdateWriteOpResult>;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
* customer未設定であれば、NotFound
|
|
104
|
-
*/
|
|
105
|
-
findCustomerByOrderNumber(params: {
|
|
106
|
-
orderNumber: {
|
|
107
|
-
$eq: string;
|
|
108
|
-
};
|
|
109
|
-
}): Promise<factory.order.ICustomer>;
|
|
110
|
-
deleteByOrderNumber(params: {
|
|
111
|
-
orderNumber: string;
|
|
130
|
+
deleteByIdentifier(params: {
|
|
131
|
+
identifier: string;
|
|
112
132
|
}): Promise<import("mongodb").DeleteResult>;
|
|
113
133
|
}
|
|
114
|
-
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,49 +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
|
-
identifier: params.identifier // 取引ID(2026-06-22~)
|
|
114
|
-
};
|
|
115
|
-
return this.orderModel.updateOne({
|
|
161
|
+
const result = await this.orderModel.updateOne({
|
|
116
162
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
117
|
-
|
|
163
|
+
identifier: { $eq: params.identifier },
|
|
118
164
|
// プロジェクトでもフィルター(注文番号重複バグがあったため)(2026-02-21~)
|
|
119
165
|
// 万が一異なるプロジェクトで同じ注文番号でオファーを受け入れようとしても、DBにインデックスによってDuplicateKey
|
|
120
166
|
'project.id': { $eq: params.project.id }
|
|
121
167
|
}, {
|
|
122
|
-
$setOnInsert: setOnInsert,
|
|
168
|
+
// $setOnInsert: setOnInsert, // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
123
169
|
$push: {
|
|
124
170
|
acceptedOffers: {
|
|
125
171
|
$each: params.acceptedOffers
|
|
126
172
|
}
|
|
127
|
-
},
|
|
128
|
-
$set: {
|
|
129
|
-
...((params.broker !== undefined) && {
|
|
130
|
-
broker: { id: params.broker.id, typeOf: params.broker.typeOf }
|
|
131
|
-
}) // set broker(2026-06-21~)
|
|
132
173
|
}
|
|
133
|
-
}, {
|
|
174
|
+
}, {
|
|
175
|
+
// upsert: true // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
176
|
+
})
|
|
134
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;
|
|
135
183
|
}
|
|
136
184
|
/**
|
|
137
185
|
* serialNumberからオファーを除外する
|
|
138
186
|
* ホワイトリストとブラックリスト両方に対応
|
|
139
187
|
*/
|
|
140
|
-
async
|
|
188
|
+
async voidAcceptedOfferByIdentifier(params) {
|
|
141
189
|
const serialNumberIn = params.acceptedOffers.serialNumber.$in;
|
|
142
190
|
const serialNumberNin = params.acceptedOffers.serialNumber.$nin;
|
|
143
191
|
if (Array.isArray(serialNumberIn) && serialNumberIn.length > 0) {
|
|
144
192
|
return this.orderModel.updateOne({
|
|
145
193
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
146
|
-
|
|
194
|
+
identifier: { $eq: params.identifier }
|
|
147
195
|
}, {
|
|
148
196
|
$pull: {
|
|
149
197
|
acceptedOffers: {
|
|
@@ -156,7 +204,7 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
156
204
|
else if (Array.isArray(serialNumberNin) && serialNumberNin.length > 0) {
|
|
157
205
|
return this.orderModel.updateOne({
|
|
158
206
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
159
|
-
|
|
207
|
+
identifier: { $eq: params.identifier }
|
|
160
208
|
}, {
|
|
161
209
|
$pull: {
|
|
162
210
|
acceptedOffers: {
|
|
@@ -170,52 +218,33 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
|
|
|
170
218
|
return;
|
|
171
219
|
}
|
|
172
220
|
}
|
|
173
|
-
async
|
|
174
|
-
const { customer,
|
|
221
|
+
async setCustomerByIdentifier(params) {
|
|
222
|
+
const { customer, identifier, project } = params;
|
|
175
223
|
const filter = {
|
|
176
224
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
177
|
-
|
|
225
|
+
identifier: { $eq: identifier },
|
|
178
226
|
// プロジェクトでもフィルター(注文番号重複バグがあったため)(2026-02-21~)
|
|
179
227
|
// 万が一異なるプロジェクトで同じ注文番号でオファーを受け入れようとしても、DBにインデックスによってDuplicateKey
|
|
180
228
|
'project.id': { $eq: project.id }
|
|
181
229
|
};
|
|
182
|
-
const setOnInsert = {
|
|
183
|
-
typeOf: factory_1.factory.transactionType.PlaceOrder,
|
|
184
|
-
orderDate: new Date(), // orderDate required(2024-12-09~)
|
|
185
|
-
orderNumber,
|
|
186
|
-
project,
|
|
187
|
-
identifier: params.identifier // 取引ID(2026-06-22~)
|
|
188
|
-
};
|
|
189
230
|
const setKeys = { customer };
|
|
190
|
-
|
|
191
|
-
$setOnInsert: setOnInsert,
|
|
231
|
+
const result = await this.orderModel.updateOne(filter, {
|
|
232
|
+
// $setOnInsert: setOnInsert, // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
192
233
|
$set: setKeys
|
|
193
|
-
}, {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* 注文ドキュメントからcustomer属性を参照する
|
|
198
|
-
* customer未設定であれば、NotFound
|
|
199
|
-
*/
|
|
200
|
-
async findCustomerByOrderNumber(params) {
|
|
201
|
-
const doc = await this.orderModel.findOne({
|
|
202
|
-
orderNumber: { $eq: params.orderNumber.$eq }
|
|
203
|
-
// typeOf: { $eq: factory.transactionType.PlaceOrder } // 検証しない
|
|
204
|
-
}, { customer: 1 })
|
|
205
|
-
.lean()
|
|
234
|
+
}, {
|
|
235
|
+
// upsert: true // createPlaceOrderIfNotExistsへ移行(2026-06-24~)
|
|
236
|
+
})
|
|
206
237
|
.exec();
|
|
207
|
-
if (
|
|
208
|
-
|
|
238
|
+
if (result.matchedCount !== 1) {
|
|
239
|
+
console.error(params, result);
|
|
240
|
+
throw new factory_1.factory.errors.Internal(`orderInTransaction not found`);
|
|
209
241
|
}
|
|
210
|
-
|
|
211
|
-
throw new factory_1.factory.errors.NotFound('orderInTransaction.customer');
|
|
212
|
-
}
|
|
213
|
-
return doc.customer;
|
|
242
|
+
return result;
|
|
214
243
|
}
|
|
215
|
-
async
|
|
244
|
+
async deleteByIdentifier(params) {
|
|
216
245
|
return this.orderModel.deleteOne({
|
|
217
246
|
typeOf: { $eq: factory_1.factory.transactionType.PlaceOrder },
|
|
218
|
-
|
|
247
|
+
identifier: { $eq: params.identifier }
|
|
219
248
|
})
|
|
220
249
|
.exec();
|
|
221
250
|
}
|
|
@@ -20,7 +20,6 @@ interface IOptions {
|
|
|
20
20
|
secret: string;
|
|
21
21
|
passportValidator?: IPassportValidator;
|
|
22
22
|
}
|
|
23
|
-
type IStartParams = (factory.transaction.placeOrder.IStartParamsWithoutDetail) & {};
|
|
24
23
|
/**
|
|
25
24
|
* 取引許可証リポジトリ
|
|
26
25
|
*/
|
|
@@ -34,7 +33,11 @@ export declare class PassportRepo {
|
|
|
34
33
|
/**
|
|
35
34
|
* 許可証トークンがあれば検証する
|
|
36
35
|
*/
|
|
37
|
-
validatePassportTokenIfExist(params:
|
|
36
|
+
validatePassportTokenIfExist(params: {
|
|
37
|
+
object?: {
|
|
38
|
+
passport?: factory.transaction.IPassportBeforeStart;
|
|
39
|
+
};
|
|
40
|
+
}): Promise<{
|
|
38
41
|
passport?: IVerifiedPassport;
|
|
39
42
|
customerType?: string;
|
|
40
43
|
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Connection } from 'mongoose';
|
|
2
|
+
import { IWaiterSettings } from '../mongoose/schemas/setting';
|
|
3
|
+
interface IDBOptions {
|
|
4
|
+
connection: Connection;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 流入制限設定リポジトリ
|
|
8
|
+
*/
|
|
9
|
+
export declare class WaiterSettingRepo {
|
|
10
|
+
private readonly settingModel;
|
|
11
|
+
private static cachedSettings;
|
|
12
|
+
private static cacheExpiry;
|
|
13
|
+
private static readonly CACHE_TTL_MS;
|
|
14
|
+
constructor(options: IDBOptions);
|
|
15
|
+
findWaiterSetting(): Promise<IWaiterSettings | undefined>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WaiterSettingRepo = void 0;
|
|
4
|
+
const setting_1 = require("../mongoose/schemas/setting");
|
|
5
|
+
/**
|
|
6
|
+
* 流入制限設定リポジトリ
|
|
7
|
+
*/
|
|
8
|
+
class WaiterSettingRepo {
|
|
9
|
+
settingModel;
|
|
10
|
+
// static にすることで、クラスが何回 new されてもメモリ上で1つだけ保持される
|
|
11
|
+
static cachedSettings;
|
|
12
|
+
static cacheExpiry = 0;
|
|
13
|
+
static CACHE_TTL_MS = 10 * 60 * 1000; // 10分
|
|
14
|
+
constructor(options) {
|
|
15
|
+
const { connection } = options;
|
|
16
|
+
this.settingModel = connection.model(setting_1.modelName, (0, setting_1.createSchema)());
|
|
17
|
+
}
|
|
18
|
+
async findWaiterSetting() {
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
// キャッシュ参照
|
|
21
|
+
if (WaiterSettingRepo.cachedSettings !== undefined && now < WaiterSettingRepo.cacheExpiry) {
|
|
22
|
+
return WaiterSettingRepo.cachedSettings;
|
|
23
|
+
}
|
|
24
|
+
const settingDoc = await this.settingModel.findOne({ 'project.id': { $eq: '*' } }, {
|
|
25
|
+
_id: 0,
|
|
26
|
+
waiter: 1
|
|
27
|
+
})
|
|
28
|
+
.lean()
|
|
29
|
+
.exec();
|
|
30
|
+
// キャッシュを更新
|
|
31
|
+
if (settingDoc?.waiter !== undefined) {
|
|
32
|
+
console.log('document exist!', settingDoc);
|
|
33
|
+
WaiterSettingRepo.cachedSettings = settingDoc.waiter;
|
|
34
|
+
WaiterSettingRepo.cacheExpiry = now + WaiterSettingRepo.CACHE_TTL_MS;
|
|
35
|
+
}
|
|
36
|
+
return WaiterSettingRepo.cachedSettings;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.WaiterSettingRepo = WaiterSettingRepo;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Connection, FilterQuery } from 'mongoose';
|
|
2
|
-
import { ISetting } from './mongoose/schemas/setting';
|
|
3
|
-
type IKeyOfProjection = keyof ISetting
|
|
4
|
-
|
|
2
|
+
import { ISetting, IStorageSettings } from './mongoose/schemas/setting';
|
|
3
|
+
type IKeyOfProjection = Exclude<keyof ISetting, 'jwt' | 'project' | 'waiter' | 'integration'>;
|
|
4
|
+
type IGlobalSetting = Pick<ISetting, 'defaultSenderEmail' | 'onEventChanged' | 'onOrderStatusChanged' | 'onReservationStatusChanged' | 'onResourceUpdated' | 'onTaskStatusChanged' | 'orderNumber' | 'quota' | 'serviceOutputIdentifier' | 'storage' | 'transactionNumber' | 'triggerWebhook' | 'useInformResourceTypes' | 'useMongo4confirmationNumberFrom' | 'useMongo4orderNumberFrom' | 'useMongo4transactionNumberFrom' | 'useMongoAsStockHolder' | 'useMongoAsStockHolderProjects' | 'userPoolIdNew' | 'userPoolIdOld'>;
|
|
5
|
+
export { IGlobalSetting as ISetting };
|
|
5
6
|
/**
|
|
6
7
|
* 設定リポジトリ
|
|
7
8
|
*/
|
|
@@ -15,14 +16,14 @@ export declare class SettingRepo {
|
|
|
15
16
|
$eq?: string;
|
|
16
17
|
};
|
|
17
18
|
};
|
|
18
|
-
}, inclusion: IKeyOfProjection[]): Promise<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
19
|
+
}, inclusion: IKeyOfProjection[]): Promise<IGlobalSetting | null>;
|
|
20
|
+
/**
|
|
21
|
+
* 初期設定追加専用
|
|
22
|
+
*/
|
|
23
|
+
addGlobalStorageSettings(params: {
|
|
24
|
+
key: keyof IStorageSettings;
|
|
25
|
+
value: number;
|
|
26
|
+
}): Promise<import("mongoose").UpdateWriteOpResult>;
|
|
26
27
|
unsetUnnecessaryFields(params: {
|
|
27
28
|
filter: FilterQuery<ISetting>;
|
|
28
29
|
$unset: any;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SettingRepo = void 0;
|
|
4
|
-
// import { factory } from '../factory';
|
|
5
4
|
const setting_1 = require("./mongoose/schemas/setting");
|
|
6
5
|
/**
|
|
7
6
|
* 設定リポジトリ
|
|
@@ -36,24 +35,13 @@ class SettingRepo {
|
|
|
36
35
|
.lean()
|
|
37
36
|
.exec();
|
|
38
37
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
/**
|
|
39
|
+
* 初期設定追加専用
|
|
40
|
+
*/
|
|
41
|
+
async addGlobalStorageSettings(params) {
|
|
42
|
+
return this.settingModel.updateOne({ 'project.id': { $eq: '*' } }, {
|
|
42
43
|
$set: {
|
|
43
|
-
|
|
44
|
-
...(onReservationStatusChanged !== undefined) ? { onReservationStatusChanged } : undefined,
|
|
45
|
-
...(onTaskStatusChanged !== undefined) ? { onTaskStatusChanged } : undefined,
|
|
46
|
-
...(onResourceUpdated !== undefined) ? { onResourceUpdated } : undefined,
|
|
47
|
-
...(defaultSenderEmail !== undefined) ? { defaultSenderEmail } : undefined,
|
|
48
|
-
...(useInformResourceTypes !== undefined) ? { useInformResourceTypes } : undefined,
|
|
49
|
-
...(userPoolIdNew !== undefined) ? { userPoolIdNew } : undefined,
|
|
50
|
-
...(userPoolIdOld !== undefined) ? { userPoolIdOld } : undefined,
|
|
51
|
-
...(storage !== undefined) ? { storage } : undefined,
|
|
52
|
-
...(quota !== undefined) ? { quota } : undefined,
|
|
53
|
-
...(triggerWebhook !== undefined) ? { triggerWebhook } : undefined,
|
|
54
|
-
...(waiter !== undefined) ? { waiter } : undefined,
|
|
55
|
-
...(orderNumber !== undefined) ? { orderNumber } : undefined,
|
|
56
|
-
...(transactionNumber !== undefined) ? { transactionNumber } : undefined
|
|
44
|
+
[`storage.${params.key}`]: params.value
|
|
57
45
|
}
|
|
58
46
|
})
|
|
59
47
|
.exec();
|
|
@@ -31,7 +31,7 @@ type ICreatingTask = Pick<factory.task.IAttributes<factory.taskName>, 'data' | '
|
|
|
31
31
|
export declare class TaskRepo {
|
|
32
32
|
readonly taskModel: IModel;
|
|
33
33
|
constructor(connection: Connection);
|
|
34
|
-
static CREATE_MONGO_CONDITIONS(params: factory.task.ISearchConditions): FilterQuery<import("@chevre/factory/lib/chevre/task").ITask | import("@chevre/factory/lib/chevre/task/confirmPayTransaction").ITask | import("@chevre/factory/lib/chevre/task/confirmReserveTransaction").ITask | import("@chevre/factory/lib/chevre/task/createAccountingReport").ITask | import("@chevre/factory/lib/chevre/task/
|
|
34
|
+
static CREATE_MONGO_CONDITIONS(params: factory.task.ISearchConditions): FilterQuery<import("@chevre/factory/lib/chevre/task").ITask | import("@chevre/factory/lib/chevre/task/confirmPayTransaction").ITask | import("@chevre/factory/lib/chevre/task/confirmReserveTransaction").ITask | import("@chevre/factory/lib/chevre/task/createAccountingReport").ITask | import("@chevre/factory/lib/chevre/task/deleteTransaction").ITask | import("@chevre/factory/lib/chevre/task/onAssetTransactionStatusChanged").ITask | import("@chevre/factory/lib/chevre/task/onAuthorizationCreated").ITask | import("@chevre/factory/lib/chevre/task/onEventChanged").ITask | import("@chevre/factory/lib/chevre/task/onResourceDeleted").ITask | import("@chevre/factory/lib/chevre/task/onResourceUpdated").ITask | import("@chevre/factory/lib/chevre/task/onOrderPaymentCompleted").ITask | import("@chevre/factory/lib/chevre/task/placeOrder").ITask | import("@chevre/factory/lib/chevre/task/returnOrder").ITask | import("@chevre/factory/lib/chevre/task/returnPayTransaction").ITask | import("@chevre/factory/lib/chevre/task/returnReserveTransaction").ITask | import("@chevre/factory/lib/chevre/task/sendEmailMessage").ITask | import("@chevre/factory/lib/chevre/task/sendOrder").ITask | import("@chevre/factory/lib/chevre/task/triggerWebhook").ITask | import("@chevre/factory/lib/chevre/task/useReservation").ITask | import("@chevre/factory/lib/chevre/task/voidPayTransaction").ITask | import("@chevre/factory/lib/chevre/task/voidReserveTransaction").ITask>[];
|
|
35
35
|
runImmediately(params: Pick<factory.task.IAttributes<factory.taskName>, 'data' | 'expires' | 'name' | 'project' | 'remainingNumberOfTries' | 'runsAt'> & {
|
|
36
36
|
alternateName?: never;
|
|
37
37
|
identifier?: never;
|
|
@@ -43,12 +43,6 @@ export declare class PlaceOrderRepo {
|
|
|
43
43
|
findInProgressPaymentMethodId(params: {
|
|
44
44
|
id: string;
|
|
45
45
|
}): Promise<factory.transaction.placeOrder.IPaymentMethodByPaymentUrl | undefined>;
|
|
46
|
-
/**
|
|
47
|
-
* 取引の注文番号を検索する
|
|
48
|
-
*/
|
|
49
|
-
findInProgressOrderNumberById(params: {
|
|
50
|
-
id: string;
|
|
51
|
-
}): Promise<string | undefined>;
|
|
52
46
|
/**
|
|
53
47
|
* 取引の確認番号を検索する
|
|
54
48
|
*/
|
|
@@ -130,6 +124,7 @@ export declare class PlaceOrderRepo {
|
|
|
130
124
|
id: string;
|
|
131
125
|
object: {
|
|
132
126
|
orderDate: Date;
|
|
127
|
+
orderNumber: string;
|
|
133
128
|
};
|
|
134
129
|
result: factory.transaction.IResult<factory.transactionType.PlaceOrder>;
|
|
135
130
|
potentialActions: factory.transaction.IPotentialActions<factory.transactionType.PlaceOrder>;
|