@chevre/domain 21.2.0-alpha.83 → 21.2.0-alpha.84
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/example/src/chevre/searchSellers.ts +2 -1
- package/lib/chevre/service/order/onOrderStatusChanged/factory.d.ts +4 -1
- package/lib/chevre/service/order/onOrderStatusChanged/factory.js +40 -33
- package/lib/chevre/service/order/onOrderUpdated.d.ts +15 -0
- package/lib/chevre/service/order/onOrderUpdated.js +22 -0
- package/lib/chevre/service/order/placeOrder.js +32 -17
- package/lib/chevre/service/order/returnOrder.js +0 -3
- package/lib/chevre/service/order/sendOrder.js +0 -5
- package/lib/chevre/service/order.d.ts +2 -1
- package/lib/chevre/service/order.js +3 -1
- package/lib/chevre/service/reserve/confirmReservation.js +2 -1
- package/package.json +1 -1
|
@@ -19,7 +19,8 @@ async function main() {
|
|
|
19
19
|
limit: 1,
|
|
20
20
|
typeOf: chevre.factory.assetTransactionType.Reserve,
|
|
21
21
|
object: {
|
|
22
|
-
|
|
22
|
+
reservationNumber: { $eq: 'xxx' }
|
|
23
|
+
// reservationFor: { id: { $eq: 'xxx' } }
|
|
23
24
|
}
|
|
24
25
|
});
|
|
25
26
|
console.log('reserveTransactions:', reserveTransactions);
|
|
@@ -6,7 +6,10 @@ export declare function getOrderWithToken(params: {
|
|
|
6
6
|
order: factory.order.IOrder;
|
|
7
7
|
expiresIn: number;
|
|
8
8
|
}): Promise<factory.order.IOrder | IOrderWithToken>;
|
|
9
|
-
export
|
|
9
|
+
export type IUpdatedOrder4inform = Pick<factory.order.IOrder, 'typeOf' | 'orderNumber' | 'name' | 'additionalProperty' | 'project'> & {
|
|
10
|
+
orderStatus?: undefined;
|
|
11
|
+
};
|
|
12
|
+
export declare function createInformTasks(order: factory.order.IOrder | IOrderWithToken | IUpdatedOrder4inform): factory.task.IAttributes<factory.taskName.TriggerWebhook>[];
|
|
10
13
|
export declare function createConfirmReservationActionObject4ChevreByOrder(params: {
|
|
11
14
|
order: factory.order.IOrder;
|
|
12
15
|
}): factory.action.interact.confirm.reservation.IObject<factory.service.webAPI.Identifier.Chevre>[];
|
|
@@ -63,10 +63,13 @@ function createInformTasks(order) {
|
|
|
63
63
|
let informTasks = [];
|
|
64
64
|
if (Array.isArray(informOrder) && informOrder.length > 0) {
|
|
65
65
|
const order4inform = creteOrder4inform(order);
|
|
66
|
-
let recipientId =
|
|
67
|
-
if (order.orderStatus ===
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
let recipientId = '';
|
|
67
|
+
if (typeof order.orderStatus === 'string') {
|
|
68
|
+
recipientId = order.customer.id;
|
|
69
|
+
if (order.orderStatus === factory.orderStatus.OrderReturned) {
|
|
70
|
+
if (typeof ((_a = order.returner) === null || _a === void 0 ? void 0 : _a.id) === 'string') {
|
|
71
|
+
recipientId = order.returner.id;
|
|
72
|
+
}
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
informTasks = informOrder.map((informOrderParams) => {
|
|
@@ -75,7 +78,6 @@ function createInformTasks(order) {
|
|
|
75
78
|
agent: order.project,
|
|
76
79
|
object: order4inform,
|
|
77
80
|
project: order.project,
|
|
78
|
-
// purpose: params.transaction,
|
|
79
81
|
recipient: {
|
|
80
82
|
url: (_a = informOrderParams.recipient) === null || _a === void 0 ? void 0 : _a.url,
|
|
81
83
|
id: recipientId,
|
|
@@ -100,36 +102,41 @@ function createInformTasks(order) {
|
|
|
100
102
|
}
|
|
101
103
|
exports.createInformTasks = createInformTasks;
|
|
102
104
|
function creteOrder4inform(order) {
|
|
103
|
-
if (order.orderStatus ===
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
if (typeof order.orderStatus === 'string') {
|
|
106
|
+
if (order.orderStatus === factory.orderStatus.OrderReturned) {
|
|
107
|
+
// 返品注文通知内容を最適化(2022-12-28~)
|
|
108
|
+
return Object.assign(Object.assign({ project: order.project, typeOf: order.typeOf, orderNumber: order.orderNumber, orderStatus: order.orderStatus }, (order.dateReturned !== undefined) ? { dateReturned: order.dateReturned } : undefined), (typeof order.id === 'string') ? { id: order.id } : undefined);
|
|
109
|
+
}
|
|
110
|
+
else if (order.orderStatus === factory.orderStatus.OrderDelivered) {
|
|
111
|
+
// 配送済注文通知内容を最適化(2022-12-29~)
|
|
112
|
+
return Object.assign({ project: order.project, typeOf: order.typeOf, orderNumber: order.orderNumber, orderStatus: order.orderStatus }, (typeof order.id === 'string') ? { id: order.id } : undefined);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// 冗長な個人情報をmask
|
|
116
|
+
return Object.assign(Object.assign({
|
|
117
|
+
// whitelistで作成する(2022-07-19~)
|
|
118
|
+
project: order.project, typeOf: order.typeOf, seller: order.seller, price: order.price, priceCurrency: order.priceCurrency, confirmationNumber: order.confirmationNumber, orderNumber: order.orderNumber, acceptedOffers: order.acceptedOffers, orderStatus: order.orderStatus, orderDate: order.orderDate,
|
|
119
|
+
// mask
|
|
120
|
+
customer: Object.assign(Object.assign({}, (0, order_1.createMaskedCustomer)(order)), { additionalProperty: (Array.isArray(order.customer.additionalProperty)) ? order.customer.additionalProperty : [],
|
|
121
|
+
// identifierは必要
|
|
122
|
+
// 予約後を隠蔽(2022-12-24~)
|
|
123
|
+
identifier: (Array.isArray(order.customer.identifier))
|
|
124
|
+
? order.customer.identifier.filter((p) => {
|
|
125
|
+
return !reservedAgentIdentifireNames_1.RESERVED_AGENT_IDENTIFIER_NAMES.includes(p.name);
|
|
126
|
+
})
|
|
127
|
+
: [] }),
|
|
128
|
+
// paymentMethodsに関してもmask(2022-05-30~)
|
|
129
|
+
paymentMethods: order.paymentMethods.map((p) => {
|
|
130
|
+
return Object.assign(Object.assign({}, p), (typeof p.accountId === 'string' && p.accountId.length > 0)
|
|
131
|
+
? { accountId: ASTERISK_CHARACTER.repeat(p.accountId.length) }
|
|
132
|
+
: undefined);
|
|
133
|
+
}) }, (typeof order.token === 'string')
|
|
134
|
+
? { token: order.token }
|
|
135
|
+
: undefined), (typeof order.id === 'string') ? { id: order.id } : undefined);
|
|
136
|
+
}
|
|
110
137
|
}
|
|
111
138
|
else {
|
|
112
|
-
|
|
113
|
-
return Object.assign(Object.assign({
|
|
114
|
-
// whitelistで作成する(2022-07-19~)
|
|
115
|
-
project: order.project, typeOf: order.typeOf, seller: order.seller, price: order.price, priceCurrency: order.priceCurrency, confirmationNumber: order.confirmationNumber, orderNumber: order.orderNumber, acceptedOffers: order.acceptedOffers, orderStatus: order.orderStatus, orderDate: order.orderDate,
|
|
116
|
-
// mask
|
|
117
|
-
customer: Object.assign(Object.assign({}, (0, order_1.createMaskedCustomer)(order)), { additionalProperty: (Array.isArray(order.customer.additionalProperty)) ? order.customer.additionalProperty : [],
|
|
118
|
-
// identifierは必要
|
|
119
|
-
// 予約後を隠蔽(2022-12-24~)
|
|
120
|
-
identifier: (Array.isArray(order.customer.identifier))
|
|
121
|
-
? order.customer.identifier.filter((p) => {
|
|
122
|
-
return !reservedAgentIdentifireNames_1.RESERVED_AGENT_IDENTIFIER_NAMES.includes(p.name);
|
|
123
|
-
})
|
|
124
|
-
: [] }),
|
|
125
|
-
// paymentMethodsに関してもmask(2022-05-30~)
|
|
126
|
-
paymentMethods: order.paymentMethods.map((p) => {
|
|
127
|
-
return Object.assign(Object.assign({}, p), (typeof p.accountId === 'string' && p.accountId.length > 0)
|
|
128
|
-
? { accountId: ASTERISK_CHARACTER.repeat(p.accountId.length) }
|
|
129
|
-
: undefined);
|
|
130
|
-
}) }, (typeof order.token === 'string')
|
|
131
|
-
? { token: order.token }
|
|
132
|
-
: undefined), (typeof order.id === 'string') ? { id: order.id } : undefined);
|
|
139
|
+
return order;
|
|
133
140
|
}
|
|
134
141
|
}
|
|
135
142
|
function createConfirmReservationActionObject4ChevreByOrder(params) {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 注文変更時処理
|
|
3
|
+
*/
|
|
4
|
+
import { MongoRepository as TaskRepo } from '../../repo/task';
|
|
5
|
+
import * as factory from '../../factory';
|
|
6
|
+
export declare function onOrderUpdated(params: {
|
|
7
|
+
additionalProperty?: factory.propertyValue.IPropertyValue<string>[];
|
|
8
|
+
name?: string;
|
|
9
|
+
orderNumber: string;
|
|
10
|
+
project: {
|
|
11
|
+
id: string;
|
|
12
|
+
};
|
|
13
|
+
}): (repos: {
|
|
14
|
+
task: TaskRepo;
|
|
15
|
+
}) => Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.onOrderUpdated = void 0;
|
|
13
|
+
const factory = require("../../factory");
|
|
14
|
+
const factory_1 = require("./onOrderStatusChanged/factory");
|
|
15
|
+
function onOrderUpdated(params) {
|
|
16
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
let tasks = [];
|
|
18
|
+
tasks = (0, factory_1.createInformTasks)(Object.assign(Object.assign({ typeOf: factory.order.OrderType.Order, orderNumber: params.orderNumber, project: { id: params.project.id, typeOf: factory.organizationType.Project } }, (typeof params.name === 'string') ? { name: params.name } : undefined), (Array.isArray(params.additionalProperty)) ? { additionalProperty: params.additionalProperty } : undefined));
|
|
19
|
+
yield repos.task.saveMany(tasks, { emitImmediately: true });
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
exports.onOrderUpdated = onOrderUpdated;
|
|
@@ -168,44 +168,59 @@ function placeOrder(params) {
|
|
|
168
168
|
confirmationNumber: params.object.confirmationNumber,
|
|
169
169
|
orderNumber: params.object.orderNumber
|
|
170
170
|
})({ transaction: repos.transaction });
|
|
171
|
-
// アクションを作成する(2022-04-11~)
|
|
172
171
|
const maskedCustomer = (0, order_1.createMaskedCustomer)(order);
|
|
173
172
|
const simpleOrder = {
|
|
174
|
-
// project: order.project,
|
|
175
173
|
typeOf: order.typeOf,
|
|
176
174
|
seller: order.seller,
|
|
177
175
|
customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id, name: maskedCustomer.name },
|
|
178
|
-
// IOrderへ移行(2022-11-17~)
|
|
179
|
-
// confirmationNumber: order.confirmationNumber,
|
|
180
176
|
orderNumber: order.orderNumber,
|
|
181
177
|
price: order.price,
|
|
182
178
|
priceCurrency: order.priceCurrency,
|
|
183
179
|
orderDate: order.orderDate
|
|
184
180
|
};
|
|
181
|
+
const orderActionPurpose = {
|
|
182
|
+
typeOf: placeOrderTransaction.typeOf, id: placeOrderTransaction.id
|
|
183
|
+
};
|
|
185
184
|
const orderActionAttributes = {
|
|
186
185
|
agent: (typeof ((_a = params.agent) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? params.agent : order.project,
|
|
187
186
|
object: simpleOrder,
|
|
188
187
|
potentialActions: {},
|
|
189
188
|
project: order.project,
|
|
190
|
-
purpose:
|
|
189
|
+
purpose: orderActionPurpose,
|
|
191
190
|
typeOf: factory.actionType.OrderAction
|
|
192
191
|
};
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
192
|
+
// 冪等性を担保(2023-05-31~)
|
|
193
|
+
const completedActions = yield repos.action.search({
|
|
194
|
+
limit: 1,
|
|
195
|
+
page: 1,
|
|
196
|
+
actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] },
|
|
197
|
+
typeOf: { $eq: orderActionAttributes.typeOf },
|
|
198
|
+
object: {
|
|
199
|
+
orderNumber: { $in: [orderActionAttributes.object.orderNumber] }
|
|
200
|
+
},
|
|
201
|
+
purpose: {
|
|
202
|
+
id: { $in: [orderActionPurpose.id] },
|
|
203
|
+
typeOf: { $in: [orderActionPurpose.typeOf] }
|
|
204
|
+
}
|
|
205
|
+
}, ['_id'], []);
|
|
206
|
+
if (completedActions.length === 0) {
|
|
207
|
+
const action = yield repos.action.start(orderActionAttributes);
|
|
199
208
|
try {
|
|
200
|
-
|
|
201
|
-
yield repos.action.giveUp({ typeOf: orderActionAttributes.typeOf, id: action.id, error: actionError });
|
|
209
|
+
yield repos.order.createIfNotExist(order);
|
|
202
210
|
}
|
|
203
|
-
catch (
|
|
204
|
-
//
|
|
211
|
+
catch (error) {
|
|
212
|
+
// actionにエラー結果を追加
|
|
213
|
+
try {
|
|
214
|
+
const actionError = Object.assign(Object.assign({}, error), { message: error.message, name: error.name });
|
|
215
|
+
yield repos.action.giveUp({ typeOf: orderActionAttributes.typeOf, id: action.id, error: actionError });
|
|
216
|
+
}
|
|
217
|
+
catch (__) {
|
|
218
|
+
// 失敗したら仕方ない
|
|
219
|
+
}
|
|
220
|
+
throw error;
|
|
205
221
|
}
|
|
206
|
-
|
|
222
|
+
yield repos.action.complete({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
|
|
207
223
|
}
|
|
208
|
-
yield repos.action.complete({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
|
|
209
224
|
if (params.useOnOrderStatusChanged || params.useOnOrderStatusChanged === undefined) {
|
|
210
225
|
// 経理レポートを保管
|
|
211
226
|
yield (0, createAccountingReportIfNotExist_1.createAccountingReportIfNotExist)(order)({ accountingReport: repos.accountingReport });
|
|
@@ -42,12 +42,9 @@ function returnOrder(params) {
|
|
|
42
42
|
throw new factory.errors.NotFound(factory.transactionType.ReturnOrder);
|
|
43
43
|
}
|
|
44
44
|
const simpleOrder = {
|
|
45
|
-
// project: order.project,
|
|
46
45
|
typeOf: order.typeOf,
|
|
47
46
|
seller: order.seller,
|
|
48
47
|
customer: (0, order_1.createMaskedCustomer)(order),
|
|
49
|
-
// IOrderへ移行(2022-11-17~)
|
|
50
|
-
// confirmationNumber: order.confirmationNumber,
|
|
51
48
|
orderNumber: order.orderNumber,
|
|
52
49
|
price: order.price,
|
|
53
50
|
priceCurrency: order.priceCurrency,
|
|
@@ -40,16 +40,11 @@ function sendOrder(params) {
|
|
|
40
40
|
if (order.confirmationNumber !== confirmationNumber) {
|
|
41
41
|
throw new factory.errors.NotFound('Order');
|
|
42
42
|
}
|
|
43
|
-
// SendOrderアクションを作成する
|
|
44
|
-
// minimizeする(2022-04-18~)
|
|
45
43
|
const maskedCustomer = (0, order_1.createMaskedCustomer)(order);
|
|
46
44
|
const simpleOrder = {
|
|
47
|
-
// project: order.project,
|
|
48
45
|
typeOf: order.typeOf,
|
|
49
46
|
seller: order.seller,
|
|
50
47
|
customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id, name: maskedCustomer.name },
|
|
51
|
-
// IOrderへ移行(2022-11-17~)
|
|
52
|
-
// confirmationNumber: order.confirmationNumber,
|
|
53
48
|
orderNumber: order.orderNumber,
|
|
54
49
|
price: order.price,
|
|
55
50
|
priceCurrency: order.priceCurrency,
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { deleteOrder } from './order/deleteOrder';
|
|
5
5
|
import { onOrderStatusChanged } from './order/onOrderStatusChanged';
|
|
6
|
+
import { onOrderUpdated } from './order/onOrderUpdated';
|
|
6
7
|
import { placeOrder, placeOrderWithoutTransaction } from './order/placeOrder';
|
|
7
8
|
import { returnOrder } from './order/returnOrder';
|
|
8
9
|
import { sendOrder } from './order/sendOrder';
|
|
9
|
-
export { deleteOrder, onOrderStatusChanged, placeOrder, placeOrderWithoutTransaction, returnOrder, sendOrder };
|
|
10
|
+
export { deleteOrder, onOrderStatusChanged, onOrderUpdated, placeOrder, placeOrderWithoutTransaction, returnOrder, sendOrder };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sendOrder = exports.returnOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.onOrderStatusChanged = exports.deleteOrder = void 0;
|
|
3
|
+
exports.sendOrder = exports.returnOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.onOrderUpdated = exports.onOrderStatusChanged = exports.deleteOrder = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* 注文サービス
|
|
6
6
|
*/
|
|
@@ -8,6 +8,8 @@ const deleteOrder_1 = require("./order/deleteOrder");
|
|
|
8
8
|
Object.defineProperty(exports, "deleteOrder", { enumerable: true, get: function () { return deleteOrder_1.deleteOrder; } });
|
|
9
9
|
const onOrderStatusChanged_1 = require("./order/onOrderStatusChanged");
|
|
10
10
|
Object.defineProperty(exports, "onOrderStatusChanged", { enumerable: true, get: function () { return onOrderStatusChanged_1.onOrderStatusChanged; } });
|
|
11
|
+
const onOrderUpdated_1 = require("./order/onOrderUpdated");
|
|
12
|
+
Object.defineProperty(exports, "onOrderUpdated", { enumerable: true, get: function () { return onOrderUpdated_1.onOrderUpdated; } });
|
|
11
13
|
const placeOrder_1 = require("./order/placeOrder");
|
|
12
14
|
Object.defineProperty(exports, "placeOrder", { enumerable: true, get: function () { return placeOrder_1.placeOrder; } });
|
|
13
15
|
Object.defineProperty(exports, "placeOrderWithoutTransaction", { enumerable: true, get: function () { return placeOrder_1.placeOrderWithoutTransaction; } });
|
|
@@ -49,8 +49,8 @@ function confirmReservation(params) {
|
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
exports.confirmReservation = confirmReservation;
|
|
52
|
-
// tslint:disable-next-line:max-func-body-length
|
|
53
52
|
function reserveIfNotYet(params) {
|
|
53
|
+
// tslint:disable-next-line:max-func-body-length
|
|
54
54
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
55
55
|
var _a;
|
|
56
56
|
const reservationPackage = params.object;
|
|
@@ -58,6 +58,7 @@ function reserveIfNotYet(params) {
|
|
|
58
58
|
const completedActions = yield repos.action.search({
|
|
59
59
|
limit: 1,
|
|
60
60
|
page: 1,
|
|
61
|
+
actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] },
|
|
61
62
|
typeOf: { $eq: params.typeOf },
|
|
62
63
|
object: {
|
|
63
64
|
typeOf: { $eq: params.object.typeOf }
|
package/package.json
CHANGED