@unchainedshop/core-orders 2.14.2 → 3.0.0-alpha3
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/db/OrderDeliveriesCollection.d.ts +1 -1
- package/lib/db/OrderDeliveriesCollection.d.ts.map +1 -1
- package/lib/db/OrderDiscountsCollection.d.ts +1 -1
- package/lib/db/OrderDiscountsCollection.d.ts.map +1 -1
- package/lib/db/OrderPaymentsCollection.d.ts +1 -1
- package/lib/db/OrderPaymentsCollection.d.ts.map +1 -1
- package/lib/db/OrderPositionsCollection.d.ts +1 -1
- package/lib/db/OrderPositionsCollection.d.ts.map +1 -1
- package/lib/db/OrdersCollection.d.ts +1 -1
- package/lib/db/OrdersCollection.d.ts.map +1 -1
- package/lib/director/OrderDiscountAdapter.d.ts +1 -1
- package/lib/director/OrderDiscountAdapter.d.ts.map +1 -1
- package/lib/director/OrderDiscountAdapter.js.map +1 -1
- package/lib/director/OrderDiscountDirector.d.ts +1 -1
- package/lib/director/OrderDiscountDirector.d.ts.map +1 -1
- package/lib/director/OrderPricingAdapter.d.ts +20 -2
- package/lib/director/OrderPricingAdapter.d.ts.map +1 -1
- package/lib/director/OrderPricingAdapter.js.map +1 -1
- package/lib/director/OrderPricingDirector.d.ts +16 -1
- package/lib/director/OrderPricingDirector.d.ts.map +1 -1
- package/lib/director/OrderPricingDirector.js.map +1 -1
- package/lib/director/OrderPricingSheet.d.ts +34 -2
- package/lib/director/OrderPricingSheet.d.ts.map +1 -1
- package/lib/director/OrderPricingSheet.js +9 -2
- package/lib/director/OrderPricingSheet.js.map +1 -1
- package/lib/module/configureOrderDeliveriesModule.d.ts +32 -4
- package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
- package/lib/module/configureOrderDeliveriesModule.js +8 -18
- package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
- package/lib/module/configureOrderDiscountsModule.d.ts +22 -4
- package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
- package/lib/module/configureOrderDiscountsModule.js +20 -29
- package/lib/module/configureOrderDiscountsModule.js.map +1 -1
- package/lib/module/configureOrderPaymentsModule.d.ts +46 -4
- package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
- package/lib/module/configureOrderPaymentsModule.js +7 -19
- package/lib/module/configureOrderPaymentsModule.js.map +1 -1
- package/lib/module/configureOrderPositionsModule.d.ts +58 -4
- package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
- package/lib/module/configureOrderPositionsModule.js +11 -51
- package/lib/module/configureOrderPositionsModule.js.map +1 -1
- package/lib/module/configureOrdersModule-mutations.d.ts +32 -8
- package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-mutations.js +21 -51
- package/lib/module/configureOrdersModule-mutations.js.map +1 -1
- package/lib/module/configureOrdersModule-processing.d.ts +22 -4
- package/lib/module/configureOrdersModule-processing.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-processing.js +5 -14
- package/lib/module/configureOrdersModule-processing.js.map +1 -1
- package/lib/module/configureOrdersModule-queries.d.ts +23 -3
- package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-queries.js +5 -4
- package/lib/module/configureOrdersModule-queries.js.map +1 -1
- package/lib/module/configureOrdersModule-transformations.d.ts +15 -1
- package/lib/module/configureOrdersModule-transformations.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-transformations.js +4 -5
- package/lib/module/configureOrdersModule-transformations.js.map +1 -1
- package/lib/module/configureOrdersModule.d.ts +20 -2
- package/lib/module/configureOrdersModule.d.ts.map +1 -1
- package/lib/module/configureOrdersModule.js +17 -9
- package/lib/module/configureOrdersModule.js.map +1 -1
- package/lib/orders-index.d.ts +10 -12
- package/lib/orders-index.d.ts.map +1 -1
- package/lib/orders-index.js +10 -11
- package/lib/orders-index.js.map +1 -1
- package/lib/orders-settings.d.ts +18 -1
- package/lib/orders-settings.d.ts.map +1 -1
- package/lib/orders-settings.js.map +1 -1
- package/lib/service/migrateOrderCartService.d.ts +8 -1
- package/lib/service/migrateOrderCartService.d.ts.map +1 -1
- package/lib/service/migrateOrderCartService.js +2 -2
- package/lib/service/migrateOrderCartService.js.map +1 -1
- package/lib/service/nextUserCartService.d.ts +9 -1
- package/lib/service/nextUserCartService.d.ts.map +1 -1
- package/lib/service/nextUserCartService.js.map +1 -1
- package/lib/service/orderServices.d.ts +6 -1
- package/lib/service/orderServices.d.ts.map +1 -1
- package/lib/service/orderServices.js.map +1 -1
- package/lib/types.d.ts +116 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +25 -0
- package/lib/types.js.map +1 -0
- package/package.json +6 -8
- package/src/db/OrderDeliveriesCollection.ts +1 -1
- package/src/db/OrderDiscountsCollection.ts +1 -1
- package/src/db/OrderPaymentsCollection.ts +1 -1
- package/src/db/OrderPositionsCollection.ts +1 -1
- package/src/db/OrdersCollection.ts +1 -1
- package/src/director/OrderDiscountAdapter.ts +1 -1
- package/src/director/OrderPricingAdapter.ts +26 -6
- package/src/director/OrderPricingDirector.ts +21 -5
- package/src/director/OrderPricingSheet.ts +25 -6
- package/src/module/buildFindSelector.test.ts +7 -2
- package/src/module/configureOrderDeliveriesModule.ts +65 -29
- package/src/module/configureOrderDiscountsModule.ts +70 -43
- package/src/module/configureOrderPaymentsModule.ts +94 -29
- package/src/module/configureOrderPositionsModule.ts +82 -94
- package/src/module/configureOrdersModule-mutations.ts +88 -82
- package/src/module/configureOrdersModule-processing.ts +38 -23
- package/src/module/configureOrdersModule-queries.ts +33 -13
- package/src/module/configureOrdersModule-transformations.ts +28 -6
- package/src/module/configureOrdersModule.ts +57 -21
- package/src/orders-index.ts +12 -16
- package/src/orders-settings.ts +20 -1
- package/src/service/migrateOrderCartService.ts +14 -7
- package/src/service/nextUserCartService.ts +13 -1
- package/src/service/orderServices.ts +7 -3
- package/src/types.ts +129 -0
- package/lib/db/OrderDeliveriesSchema.d.ts +0 -3
- package/lib/db/OrderDeliveriesSchema.d.ts.map +0 -1
- package/lib/db/OrderDeliveriesSchema.js +0 -20
- package/lib/db/OrderDeliveriesSchema.js.map +0 -1
- package/lib/db/OrderDiscountsSchema.d.ts +0 -3
- package/lib/db/OrderDiscountsSchema.d.ts.map +0 -1
- package/lib/db/OrderDiscountsSchema.js +0 -12
- package/lib/db/OrderDiscountsSchema.js.map +0 -1
- package/lib/db/OrderPaymentsSchema.d.ts +0 -3
- package/lib/db/OrderPaymentsSchema.d.ts.map +0 -1
- package/lib/db/OrderPaymentsSchema.js +0 -20
- package/lib/db/OrderPaymentsSchema.js.map +0 -1
- package/lib/db/OrderPositionsSchema.d.ts +0 -3
- package/lib/db/OrderPositionsSchema.d.ts.map +0 -1
- package/lib/db/OrderPositionsSchema.js +0 -37
- package/lib/db/OrderPositionsSchema.js.map +0 -1
- package/lib/db/OrdersSchema.d.ts +0 -3
- package/lib/db/OrdersSchema.d.ts.map +0 -1
- package/lib/db/OrdersSchema.js +0 -30
- package/lib/db/OrdersSchema.js.map +0 -1
- package/src/db/OrderDeliveriesSchema.ts +0 -24
- package/src/db/OrderDiscountsSchema.ts +0 -15
- package/src/db/OrderPaymentsSchema.ts +0 -24
- package/src/db/OrderPositionsSchema.ts +0 -41
- package/src/db/OrdersSchema.ts +0 -34
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { SortDirection, SortOption } from '@unchainedshop/
|
|
2
|
-
import { Order,
|
|
3
|
-
|
|
1
|
+
import { SortDirection, SortOption } from '@unchainedshop/utils';
|
|
2
|
+
import { Order, OrderQuery, OrderReport } from '../types.js';
|
|
4
3
|
import { generateDbFilterById, buildSortOptions, mongodb } from '@unchainedshop/mongodb';
|
|
5
4
|
|
|
6
5
|
export const buildFindSelector = ({ includeCarts, status, userId, queryString }: OrderQuery) => {
|
|
@@ -38,23 +37,41 @@ const normalizeOrderAggregateResult = (data = {}): OrderReport => {
|
|
|
38
37
|
return statusToFieldMap;
|
|
39
38
|
};
|
|
40
39
|
|
|
41
|
-
export const configureOrdersModuleQueries = ({
|
|
42
|
-
Orders,
|
|
43
|
-
}: {
|
|
44
|
-
Orders: mongodb.Collection<Order>;
|
|
45
|
-
}): OrderQueries => {
|
|
40
|
+
export const configureOrdersModuleQueries = ({ Orders }: { Orders: mongodb.Collection<Order> }) => {
|
|
46
41
|
return {
|
|
47
|
-
count: async (query) => {
|
|
42
|
+
count: async (query: OrderQuery): Promise<number> => {
|
|
48
43
|
const orderCount = await Orders.countDocuments(buildFindSelector(query));
|
|
49
44
|
return orderCount;
|
|
50
45
|
},
|
|
51
46
|
|
|
52
|
-
findOrder: async (
|
|
47
|
+
findOrder: async (
|
|
48
|
+
{
|
|
49
|
+
orderId,
|
|
50
|
+
orderNumber,
|
|
51
|
+
}: {
|
|
52
|
+
orderId?: string;
|
|
53
|
+
orderNumber?: string;
|
|
54
|
+
},
|
|
55
|
+
options?: mongodb.FindOptions,
|
|
56
|
+
): Promise<Order> => {
|
|
53
57
|
const selector = orderId ? generateDbFilterById(orderId) : { orderNumber };
|
|
54
58
|
return Orders.findOne(selector, options);
|
|
55
59
|
},
|
|
56
60
|
|
|
57
|
-
findOrders: async (
|
|
61
|
+
findOrders: async (
|
|
62
|
+
{
|
|
63
|
+
limit,
|
|
64
|
+
offset,
|
|
65
|
+
queryString,
|
|
66
|
+
sort,
|
|
67
|
+
...query
|
|
68
|
+
}: OrderQuery & {
|
|
69
|
+
limit?: number;
|
|
70
|
+
offset?: number;
|
|
71
|
+
sort?: Array<SortOption>;
|
|
72
|
+
},
|
|
73
|
+
options?: mongodb.FindOptions,
|
|
74
|
+
): Promise<Array<Order>> => {
|
|
58
75
|
const defaultSortOption: Array<SortOption> = [{ key: 'created', value: SortDirection.DESC }];
|
|
59
76
|
const findOptions: mongodb.FindOptions = {
|
|
60
77
|
skip: offset,
|
|
@@ -74,7 +91,8 @@ export const configureOrdersModuleQueries = ({
|
|
|
74
91
|
return Orders.find(selector, findOptions).toArray();
|
|
75
92
|
},
|
|
76
93
|
|
|
77
|
-
getReport: async (
|
|
94
|
+
getReport: async (params?: { from?: Date; to?: Date }): Promise<OrderReport> => {
|
|
95
|
+
const { from, to } = params || {};
|
|
78
96
|
const selector: any = { $exists: true };
|
|
79
97
|
if (from || to) {
|
|
80
98
|
if (from) {
|
|
@@ -146,7 +164,7 @@ export const configureOrdersModuleQueries = ({
|
|
|
146
164
|
return normalizeOrderAggregateResult(facetedResult);
|
|
147
165
|
},
|
|
148
166
|
|
|
149
|
-
orderExists: async ({ orderId }) => {
|
|
167
|
+
orderExists: async ({ orderId }: { orderId: string }): Promise<boolean> => {
|
|
150
168
|
const orderCount = await Orders.countDocuments(generateDbFilterById(orderId), {
|
|
151
169
|
limit: 1,
|
|
152
170
|
});
|
|
@@ -154,3 +172,5 @@ export const configureOrdersModuleQueries = ({
|
|
|
154
172
|
},
|
|
155
173
|
};
|
|
156
174
|
};
|
|
175
|
+
|
|
176
|
+
export type OrderQueries = ReturnType<typeof configureOrdersModuleQueries>;
|
|
@@ -1,10 +1,32 @@
|
|
|
1
|
-
import { Order,
|
|
1
|
+
import { Order, OrderDiscount } from '../types.js';
|
|
2
2
|
import { mongodb } from '@unchainedshop/mongodb';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import { PaymentPricingRowCategory } from '@unchainedshop/core-payment';
|
|
4
|
+
import {
|
|
5
|
+
IOrderPricingSheet,
|
|
6
|
+
OrderPricingRowCategory,
|
|
7
|
+
OrderPricingSheet,
|
|
8
|
+
} from '../director/OrderPricingSheet.js';
|
|
9
|
+
import { UnchainedCore } from '@unchainedshop/core';
|
|
10
|
+
import { ProductPricingRowCategory } from '@unchainedshop/core-products';
|
|
11
|
+
import { DeliveryPricingRowCategory } from '@unchainedshop/core-delivery';
|
|
12
|
+
import { OrderPrice, OrderPricingDiscount } from '../director/OrderPricingDirector.js';
|
|
13
|
+
|
|
14
|
+
export interface OrderTransformations {
|
|
15
|
+
discounted: (
|
|
16
|
+
order: Order,
|
|
17
|
+
orderDiscount: OrderDiscount,
|
|
18
|
+
unchainedAPI: UnchainedCore,
|
|
19
|
+
) => Promise<Array<OrderPricingDiscount>>;
|
|
20
|
+
discountTotal: (
|
|
21
|
+
order: Order,
|
|
22
|
+
orderDiscount: OrderDiscount,
|
|
23
|
+
unchainedAPI: UnchainedCore,
|
|
24
|
+
) => Promise<OrderPrice>;
|
|
25
|
+
|
|
26
|
+
isCart: (order: Order) => boolean;
|
|
27
|
+
cart: (order: { countryContext?: string; orderNumber?: string; userId: string }) => Promise<Order>;
|
|
28
|
+
pricingSheet: (order: Order) => IOrderPricingSheet;
|
|
29
|
+
}
|
|
8
30
|
|
|
9
31
|
export const configureOrderModuleTransformations = ({
|
|
10
32
|
Orders,
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { ModuleInput, UnchainedCore } from '@unchainedshop/
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { OrderPayment } from '@unchainedshop/types/orders.payments.js';
|
|
5
|
-
import { OrderPosition } from '@unchainedshop/types/orders.positions.js';
|
|
1
|
+
import { ModuleInput, UnchainedCore } from '@unchainedshop/core';
|
|
2
|
+
import { OrderDelivery } from '@unchainedshop/core-orders';
|
|
3
|
+
import { OrderPayment } from '@unchainedshop/core-orders';
|
|
6
4
|
import { generateDbFilterById } from '@unchainedshop/mongodb';
|
|
7
5
|
import { createRequire } from 'node:module';
|
|
8
6
|
import { OrderDeliveriesCollection } from '../db/OrderDeliveriesCollection.js';
|
|
@@ -13,15 +11,38 @@ import { OrderPositionsCollection } from '../db/OrderPositionsCollection.js';
|
|
|
13
11
|
import { OrdersCollection } from '../db/OrdersCollection.js';
|
|
14
12
|
import { OrderDiscountDirector } from '../director/OrderDiscountDirector.js';
|
|
15
13
|
import { OrderPricingDirector } from '../director/OrderPricingDirector.js';
|
|
16
|
-
import { ordersSettings } from '../orders-settings.js';
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
14
|
+
import { ordersSettings, OrdersSettingsOptions } from '../orders-settings.js';
|
|
15
|
+
import {
|
|
16
|
+
configureOrderDeliveriesModule,
|
|
17
|
+
OrderDeliveriesModule,
|
|
18
|
+
} from './configureOrderDeliveriesModule.js';
|
|
19
|
+
import { configureOrderDiscountsModule, OrderDiscountsModule } from './configureOrderDiscountsModule.js';
|
|
20
|
+
import { configureOrderPaymentsModule, OrderPaymentsModule } from './configureOrderPaymentsModule.js';
|
|
21
|
+
import { configureOrderPositionsModule, OrderPositionsModule } from './configureOrderPositionsModule.js';
|
|
22
|
+
import { configureOrderModuleMutations, OrderMutations } from './configureOrdersModule-mutations.js';
|
|
23
|
+
import { configureOrderModuleProcessing, OrderProcessing } from './configureOrdersModule-processing.js';
|
|
24
|
+
import { configureOrdersModuleQueries, OrderQueries } from './configureOrdersModule-queries.js';
|
|
25
|
+
import {
|
|
26
|
+
configureOrderModuleTransformations,
|
|
27
|
+
OrderTransformations,
|
|
28
|
+
} from './configureOrdersModule-transformations.js';
|
|
29
|
+
import { Order, OrderPosition } from '../types.js';
|
|
30
|
+
|
|
31
|
+
export type OrdersModule = OrderQueries &
|
|
32
|
+
OrderTransformations &
|
|
33
|
+
OrderProcessing &
|
|
34
|
+
OrderMutations & {
|
|
35
|
+
// Order context recalculations
|
|
36
|
+
initProviders: (order: Order, unchainedAPI: UnchainedCore) => Promise<Order>;
|
|
37
|
+
updateCalculation: (orderId: string, unchainedAPI: UnchainedCore) => Promise<Order>;
|
|
38
|
+
invalidateProviders: (unchainedAPI: UnchainedCore, maxAgeDays: number) => Promise<void>;
|
|
39
|
+
|
|
40
|
+
// Sub entities
|
|
41
|
+
deliveries: OrderDeliveriesModule;
|
|
42
|
+
discounts: OrderDiscountsModule;
|
|
43
|
+
positions: OrderPositionsModule;
|
|
44
|
+
payments: OrderPaymentsModule;
|
|
45
|
+
};
|
|
25
46
|
|
|
26
47
|
const require = createRequire(import.meta.url);
|
|
27
48
|
const { Locker, MongoAdapter } = require('@kontsedal/locco');
|
|
@@ -95,7 +116,7 @@ export const configureOrdersModule = async ({
|
|
|
95
116
|
await Promise.all(
|
|
96
117
|
systemDiscounts
|
|
97
118
|
.filter((key) => currentDiscountKeys.indexOf(key) === -1)
|
|
98
|
-
.map((discountKey) =>
|
|
119
|
+
.map(async (discountKey) =>
|
|
99
120
|
modules.orders.discounts.create({
|
|
100
121
|
orderId: order._id,
|
|
101
122
|
discountKey,
|
|
@@ -256,6 +277,23 @@ export const configureOrdersModule = async ({
|
|
|
256
277
|
);
|
|
257
278
|
};
|
|
258
279
|
|
|
280
|
+
const invalidateProviders = async (unchainedAPI, maxAgeDays = 30) => {
|
|
281
|
+
const ONE_DAY_IN_MILLISECONDS = 86400000;
|
|
282
|
+
|
|
283
|
+
const minValidDate = new Date(new Date().getTime() - maxAgeDays * ONE_DAY_IN_MILLISECONDS);
|
|
284
|
+
|
|
285
|
+
const orders = await Orders.find({
|
|
286
|
+
status: { $eq: null },
|
|
287
|
+
updated: { $gte: minValidDate },
|
|
288
|
+
}).toArray();
|
|
289
|
+
|
|
290
|
+
await Promise.allSettled(
|
|
291
|
+
orders.map(async (order) => {
|
|
292
|
+
await updateCalculation(order._id, unchainedAPI);
|
|
293
|
+
}),
|
|
294
|
+
);
|
|
295
|
+
};
|
|
296
|
+
|
|
259
297
|
const orderQueries = configureOrdersModuleQueries({ Orders });
|
|
260
298
|
const orderTransformations = configureOrderModuleTransformations({
|
|
261
299
|
Orders,
|
|
@@ -272,28 +310,22 @@ export const configureOrdersModule = async ({
|
|
|
272
310
|
OrderDeliveries,
|
|
273
311
|
OrderPayments,
|
|
274
312
|
OrderPositions,
|
|
275
|
-
initProviders,
|
|
276
|
-
updateCalculation,
|
|
277
313
|
});
|
|
278
314
|
|
|
279
315
|
const orderDiscountsModule = configureOrderDiscountsModule({
|
|
280
316
|
OrderDiscounts,
|
|
281
|
-
updateCalculation,
|
|
282
317
|
});
|
|
283
318
|
|
|
284
319
|
const orderPositionsModule = configureOrderPositionsModule({
|
|
285
320
|
OrderPositions,
|
|
286
|
-
updateCalculation,
|
|
287
321
|
});
|
|
288
322
|
|
|
289
323
|
const orderPaymentsModule = configureOrderPaymentsModule({
|
|
290
324
|
OrderPayments,
|
|
291
|
-
updateCalculation,
|
|
292
325
|
});
|
|
293
326
|
|
|
294
327
|
const orderDeliveriesModule = configureOrderDeliveriesModule({
|
|
295
328
|
OrderDeliveries,
|
|
296
|
-
updateCalculation,
|
|
297
329
|
});
|
|
298
330
|
|
|
299
331
|
return {
|
|
@@ -302,6 +334,10 @@ export const configureOrdersModule = async ({
|
|
|
302
334
|
...orderProcessing,
|
|
303
335
|
...orderMutations,
|
|
304
336
|
|
|
337
|
+
initProviders,
|
|
338
|
+
updateCalculation,
|
|
339
|
+
invalidateProviders,
|
|
340
|
+
|
|
305
341
|
// Subentities
|
|
306
342
|
deliveries: orderDeliveriesModule,
|
|
307
343
|
discounts: orderDiscountsModule,
|
package/src/orders-index.ts
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
export
|
|
13
|
-
export { OrderPricingDirector } from './director/OrderPricingDirector.js';
|
|
14
|
-
export { OrderPricingSheet } from './director/OrderPricingSheet.js';
|
|
15
|
-
|
|
16
|
-
export { ordersSettings } from './orders-settings.js';
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './module/configureOrdersModule.js';
|
|
3
|
+
export * from './service/orderServices.js';
|
|
4
|
+
export * from './orders-settings.js';
|
|
5
|
+
|
|
6
|
+
export * from './director/OrderDiscountConfiguration.js';
|
|
7
|
+
export * from './director/OrderDiscountAdapter.js';
|
|
8
|
+
export * from './director/OrderDiscountDirector.js';
|
|
9
|
+
|
|
10
|
+
export * from './director/OrderPricingAdapter.js';
|
|
11
|
+
export * from './director/OrderPricingDirector.js';
|
|
12
|
+
export * from './director/OrderPricingSheet.js';
|
package/src/orders-settings.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
import { OrdersSettingsOptions } from '@unchainedshop/types/orders.js';
|
|
2
1
|
import { generateRandomHash } from '@unchainedshop/utils';
|
|
2
|
+
import { Order } from './types.js';
|
|
3
|
+
import { UnchainedCore } from '@unchainedshop/core';
|
|
4
|
+
import { Product } from '@unchainedshop/core-products';
|
|
5
|
+
|
|
6
|
+
export interface OrderSettingsOrderPositionValidation {
|
|
7
|
+
order: Order;
|
|
8
|
+
product: Product;
|
|
9
|
+
quantityDiff?: number;
|
|
10
|
+
configuration?: Array<{ key: string; value: string }>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface OrdersSettingsOptions {
|
|
14
|
+
ensureUserHasCart?: boolean;
|
|
15
|
+
orderNumberHashFn?: (order: Order, index: number) => string;
|
|
16
|
+
validateOrderPosition?: (
|
|
17
|
+
validationParams: OrderSettingsOrderPositionValidation,
|
|
18
|
+
context: UnchainedCore,
|
|
19
|
+
) => Promise<void>;
|
|
20
|
+
lockOrderDuringCheckout?: boolean;
|
|
21
|
+
}
|
|
3
22
|
|
|
4
23
|
export const defaultValidateOrderPosition = async ({ product }, { modules }) => {
|
|
5
24
|
if (!modules.products.isActive(product)) {
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
|
+
import { Order } from '../types.js';
|
|
3
|
+
|
|
4
|
+
export type MigrateOrderCartsService = (
|
|
5
|
+
params: {
|
|
6
|
+
fromUserId: string;
|
|
7
|
+
toUserId: string;
|
|
8
|
+
shouldMerge: boolean;
|
|
9
|
+
countryContext: string;
|
|
10
|
+
},
|
|
11
|
+
unchainedAPI: UnchainedCore,
|
|
12
|
+
) => Promise<Order>;
|
|
2
13
|
|
|
3
14
|
export const migrateOrderCartsService: MigrateOrderCartsService = async (
|
|
4
15
|
{ fromUserId, toUserId, shouldMerge, countryContext },
|
|
@@ -29,16 +40,12 @@ export const migrateOrderCartsService: MigrateOrderCartsService = async (
|
|
|
29
40
|
|
|
30
41
|
// Move billing address if target order has none
|
|
31
42
|
if (fromCart.billingAddress && !toCart.billingAddress) {
|
|
32
|
-
await unchainedAPI.modules.orders.updateBillingAddress(
|
|
33
|
-
toCart._id,
|
|
34
|
-
fromCart.billingAddress,
|
|
35
|
-
unchainedAPI,
|
|
36
|
-
);
|
|
43
|
+
await unchainedAPI.modules.orders.updateBillingAddress(toCart._id, fromCart.billingAddress);
|
|
37
44
|
}
|
|
38
45
|
|
|
39
46
|
// Move contact data if target order has none
|
|
40
47
|
if (fromCart.contact && !toCart.contact) {
|
|
41
|
-
await unchainedAPI.modules.orders.updateContact(toCart._id, fromCart.contact
|
|
48
|
+
await unchainedAPI.modules.orders.updateContact(toCart._id, fromCart.contact);
|
|
42
49
|
}
|
|
43
50
|
|
|
44
51
|
await unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { User } from '@unchainedshop/core-users';
|
|
2
2
|
import { ordersSettings } from '../orders-settings.js';
|
|
3
3
|
import { resolveBestCurrency } from '@unchainedshop/utils';
|
|
4
|
+
import { UnchainedCore } from '@unchainedshop/core';
|
|
5
|
+
import { Order } from '../types.js';
|
|
6
|
+
|
|
7
|
+
export type NextUserCartService = (
|
|
8
|
+
params: {
|
|
9
|
+
user: User;
|
|
10
|
+
orderNumber?: string;
|
|
11
|
+
countryCode?: string;
|
|
12
|
+
forceCartCreation?: boolean;
|
|
13
|
+
},
|
|
14
|
+
unchainedAPI: UnchainedCore,
|
|
15
|
+
) => Promise<Order | null>;
|
|
4
16
|
|
|
5
17
|
export const nextUserCartService: NextUserCartService = async (
|
|
6
18
|
{ user, orderNumber, countryCode, forceCartCreation },
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { migrateOrderCartsService, MigrateOrderCartsService } from './migrateOrderCartService.js';
|
|
2
|
+
import { nextUserCartService, NextUserCartService } from './nextUserCartService.js';
|
|
3
|
+
|
|
4
|
+
export interface OrderServices {
|
|
5
|
+
migrateOrderCarts: MigrateOrderCartsService;
|
|
6
|
+
nextUserCart: NextUserCartService;
|
|
7
|
+
}
|
|
4
8
|
|
|
5
9
|
export const orderServices: OrderServices = {
|
|
6
10
|
migrateOrderCarts: migrateOrderCartsService,
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { ProductPricingCalculation } from '@unchainedshop/core-products';
|
|
2
|
+
import type { TimestampFields, LogFields, Address, Contact } from '@unchainedshop/mongodb';
|
|
3
|
+
import { OrderPrice } from './director/OrderPricingDirector.js';
|
|
4
|
+
|
|
5
|
+
export type OrderReport = {
|
|
6
|
+
newCount: number;
|
|
7
|
+
checkoutCount: number;
|
|
8
|
+
rejectCount: number;
|
|
9
|
+
confirmCount: number;
|
|
10
|
+
fulfillCount: number;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export enum OrderStatus {
|
|
14
|
+
PENDING = 'PENDING',
|
|
15
|
+
CONFIRMED = 'CONFIRMED',
|
|
16
|
+
FULLFILLED = 'FULLFILLED',
|
|
17
|
+
REJECTED = 'REJECTED',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type OrderPosition = {
|
|
21
|
+
_id?: string;
|
|
22
|
+
calculation: Array<ProductPricingCalculation>;
|
|
23
|
+
configuration: Array<{ key: string; value: string }>;
|
|
24
|
+
context?: any;
|
|
25
|
+
orderId: string;
|
|
26
|
+
originalProductId?: string;
|
|
27
|
+
productId: string;
|
|
28
|
+
quantity: number;
|
|
29
|
+
quotationId?: string;
|
|
30
|
+
scheduling: Array<any>;
|
|
31
|
+
} & TimestampFields;
|
|
32
|
+
|
|
33
|
+
export type Order = {
|
|
34
|
+
_id?: string;
|
|
35
|
+
billingAddress?: Address;
|
|
36
|
+
calculation: Array<any>;
|
|
37
|
+
confirmed?: Date;
|
|
38
|
+
rejected?: Date;
|
|
39
|
+
contact?: Contact;
|
|
40
|
+
context?: any;
|
|
41
|
+
countryCode: string;
|
|
42
|
+
currency: string;
|
|
43
|
+
deliveryId?: string;
|
|
44
|
+
fullfilled?: Date;
|
|
45
|
+
ordered?: Date;
|
|
46
|
+
orderNumber?: string;
|
|
47
|
+
originEnrollmentId?: string;
|
|
48
|
+
paymentId?: string;
|
|
49
|
+
status: OrderStatus | null;
|
|
50
|
+
userId: string;
|
|
51
|
+
} & LogFields &
|
|
52
|
+
TimestampFields;
|
|
53
|
+
|
|
54
|
+
export enum OrderDiscountTrigger {
|
|
55
|
+
USER = 'USER',
|
|
56
|
+
SYSTEM = 'SYSTEM',
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export type OrderDiscount = {
|
|
60
|
+
_id?: string;
|
|
61
|
+
orderId: string;
|
|
62
|
+
code?: string;
|
|
63
|
+
total?: OrderPrice;
|
|
64
|
+
trigger?: OrderDiscountTrigger;
|
|
65
|
+
discountKey?: string;
|
|
66
|
+
reservation?: any;
|
|
67
|
+
context?: any;
|
|
68
|
+
} & TimestampFields;
|
|
69
|
+
|
|
70
|
+
export type OrderQuery = {
|
|
71
|
+
includeCarts?: boolean;
|
|
72
|
+
orderStatus?: OrderStatus[];
|
|
73
|
+
queryString?: string;
|
|
74
|
+
status?: OrderStatus[];
|
|
75
|
+
userId?: string;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export enum OrderDeliveryStatus {
|
|
79
|
+
OPEN = 'OPEN', // Null value is mapped to OPEN status
|
|
80
|
+
DELIVERED = 'DELIVERED',
|
|
81
|
+
RETURNED = 'RETURNED',
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export enum OrderPaymentStatus {
|
|
85
|
+
OPEN = 'OPEN', // Null value is mapped to OPEN status
|
|
86
|
+
PAID = 'PAID',
|
|
87
|
+
REFUNDED = 'REFUNDED',
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export type OrderPayment = {
|
|
91
|
+
_id?: string;
|
|
92
|
+
orderId: string;
|
|
93
|
+
context?: any;
|
|
94
|
+
paid?: Date;
|
|
95
|
+
transactionId?: string;
|
|
96
|
+
paymentProviderId?: string;
|
|
97
|
+
status?: OrderPaymentStatus | null;
|
|
98
|
+
calculation?: Array<any>;
|
|
99
|
+
} & LogFields &
|
|
100
|
+
TimestampFields;
|
|
101
|
+
|
|
102
|
+
export type OrderPaymentDiscount = Omit<OrderPrice, '_id'> & {
|
|
103
|
+
_id?: string;
|
|
104
|
+
discountId: string;
|
|
105
|
+
item: OrderPayment;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export type OrderDelivery = {
|
|
109
|
+
_id?: string;
|
|
110
|
+
orderId: string;
|
|
111
|
+
deliveryProviderId: string;
|
|
112
|
+
delivered?: Date;
|
|
113
|
+
status: OrderDeliveryStatus | null;
|
|
114
|
+
context?: any;
|
|
115
|
+
calculation: Array<any>;
|
|
116
|
+
} & LogFields &
|
|
117
|
+
TimestampFields;
|
|
118
|
+
|
|
119
|
+
export type OrderDeliveryDiscount = Omit<OrderPrice, '_id'> & {
|
|
120
|
+
_id?: string;
|
|
121
|
+
discountId: string;
|
|
122
|
+
item: OrderDelivery;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export type OrderPositionDiscount = Omit<OrderPrice, '_id'> & {
|
|
126
|
+
_id?: string;
|
|
127
|
+
discountId: string;
|
|
128
|
+
item: OrderPosition;
|
|
129
|
+
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderDeliveriesSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderDeliveriesSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAUxC,eAAO,MAAM,qBAAqB,cAYjC,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Schemas } from '@unchainedshop/utils';
|
|
2
|
-
import SimpleSchema from 'simpl-schema';
|
|
3
|
-
const calculationFields = {
|
|
4
|
-
calculation: Array,
|
|
5
|
-
'calculation.$': {
|
|
6
|
-
type: Object,
|
|
7
|
-
blackbox: true,
|
|
8
|
-
},
|
|
9
|
-
};
|
|
10
|
-
export const OrderDeliveriesSchema = new SimpleSchema({
|
|
11
|
-
delivered: Date,
|
|
12
|
-
deliveryProviderId: String,
|
|
13
|
-
orderId: String,
|
|
14
|
-
status: String,
|
|
15
|
-
...calculationFields,
|
|
16
|
-
...Schemas.contextFields,
|
|
17
|
-
...Schemas.logFields,
|
|
18
|
-
...Schemas.timestampFields,
|
|
19
|
-
}, { requiredByDefault: false });
|
|
20
|
-
//# sourceMappingURL=OrderDeliveriesSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderDeliveriesSchema.js","sourceRoot":"","sources":["../../src/db/OrderDeliveriesSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE;QACf,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,YAAY,CACnD;IACE,SAAS,EAAE,IAAI;IACf,kBAAkB,EAAE,MAAM;IAC1B,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,GAAG,iBAAiB;IACpB,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,SAAS;IACpB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderDiscountsSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderDiscountsSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,eAAO,MAAM,oBAAoB,cAWhC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Schemas } from '@unchainedshop/utils';
|
|
2
|
-
import SimpleSchema from 'simpl-schema';
|
|
3
|
-
export const OrderDiscountsSchema = new SimpleSchema({
|
|
4
|
-
orderId: String,
|
|
5
|
-
code: String,
|
|
6
|
-
trigger: { type: String, required: true },
|
|
7
|
-
discountKey: { type: String, required: true },
|
|
8
|
-
reservation: { type: Object, blackbox: true },
|
|
9
|
-
...Schemas.contextFields,
|
|
10
|
-
...Schemas.timestampFields,
|
|
11
|
-
}, { requiredByDefault: false });
|
|
12
|
-
//# sourceMappingURL=OrderDiscountsSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderDiscountsSchema.js","sourceRoot":"","sources":["../../src/db/OrderDiscountsSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,YAAY,CAClD;IACE,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC7C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC7C,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderPaymentsSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderPaymentsSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAUxC,eAAO,MAAM,mBAAmB,cAY/B,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Schemas } from '@unchainedshop/utils';
|
|
2
|
-
import SimpleSchema from 'simpl-schema';
|
|
3
|
-
const calculationFields = {
|
|
4
|
-
calculation: Array,
|
|
5
|
-
'calculation.$': {
|
|
6
|
-
type: Object,
|
|
7
|
-
blackbox: true,
|
|
8
|
-
},
|
|
9
|
-
};
|
|
10
|
-
export const OrderPaymentsSchema = new SimpleSchema({
|
|
11
|
-
orderId: String,
|
|
12
|
-
paymentProviderId: String,
|
|
13
|
-
paid: Date,
|
|
14
|
-
status: String,
|
|
15
|
-
...calculationFields,
|
|
16
|
-
...Schemas.contextFields,
|
|
17
|
-
...Schemas.logFields,
|
|
18
|
-
...Schemas.timestampFields,
|
|
19
|
-
}, { requiredByDefault: false });
|
|
20
|
-
//# sourceMappingURL=OrderPaymentsSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderPaymentsSchema.js","sourceRoot":"","sources":["../../src/db/OrderPaymentsSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE;QACf,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,YAAY,CACjD;IACE,OAAO,EAAE,MAAM;IACf,iBAAiB,EAAE,MAAM;IACzB,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,MAAM;IACd,GAAG,iBAAiB;IACpB,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,SAAS;IACpB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderPositionsSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderPositionsSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAexC,eAAO,MAAM,oBAAoB,cAwBhC,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Schemas } from '@unchainedshop/utils';
|
|
2
|
-
import SimpleSchema from 'simpl-schema';
|
|
3
|
-
const calculationFields = {
|
|
4
|
-
calculation: Array,
|
|
5
|
-
'calculation.$': {
|
|
6
|
-
type: Object,
|
|
7
|
-
blackbox: true,
|
|
8
|
-
},
|
|
9
|
-
scheduling: Array,
|
|
10
|
-
'scheduling.$': {
|
|
11
|
-
type: Object,
|
|
12
|
-
blackbox: true,
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
export const OrderPositionsSchema = new SimpleSchema({
|
|
16
|
-
productId: String,
|
|
17
|
-
orderId: String,
|
|
18
|
-
originalProductId: { type: String },
|
|
19
|
-
quotationId: { type: String },
|
|
20
|
-
quantity: Number,
|
|
21
|
-
configuration: Array,
|
|
22
|
-
'configuration.$': {
|
|
23
|
-
type: Object,
|
|
24
|
-
required: true,
|
|
25
|
-
},
|
|
26
|
-
'configuration.$.key': {
|
|
27
|
-
type: String,
|
|
28
|
-
required: true,
|
|
29
|
-
},
|
|
30
|
-
'configuration.$.value': {
|
|
31
|
-
type: String,
|
|
32
|
-
},
|
|
33
|
-
...calculationFields,
|
|
34
|
-
...Schemas.contextFields,
|
|
35
|
-
...Schemas.timestampFields,
|
|
36
|
-
}, { requiredByDefault: false });
|
|
37
|
-
//# sourceMappingURL=OrderPositionsSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderPositionsSchema.js","sourceRoot":"","sources":["../../src/db/OrderPositionsSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE;QACf,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,UAAU,EAAE,KAAK;IACjB,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,YAAY,CAClD;IACE,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,MAAM;IACf,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACnC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7B,QAAQ,EAAE,MAAM;IAChB,aAAa,EAAE,KAAK;IACpB,iBAAiB,EAAE;QACjB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,MAAM;KACb;IACD,GAAG,iBAAiB;IACpB,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
package/lib/db/OrdersSchema.d.ts
DELETED