@chevre/domain 25.0.0-alpha.3 → 25.0.0-alpha.5
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 +9 -5
- package/lib/chevre/emailMessageBuilder.js +45 -39
- 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 +13 -8
- 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/orderInTransaction.js +1 -1
- package/lib/chevre/service/order/deleteOrder.js +1 -1
- 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.js +6 -2
- package/lib/chevre/service/transaction/returnOrder/preStart.js +1 -1
- package/lib/chevre/service/validation/validateOrder.js +1 -1
- package/package.json +2 -2
|
@@ -4,14 +4,18 @@ type ISendableEmailMessage = factory.action.transfer.send.message.email.IObjectA
|
|
|
4
4
|
identifier: string;
|
|
5
5
|
name: string;
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* 注文取引確定時の指定テンプレートで利用可能な注文変数
|
|
9
|
+
*/
|
|
10
|
+
type IPlacingOrderAsCreateEmailParams = Pick<factory.order.IOrder, 'orderNumber' | 'confirmationNumber' | 'customer' | 'price' | 'seller'>;
|
|
11
|
+
type IOrderAsCreateEmailParams = Pick<factory.order.IOrder, 'confirmationNumber' | 'customer' | 'orderDate' | 'orderNumber' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'price' | 'priceCurrency' | 'seller' | 'typeOf'>;
|
|
8
12
|
/**
|
|
9
13
|
* 注文配送メッセージを作成する
|
|
10
14
|
*/
|
|
11
15
|
declare function createSendOrderMessage(params: {
|
|
12
|
-
order:
|
|
16
|
+
order: IPlacingOrderAsCreateEmailParams;
|
|
13
17
|
email?: factory.creativeWork.message.email.ICustomization;
|
|
14
|
-
emailMessage?:
|
|
18
|
+
emailMessage?: never;
|
|
15
19
|
index: number;
|
|
16
20
|
}, setting: Pick<ISetting, 'defaultSenderEmail'>): Promise<ISendableEmailMessage>;
|
|
17
21
|
/**
|
|
@@ -20,7 +24,7 @@ declare function createSendOrderMessage(params: {
|
|
|
20
24
|
declare function createReturnOrderMessage(params: {
|
|
21
25
|
order: IOrderAsCreateEmailParams;
|
|
22
26
|
email?: factory.creativeWork.message.email.ICustomization;
|
|
23
|
-
emailMessage?:
|
|
27
|
+
emailMessage?: never;
|
|
24
28
|
index: number;
|
|
25
29
|
}, setting: Pick<ISetting, 'defaultSenderEmail'>): Promise<ISendableEmailMessage>;
|
|
26
30
|
/**
|
|
@@ -31,4 +35,4 @@ declare function createRefundMessage(params: {
|
|
|
31
35
|
email?: factory.creativeWork.message.email.ICustomization;
|
|
32
36
|
paymentMethodId: string;
|
|
33
37
|
}, setting: Pick<ISetting, 'defaultSenderEmail'>): Promise<ISendableEmailMessage>;
|
|
34
|
-
export { createSendOrderMessage, createReturnOrderMessage, createRefundMessage };
|
|
38
|
+
export { createSendOrderMessage, createReturnOrderMessage, createRefundMessage, IOrderAsCreateEmailParams, IPlacingOrderAsCreateEmailParams };
|
|
@@ -12,7 +12,7 @@ const factory_1 = require("./factory");
|
|
|
12
12
|
async function createEmailMessageText(params) {
|
|
13
13
|
const emailTemplate = params.email?.template;
|
|
14
14
|
const emailText = params.email?.text;
|
|
15
|
-
const emailMessageTextByDB = params.emailMessage?.text;
|
|
15
|
+
// const emailMessageTextByDB = params.emailMessage?.text;
|
|
16
16
|
let emailMessageText;
|
|
17
17
|
if (typeof emailText === 'string') {
|
|
18
18
|
emailMessageText = emailText;
|
|
@@ -27,18 +27,21 @@ async function createEmailMessageText(params) {
|
|
|
27
27
|
resolve(message);
|
|
28
28
|
});
|
|
29
29
|
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
// } else if (typeof emailMessageTextByDB === 'string') {
|
|
31
|
+
// // デフォルトEメールメッセージを適用する
|
|
32
|
+
// emailMessageText = await new Promise<string>((resolve, reject) => {
|
|
33
|
+
// render(
|
|
34
|
+
// emailMessageTextByDB,
|
|
35
|
+
// { order: params.order },
|
|
36
|
+
// (err, message) => {
|
|
37
|
+
// if (err instanceof Error) {
|
|
38
|
+
// reject(new factory.errors.Argument('emailMessage.text', err.message));
|
|
39
|
+
// return;
|
|
40
|
+
// }
|
|
41
|
+
// resolve(message);
|
|
42
|
+
// }
|
|
43
|
+
// );
|
|
44
|
+
// });
|
|
42
45
|
}
|
|
43
46
|
else {
|
|
44
47
|
emailMessageText = `orderNumber: ${params.order.orderNumber}`;
|
|
@@ -46,8 +49,8 @@ async function createEmailMessageText(params) {
|
|
|
46
49
|
return emailMessageText;
|
|
47
50
|
}
|
|
48
51
|
async function createEmailMessageAbout(params) {
|
|
49
|
-
const abouyIdentifierByDB = params.emailMessage?.about.identifier;
|
|
50
|
-
const abouyNameByDB = params.emailMessage?.about.name;
|
|
52
|
+
// const abouyIdentifierByDB = params.emailMessage?.about.identifier;
|
|
53
|
+
// const abouyNameByDB = params.emailMessage?.about.name;
|
|
51
54
|
let about;
|
|
52
55
|
if (typeof params.email?.about === 'string') {
|
|
53
56
|
// aboutをStringで指定された場合
|
|
@@ -65,23 +68,26 @@ async function createEmailMessageAbout(params) {
|
|
|
65
68
|
identifier: params.email.about.identifier,
|
|
66
69
|
name: params.email.about.name
|
|
67
70
|
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
71
|
+
// } else if (typeof abouyIdentifierByDB === 'string' && typeof abouyNameByDB === 'string') {
|
|
72
|
+
// // デフォルトEメールメッセージを適用する
|
|
73
|
+
// const aboutName = await new Promise<string>((resolve, reject) => {
|
|
74
|
+
// render(
|
|
75
|
+
// abouyNameByDB,
|
|
76
|
+
// { order: params.order },
|
|
77
|
+
// (err, message) => {
|
|
78
|
+
// if (err instanceof Error) {
|
|
79
|
+
// reject(new factory.errors.Argument('emailMessage.about.name', err.message));
|
|
80
|
+
// return;
|
|
81
|
+
// }
|
|
82
|
+
// resolve(message);
|
|
83
|
+
// }
|
|
84
|
+
// );
|
|
85
|
+
// });
|
|
86
|
+
// about = {
|
|
87
|
+
// typeOf: 'Thing',
|
|
88
|
+
// identifier: abouyIdentifierByDB,
|
|
89
|
+
// name: aboutName
|
|
90
|
+
// };
|
|
85
91
|
}
|
|
86
92
|
else {
|
|
87
93
|
// aboutの指定がない場合
|
|
@@ -115,12 +121,12 @@ async function createSendOrderMessage(params, setting) {
|
|
|
115
121
|
const emailMessageText = await createEmailMessageText({
|
|
116
122
|
order: params.order,
|
|
117
123
|
email: params.email,
|
|
118
|
-
emailMessage: params.emailMessage
|
|
124
|
+
// emailMessage: params.emailMessage
|
|
119
125
|
});
|
|
120
126
|
const about = await createEmailMessageAbout({
|
|
121
|
-
order: params.order,
|
|
127
|
+
// order: params.order,
|
|
122
128
|
email: params.email,
|
|
123
|
-
emailMessage: params.emailMessage,
|
|
129
|
+
// emailMessage: params.emailMessage,
|
|
124
130
|
aboutIdentifier: factory_1.factory.creativeWork.message.email.AboutIdentifier.OnOrderSent,
|
|
125
131
|
defaultName: 'Order Delivered'
|
|
126
132
|
});
|
|
@@ -169,12 +175,12 @@ async function createReturnOrderMessage(params, setting) {
|
|
|
169
175
|
const emailMessageText = await createEmailMessageText({
|
|
170
176
|
order: params.order,
|
|
171
177
|
email: params.email,
|
|
172
|
-
emailMessage: params.emailMessage
|
|
178
|
+
// emailMessage: params.emailMessage
|
|
173
179
|
});
|
|
174
180
|
const about = await createEmailMessageAbout({
|
|
175
|
-
order: params.order,
|
|
181
|
+
// order: params.order,
|
|
176
182
|
email: params.email,
|
|
177
|
-
emailMessage: params.emailMessage,
|
|
183
|
+
// emailMessage: params.emailMessage,
|
|
178
184
|
aboutIdentifier: factory_1.factory.creativeWork.message.email.AboutIdentifier.OnOrderReturned,
|
|
179
185
|
defaultName: 'Order Returned'
|
|
180
186
|
});
|
|
@@ -225,7 +231,7 @@ async function createRefundMessage(params, setting) {
|
|
|
225
231
|
email: params.email
|
|
226
232
|
});
|
|
227
233
|
const about = await createEmailMessageAbout({
|
|
228
|
-
order: params.order,
|
|
234
|
+
// order: params.order,
|
|
229
235
|
email: params.email,
|
|
230
236
|
aboutIdentifier: factory_1.factory.creativeWork.message.email.AboutIdentifier.OnOrderRefunded,
|
|
231
237
|
defaultName: 'Refunded'
|
|
@@ -23,9 +23,7 @@ export declare class AcceptedOfferRepo extends AcceptedOfferInReserveRepo {
|
|
|
23
23
|
/**
|
|
24
24
|
* 索条件を最小化(2026-06-05~)
|
|
25
25
|
*/
|
|
26
|
-
params: Pick<factory.order.ISearchConditions, 'limit' | 'orderNumbers' | 'page' | 'project' | 'provider' | 'sort' | 'orderDate'>, projection: IProjection4searchWithUnwoundAcceptedOffers
|
|
27
|
-
noName: boolean;
|
|
28
|
-
}): Promise<(factory.order.IOrder & {
|
|
26
|
+
params: Pick<factory.order.ISearchConditions, 'limit' | 'orderNumbers' | 'page' | 'project' | 'provider' | 'sort' | 'orderDate'>, projection: IProjection4searchWithUnwoundAcceptedOffers): Promise<(factory.order.IOrder & {
|
|
29
27
|
acceptedOffers: [IAcceptedOffer];
|
|
30
28
|
_id?: never;
|
|
31
29
|
})[]>;
|
|
@@ -66,8 +64,6 @@ export declare class AcceptedOfferRepo extends AcceptedOfferInReserveRepo {
|
|
|
66
64
|
reservedTicket?: never;
|
|
67
65
|
};
|
|
68
66
|
};
|
|
69
|
-
}, options: {
|
|
70
|
-
noName: boolean;
|
|
71
67
|
}): Promise<Pick<IAcceptedOffer, 'id' | 'itemOffered' | 'offeredThrough' | 'priceSpecification' | 'serialNumber' | 'typeOf'>[]>;
|
|
72
68
|
/**
|
|
73
69
|
* 注文オファーをsliceして検索する(2024-01-10~)
|
|
@@ -24,7 +24,7 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
24
24
|
/**
|
|
25
25
|
* 索条件を最小化(2026-06-05~)
|
|
26
26
|
*/
|
|
27
|
-
params, projection
|
|
27
|
+
params, projection) {
|
|
28
28
|
const conditions = order_2.OrderRepo.CREATE_MONGO_CONDITIONS(params);
|
|
29
29
|
const aggregate = this.orderModel.aggregate();
|
|
30
30
|
// unwind->matchでは遅い
|
|
@@ -63,7 +63,7 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
63
63
|
const reservationNumbers = [...new Set(orders.map((order) => String(order.acceptedOffers[0].serialNumber)))];
|
|
64
64
|
let acceptedOffersByReserveTransaction = [];
|
|
65
65
|
if (reservationNumbers.length > 0) {
|
|
66
|
-
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers }
|
|
66
|
+
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers });
|
|
67
67
|
}
|
|
68
68
|
return orders.map((order) => {
|
|
69
69
|
const acceptedOffer = order.acceptedOffers[0];
|
|
@@ -136,7 +136,7 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
136
136
|
* 注文オファーを展開して検索する
|
|
137
137
|
* 注文番号指定で1注文ドキュメントから参照する想定
|
|
138
138
|
*/
|
|
139
|
-
async searchAcceptedOffersByOrderNumber(filter
|
|
139
|
+
async searchAcceptedOffersByOrderNumber(filter) {
|
|
140
140
|
/**
|
|
141
141
|
* unwind前に1ドキュメントを特定するためのstage
|
|
142
142
|
*/
|
|
@@ -183,7 +183,7 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
183
183
|
.option({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
|
|
184
184
|
.exec();
|
|
185
185
|
// 予約取引を参照(2026-05-18~)
|
|
186
|
-
return this.addAcceptedOffersDetails(acceptedOffers
|
|
186
|
+
return this.addAcceptedOffersDetails(acceptedOffers);
|
|
187
187
|
}
|
|
188
188
|
/**
|
|
189
189
|
* 注文オファーをsliceして検索する(2024-01-10~)
|
|
@@ -210,7 +210,7 @@ class AcceptedOfferRepo extends acceptedOfferInReserve_1.AcceptedOfferInReserveR
|
|
|
210
210
|
const { acceptedOffers, numAcceptedOffers } = result;
|
|
211
211
|
// 予約取引を参照(2026-05-18~)
|
|
212
212
|
return {
|
|
213
|
-
acceptedOffers: await this.addAcceptedOffersDetails(acceptedOffers
|
|
213
|
+
acceptedOffers: await this.addAcceptedOffersDetails(acceptedOffers),
|
|
214
214
|
numAcceptedOffers
|
|
215
215
|
};
|
|
216
216
|
}
|
|
@@ -22,13 +22,9 @@ export declare class AcceptedOfferInReserveRepo {
|
|
|
22
22
|
* 予約番号リスト
|
|
23
23
|
*/
|
|
24
24
|
reservationNumbers: string[];
|
|
25
|
-
}, options: {
|
|
26
|
-
noName: boolean;
|
|
27
25
|
}): Promise<IAcceptedOfferByReserveTransaction[]>;
|
|
28
26
|
/**
|
|
29
27
|
* 予約取引からオファー詳細情報を付加する
|
|
30
28
|
*/
|
|
31
|
-
protected addAcceptedOffersDetails(acceptedOffers: IAcceptedOffer[]
|
|
32
|
-
noName: boolean;
|
|
33
|
-
}): Promise<IAcceptedOffer[]>;
|
|
29
|
+
protected addAcceptedOffersDetails(acceptedOffers: IAcceptedOffer[]): Promise<IAcceptedOffer[]>;
|
|
34
30
|
}
|
|
@@ -20,7 +20,7 @@ class AcceptedOfferInReserveRepo {
|
|
|
20
20
|
/**
|
|
21
21
|
* 予約番号指定で予約取引から注文オファーを生成する
|
|
22
22
|
*/
|
|
23
|
-
async findAcceptedOffersByReservationNumbers(params
|
|
23
|
+
async findAcceptedOffersByReservationNumbers(params) {
|
|
24
24
|
const { reservationNumbers } = params;
|
|
25
25
|
if (!Array.isArray(reservationNumbers) || reservationNumbers.length === 0) {
|
|
26
26
|
throw new factory_1.factory.errors.ArgumentNull('reservationNumbers');
|
|
@@ -35,13 +35,13 @@ class AcceptedOfferInReserveRepo {
|
|
|
35
35
|
.exec();
|
|
36
36
|
debug('findSubReservationsByReservationNumbers: reservationNumbers.length === reserveTransactions.length?', reservationNumbers.length === reserveTransactions.length);
|
|
37
37
|
return reserveTransactions.reduce((a, b) => {
|
|
38
|
-
return [...a, ...(0, reserveTransaction2itemOffered_1.reserveTransaction2itemOffered)(b
|
|
38
|
+
return [...a, ...(0, reserveTransaction2itemOffered_1.reserveTransaction2itemOffered)(b)];
|
|
39
39
|
}, []);
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
42
|
* 予約取引からオファー詳細情報を付加する
|
|
43
43
|
*/
|
|
44
|
-
async addAcceptedOffersDetails(acceptedOffers
|
|
44
|
+
async addAcceptedOffersDetails(acceptedOffers) {
|
|
45
45
|
const offeredThroughIdentifier = acceptedOffers.at(0)?.offeredThrough?.identifier;
|
|
46
46
|
if (offeredThroughIdentifier === factory_1.factory.service.webAPI.Identifier.COA) {
|
|
47
47
|
// COAでは予約取引を参照しない
|
|
@@ -50,7 +50,7 @@ class AcceptedOfferInReserveRepo {
|
|
|
50
50
|
const reservationNumbers = [...new Set(acceptedOffers.map((acceptedOffer) => String(acceptedOffer.serialNumber)))];
|
|
51
51
|
let acceptedOffersByReserveTransaction = [];
|
|
52
52
|
if (reservationNumbers.length > 0) {
|
|
53
|
-
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers }
|
|
53
|
+
acceptedOffersByReserveTransaction = await this.findAcceptedOffersByReservationNumbers({ reservationNumbers });
|
|
54
54
|
}
|
|
55
55
|
return acceptedOffers.map((acceptedOffer) => {
|
|
56
56
|
const acceptedOfferByReserveTransaction = acceptedOffersByReserveTransaction.find(((offer) => offer.itemOffered.id === acceptedOffer.itemOffered.id));
|
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
import type { Connection } from 'mongoose';
|
|
1
|
+
import type { Connection, FilterQuery } from 'mongoose';
|
|
2
|
+
import { IDocType } from './mongoose/schemas/emailMessages';
|
|
2
3
|
import { factory } from '../factory';
|
|
3
|
-
export type IEmailMessage =
|
|
4
|
+
export type IEmailMessage = IDocType & {
|
|
5
|
+
id: string;
|
|
6
|
+
};
|
|
4
7
|
export interface ISearchConditions {
|
|
5
8
|
limit?: number;
|
|
6
9
|
page?: number;
|
|
7
|
-
sort?:
|
|
10
|
+
sort?: {
|
|
11
|
+
identifier?: factory.sortType;
|
|
12
|
+
};
|
|
8
13
|
project?: {
|
|
9
14
|
id?: {
|
|
10
15
|
$eq?: string;
|
|
11
16
|
};
|
|
12
17
|
};
|
|
18
|
+
id?: {
|
|
19
|
+
$eq?: string;
|
|
20
|
+
};
|
|
13
21
|
identifier?: {
|
|
14
22
|
$eq?: string;
|
|
15
23
|
};
|
|
@@ -29,12 +37,9 @@ export interface ISearchConditions {
|
|
|
29
37
|
export declare class EmailMessageRepo {
|
|
30
38
|
private readonly emailMessageModel;
|
|
31
39
|
constructor(connection: Connection);
|
|
32
|
-
static CREATE_MONGO_CONDITIONS(params: ISearchConditions):
|
|
40
|
+
static CREATE_MONGO_CONDITIONS(params: ISearchConditions): FilterQuery<IDocType>[];
|
|
33
41
|
save(params: IEmailMessage): Promise<any>;
|
|
34
|
-
|
|
35
|
-
id: string;
|
|
36
|
-
}): Promise<IEmailMessage>;
|
|
37
|
-
search(params: ISearchConditions): Promise<IEmailMessage[]>;
|
|
42
|
+
findEmailMessages(params: ISearchConditions): Promise<IEmailMessage[]>;
|
|
38
43
|
deleteById(params: {
|
|
39
44
|
id: string;
|
|
40
45
|
}): Promise<void>;
|
|
@@ -4,6 +4,17 @@ exports.EmailMessageRepo = void 0;
|
|
|
4
4
|
const emailMessages_1 = require("./mongoose/schemas/emailMessages");
|
|
5
5
|
const factory_1 = require("../factory");
|
|
6
6
|
const settings_1 = require("../settings");
|
|
7
|
+
const DEFAULT_PROJECTION = {
|
|
8
|
+
_id: 0,
|
|
9
|
+
id: { $toString: '$_id' },
|
|
10
|
+
project: 1,
|
|
11
|
+
typeOf: 1,
|
|
12
|
+
identifier: 1,
|
|
13
|
+
name: 1,
|
|
14
|
+
about: 1,
|
|
15
|
+
sender: 1,
|
|
16
|
+
text: 1,
|
|
17
|
+
};
|
|
7
18
|
/**
|
|
8
19
|
* Eメールメッセージリポジトリ
|
|
9
20
|
*/
|
|
@@ -13,28 +24,24 @@ class EmailMessageRepo {
|
|
|
13
24
|
this.emailMessageModel = connection.model(emailMessages_1.modelName, (0, emailMessages_1.createSchema)());
|
|
14
25
|
}
|
|
15
26
|
static CREATE_MONGO_CONDITIONS(params) {
|
|
16
|
-
|
|
17
|
-
|
|
27
|
+
const andConditions = [
|
|
28
|
+
// { typeOf: factory.creativeWorkType.EmailMessage }
|
|
29
|
+
];
|
|
18
30
|
const projectIdEq = params.project?.id?.$eq;
|
|
19
31
|
if (typeof projectIdEq === 'string') {
|
|
20
|
-
andConditions.push({
|
|
21
|
-
|
|
22
|
-
|
|
32
|
+
andConditions.push({ 'project.id': { $eq: projectIdEq } });
|
|
33
|
+
}
|
|
34
|
+
const idEq = params.id?.$eq;
|
|
35
|
+
if (typeof idEq === 'string') {
|
|
36
|
+
andConditions.push({ _id: { $eq: idEq } });
|
|
23
37
|
}
|
|
24
38
|
const identifierEq = params.identifier?.$eq;
|
|
25
39
|
if (typeof identifierEq === 'string') {
|
|
26
|
-
andConditions.push({
|
|
27
|
-
identifier: { $eq: identifierEq }
|
|
28
|
-
});
|
|
40
|
+
andConditions.push({ identifier: { $eq: identifierEq } });
|
|
29
41
|
}
|
|
30
42
|
const aboutIdentifierEq = params.about?.identifier?.$eq;
|
|
31
43
|
if (typeof aboutIdentifierEq === 'string') {
|
|
32
|
-
andConditions.push({
|
|
33
|
-
'about.identifier': {
|
|
34
|
-
$exists: true,
|
|
35
|
-
$eq: aboutIdentifierEq
|
|
36
|
-
}
|
|
37
|
-
});
|
|
44
|
+
andConditions.push({ 'about.identifier': { $exists: true, $eq: aboutIdentifierEq } });
|
|
38
45
|
}
|
|
39
46
|
return andConditions;
|
|
40
47
|
}
|
|
@@ -45,7 +52,7 @@ class EmailMessageRepo {
|
|
|
45
52
|
}
|
|
46
53
|
else {
|
|
47
54
|
// 上書き禁止属性を除外(2022-08-24~)
|
|
48
|
-
const { id, identifier, project, typeOf, ...updateFields } = params;
|
|
55
|
+
const { id: _id, identifier: _identifier, project: _project, typeOf: _typeOf, ...updateFields } = params;
|
|
49
56
|
doc = await this.emailMessageModel.findOneAndUpdate({ _id: params.id }, updateFields, { upsert: false, new: true })
|
|
50
57
|
.exec();
|
|
51
58
|
}
|
|
@@ -54,37 +61,20 @@ class EmailMessageRepo {
|
|
|
54
61
|
}
|
|
55
62
|
return doc.toObject();
|
|
56
63
|
}
|
|
57
|
-
async
|
|
58
|
-
const doc = await this.emailMessageModel.findOne({ _id: params.id }, {
|
|
59
|
-
__v: 0,
|
|
60
|
-
createdAt: 0,
|
|
61
|
-
updatedAt: 0
|
|
62
|
-
})
|
|
63
|
-
.exec();
|
|
64
|
-
if (doc === null) {
|
|
65
|
-
throw new factory_1.factory.errors.NotFound(this.emailMessageModel.modelName);
|
|
66
|
-
}
|
|
67
|
-
return doc.toObject();
|
|
68
|
-
}
|
|
69
|
-
async search(params) {
|
|
64
|
+
async findEmailMessages(params) {
|
|
70
65
|
const conditions = EmailMessageRepo.CREATE_MONGO_CONDITIONS(params);
|
|
71
|
-
const query = this.emailMessageModel.find({ $and: conditions },
|
|
72
|
-
__v: 0,
|
|
73
|
-
createdAt: 0,
|
|
74
|
-
updatedAt: 0
|
|
75
|
-
});
|
|
66
|
+
const query = this.emailMessageModel.find({ $and: conditions }, DEFAULT_PROJECTION);
|
|
76
67
|
if (typeof params.limit === 'number' && params.limit > 0) {
|
|
77
68
|
const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
|
|
78
69
|
query.limit(params.limit)
|
|
79
70
|
.skip(params.limit * (page - 1));
|
|
80
71
|
}
|
|
81
|
-
/* istanbul ignore else */
|
|
82
72
|
if (params.sort !== undefined) {
|
|
83
73
|
query.sort(params.sort);
|
|
84
74
|
}
|
|
85
75
|
return query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
|
|
86
|
-
.
|
|
87
|
-
.
|
|
76
|
+
.lean()
|
|
77
|
+
.exec();
|
|
88
78
|
}
|
|
89
79
|
async deleteById(params) {
|
|
90
80
|
await this.emailMessageModel.findOneAndDelete({ _id: { $eq: params.id } }, { projection: { _id: 1 } })
|
|
@@ -3,7 +3,5 @@ type IAcceptedOfferByReserveTransaction = Pick<factory.order.IOptimizedAcceptedO
|
|
|
3
3
|
/**
|
|
4
4
|
* 予約取引を注文のitemOfferedへ変換する
|
|
5
5
|
*/
|
|
6
|
-
declare function reserveTransaction2itemOffered(params: Pick<factory.assetTransaction.reserve.ITransaction, 'object'
|
|
7
|
-
noName: boolean;
|
|
8
|
-
}): IAcceptedOfferByReserveTransaction[];
|
|
6
|
+
declare function reserveTransaction2itemOffered(params: Pick<factory.assetTransaction.reserve.ITransaction, 'object'>): IAcceptedOfferByReserveTransaction[];
|
|
9
7
|
export { IAcceptedOfferByReserveTransaction, reserveTransaction2itemOffered };
|
|
@@ -38,8 +38,7 @@ function createReservedTicket(reservedTicket) {
|
|
|
38
38
|
/**
|
|
39
39
|
* 予約取引を注文のitemOfferedへ変換する
|
|
40
40
|
*/
|
|
41
|
-
function reserveTransaction2itemOffered(params
|
|
42
|
-
const { noName } = options;
|
|
41
|
+
function reserveTransaction2itemOffered(params) {
|
|
43
42
|
const { object } = params;
|
|
44
43
|
// subReservationは配列のはず
|
|
45
44
|
if (!Array.isArray(object.subReservation)) {
|
|
@@ -70,7 +69,7 @@ function reserveTransaction2itemOffered(params, options) {
|
|
|
70
69
|
return {
|
|
71
70
|
itemOffered: reservationByReserveTransaction,
|
|
72
71
|
...((price !== undefined) && { priceSpecification: price }),
|
|
73
|
-
...((!noName && reservedTicket.ticketType.name !== undefined) && { name: reservedTicket.ticketType.name })
|
|
72
|
+
// ...((!noName && reservedTicket.ticketType.name !== undefined) && { name: reservedTicket.ticketType.name }) // 完全廃止(2026-06-19~)
|
|
74
73
|
};
|
|
75
74
|
});
|
|
76
75
|
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { IndexDefinition, IndexOptions, Model, Schema, SchemaDefinition } from 'mongoose';
|
|
2
2
|
import { IVirtuals } from '../virtuals';
|
|
3
3
|
import { factory } from '../../../factory';
|
|
4
|
-
type IDocType = factory.creativeWork.message.email.ICreativeWork
|
|
4
|
+
type IDocType = Pick<factory.creativeWork.message.email.ICreativeWork, 'identifier' | 'name' | 'project' | 'sender' | 'text' | 'typeOf'> & {
|
|
5
|
+
about: Pick<factory.creativeWork.message.email.IAbout, 'name' | 'typeOf'> & {
|
|
6
|
+
/**
|
|
7
|
+
* 現時点でOnEventStatusChangedしかサポートしていない
|
|
8
|
+
* 2026-06-18
|
|
9
|
+
*/
|
|
10
|
+
identifier: factory.creativeWork.message.email.AboutIdentifier.OnEventStatusChanged;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
5
13
|
type IModel = Model<IDocType, Record<string, never>, Record<string, never>, IVirtuals>;
|
|
6
14
|
type ISchemaDefinition = SchemaDefinition<IDocType>;
|
|
7
15
|
type ISchema = Schema<IDocType, IModel, Record<string, never>, Record<string, never>, IVirtuals, Record<string, never>, ISchemaDefinition, IDocType>;
|
|
@@ -8,12 +8,9 @@ const settings_1 = require("../../../settings");
|
|
|
8
8
|
const modelName = 'EmailMessage';
|
|
9
9
|
exports.modelName = modelName;
|
|
10
10
|
const schemaDefinition = {
|
|
11
|
-
project: mongoose_1.SchemaTypes.Mixed,
|
|
12
|
-
typeOf: {
|
|
13
|
-
|
|
14
|
-
required: true
|
|
15
|
-
},
|
|
16
|
-
identifier: String,
|
|
11
|
+
project: { type: mongoose_1.SchemaTypes.Mixed, required: true },
|
|
12
|
+
typeOf: { type: String, required: true },
|
|
13
|
+
identifier: { type: String, required: true },
|
|
17
14
|
name: mongoose_1.SchemaTypes.Mixed,
|
|
18
15
|
about: mongoose_1.SchemaTypes.Mixed,
|
|
19
16
|
sender: mongoose_1.SchemaTypes.Mixed,
|
|
@@ -54,25 +51,13 @@ function createSchema() {
|
|
|
54
51
|
return schema;
|
|
55
52
|
}
|
|
56
53
|
const indexes = [
|
|
57
|
-
// [ // discontinue(2024-08-07~)
|
|
58
|
-
// { createdAt: 1 },
|
|
59
|
-
// { name: 'searchByCreatedAt' }
|
|
60
|
-
// ],
|
|
61
|
-
// [
|
|
62
|
-
// { updatedAt: 1 },
|
|
63
|
-
// { name: 'searchByUpdatedAt' }
|
|
64
|
-
// ],
|
|
65
54
|
[
|
|
66
55
|
{ identifier: 1 },
|
|
67
|
-
{
|
|
68
|
-
name: 'searchByIdentifier'
|
|
69
|
-
}
|
|
56
|
+
{ name: 'searchByIdentifier' }
|
|
70
57
|
],
|
|
71
58
|
[
|
|
72
59
|
{ 'project.id': 1, identifier: 1 },
|
|
73
|
-
{
|
|
74
|
-
name: 'searchByProjectId'
|
|
75
|
-
}
|
|
60
|
+
{ name: 'searchByProjectId' }
|
|
76
61
|
]
|
|
77
62
|
];
|
|
78
63
|
exports.indexes = indexes;
|
|
@@ -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);
|
|
@@ -93,7 +93,7 @@ function deleteReservationsByOrder(order) {
|
|
|
93
93
|
const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
|
|
94
94
|
orderNumber: { $eq: order.orderNumber },
|
|
95
95
|
project: { id: { $eq: order.project.id } },
|
|
96
|
-
}
|
|
96
|
+
});
|
|
97
97
|
const reservationIds = acceptedOffers.map((o) => String(o.itemOffered.id));
|
|
98
98
|
if (reservationIds.length > 0) {
|
|
99
99
|
await repos.reservation.deleteByIds({ project: { id: order.project.id }, ids: reservationIds });
|
|
@@ -39,7 +39,7 @@ function findByCode(params) {
|
|
|
39
39
|
// typeOf?: { $in?: factory.order.IItemOffered['typeOf'][] };
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
}
|
|
42
|
+
})).shift();
|
|
43
43
|
if (acceptedOffer === undefined) {
|
|
44
44
|
throw new factory_1.factory.errors.NotFound('acceptedOffer');
|
|
45
45
|
}
|
|
@@ -16,7 +16,7 @@ function searchByOrder(params) {
|
|
|
16
16
|
// typeOf: { $in: [reservationType] }
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
}
|
|
19
|
+
});
|
|
20
20
|
const reservationIds = acceptedOffers.map((offer) => {
|
|
21
21
|
if (offer.itemOffered.typeOf === reservationType) {
|
|
22
22
|
return offer.itemOffered.id;
|
|
@@ -139,7 +139,7 @@ function fixOrderAsPurpose(params) {
|
|
|
139
139
|
const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
|
|
140
140
|
orderNumber: { $eq: order.orderNumber },
|
|
141
141
|
project: { id: { $eq: params.project.id } }
|
|
142
|
-
}
|
|
142
|
+
});
|
|
143
143
|
return {
|
|
144
144
|
...order,
|
|
145
145
|
acceptedOffers
|
package/lib/chevre/service/transaction/placeOrder/confirm/potentialActions/sendEmailMessage.js
CHANGED
|
@@ -9,11 +9,15 @@ async function createSendEmailMessageActions(params, setting) {
|
|
|
9
9
|
const sendEmailMessageActions = [];
|
|
10
10
|
const sendEmailMessageOnOrderSentParams = params.potentialActions?.order?.potentialActions?.sendOrder?.potentialActions?.sendEmailMessage;
|
|
11
11
|
if (Array.isArray(sendEmailMessageOnOrderSentParams)) {
|
|
12
|
+
// pugテンプレートに渡す変数を最小化(2026-06-19~)
|
|
12
13
|
const orderAsCreateEmailParams = {
|
|
13
|
-
...params.order,
|
|
14
|
+
// ...params.order,
|
|
15
|
+
// paymentMethods: params.paymentMethods
|
|
14
16
|
customer: params.customer,
|
|
15
17
|
seller: params.seller,
|
|
16
|
-
|
|
18
|
+
orderNumber: params.order.orderNumber,
|
|
19
|
+
confirmationNumber: params.order.confirmationNumber,
|
|
20
|
+
price: params.order.price
|
|
17
21
|
};
|
|
18
22
|
await Promise.all(sendEmailMessageOnOrderSentParams.map(async (s, index) => {
|
|
19
23
|
const emailMessage = await (0, emailMessageBuilder_1.createSendOrderMessage)({
|
|
@@ -144,7 +144,7 @@ function fixOrders(params) {
|
|
|
144
144
|
const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
|
|
145
145
|
orderNumber: { $eq: params.object.order[0].orderNumber },
|
|
146
146
|
project: { id: { $eq: params.project.id } }
|
|
147
|
-
}
|
|
147
|
+
});
|
|
148
148
|
return { acceptedOffers, eventIds, offerIds, orders };
|
|
149
149
|
};
|
|
150
150
|
}
|
|
@@ -22,7 +22,7 @@ function validateOrder(params) {
|
|
|
22
22
|
const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
|
|
23
23
|
orderNumber: { $eq: params.orderNumber },
|
|
24
24
|
project: { id: { $eq: params.project.id } }
|
|
25
|
-
}
|
|
25
|
+
});
|
|
26
26
|
let payTransactions = [];
|
|
27
27
|
if (order.paymentMethods.length > 0) {
|
|
28
28
|
payTransactions = await repos.assetTransaction.search({
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@aws-sdk/client-cognito-identity-provider": "3.600.0",
|
|
13
13
|
"@aws-sdk/credential-providers": "3.600.0",
|
|
14
|
-
"@chevre/factory": "9.0.0-alpha.
|
|
14
|
+
"@chevre/factory": "9.0.0-alpha.2",
|
|
15
15
|
"@motionpicture/coa-service": "10.0.0",
|
|
16
16
|
"@motionpicture/gmo-service": "6.1.0-alpha.0",
|
|
17
17
|
"@sendgrid/client": "8.1.4",
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"postversion": "git push origin --tags",
|
|
92
92
|
"prepublishOnly": "npm run clean && npm run build"
|
|
93
93
|
},
|
|
94
|
-
"version": "25.0.0-alpha.
|
|
94
|
+
"version": "25.0.0-alpha.5"
|
|
95
95
|
}
|