@unchainedshop/core-orders 3.0.0-alpha7 → 3.0.0-rc1
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/director/OrderDiscountAdapter.d.ts +2 -2
- 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/OrderDiscountDirector.js.map +1 -1
- package/lib/director/OrderPricingAdapter.d.ts +3 -3
- package/lib/director/OrderPricingAdapter.d.ts.map +1 -1
- package/lib/director/OrderPricingAdapter.js.map +1 -1
- package/lib/director/OrderPricingDirector.d.ts +1 -1
- package/lib/director/OrderPricingDirector.d.ts.map +1 -1
- package/lib/module/buildFindSelector.d.ts +5 -0
- package/lib/module/buildFindSelector.d.ts.map +1 -0
- package/lib/module/buildFindSelector.js +18 -0
- package/lib/module/buildFindSelector.js.map +1 -0
- package/lib/module/configureOrderDeliveriesModule.d.ts +14 -27
- package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
- package/lib/module/configureOrderDeliveriesModule.js +7 -68
- package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
- package/lib/module/configureOrderDeliveriesModule_BACKUP_54554.d.ts +24 -0
- package/lib/module/configureOrderDeliveriesModule_BACKUP_54554.d.ts.map +1 -0
- package/lib/module/configureOrderDeliveriesModule_BACKUP_54554.js +101 -0
- package/lib/module/configureOrderDeliveriesModule_BACKUP_54554.js.map +1 -0
- package/lib/module/configureOrderDeliveriesModule_BASE_54554.d.ts +36 -0
- package/lib/module/configureOrderDeliveriesModule_BASE_54554.d.ts.map +1 -0
- package/lib/module/configureOrderDeliveriesModule_BASE_54554.js +162 -0
- package/lib/module/configureOrderDeliveriesModule_BASE_54554.js.map +1 -0
- package/lib/module/configureOrderDeliveriesModule_LOCAL_54554.d.ts +23 -0
- package/lib/module/configureOrderDeliveriesModule_LOCAL_54554.d.ts.map +1 -0
- package/lib/module/configureOrderDeliveriesModule_LOCAL_54554.js +97 -0
- package/lib/module/configureOrderDeliveriesModule_LOCAL_54554.js.map +1 -0
- package/lib/module/configureOrderDeliveriesModule_REMOTE_54554.d.ts +37 -0
- package/lib/module/configureOrderDeliveriesModule_REMOTE_54554.d.ts.map +1 -0
- package/lib/module/configureOrderDeliveriesModule_REMOTE_54554.js +166 -0
- package/lib/module/configureOrderDeliveriesModule_REMOTE_54554.js.map +1 -0
- package/lib/module/configureOrderDiscountsModule.d.ts +17 -18
- package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
- package/lib/module/configureOrderDiscountsModule.js +31 -140
- package/lib/module/configureOrderDiscountsModule.js.map +1 -1
- package/lib/module/configureOrderDiscountsModule_BACKUP_55046.d.ts +26 -0
- package/lib/module/configureOrderDiscountsModule_BACKUP_55046.d.ts.map +1 -0
- package/lib/module/configureOrderDiscountsModule_BACKUP_55046.js +69 -0
- package/lib/module/configureOrderDiscountsModule_BACKUP_55046.js.map +1 -0
- package/lib/module/configureOrderDiscountsModule_BASE_55046.d.ts +26 -0
- package/lib/module/configureOrderDiscountsModule_BASE_55046.d.ts.map +1 -0
- package/lib/module/configureOrderDiscountsModule_BASE_55046.js +178 -0
- package/lib/module/configureOrderDiscountsModule_BASE_55046.js.map +1 -0
- package/lib/module/configureOrderDiscountsModule_LOCAL_55046.d.ts +25 -0
- package/lib/module/configureOrderDiscountsModule_LOCAL_55046.d.ts.map +1 -0
- package/lib/module/configureOrderDiscountsModule_LOCAL_55046.js +65 -0
- package/lib/module/configureOrderDiscountsModule_LOCAL_55046.js.map +1 -0
- package/lib/module/configureOrderDiscountsModule_REMOTE_55046.d.ts +27 -0
- package/lib/module/configureOrderDiscountsModule_REMOTE_55046.d.ts.map +1 -0
- package/lib/module/configureOrderDiscountsModule_REMOTE_55046.js +182 -0
- package/lib/module/configureOrderDiscountsModule_REMOTE_55046.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule.d.ts +17 -37
- package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
- package/lib/module/configureOrderPaymentsModule.js +10 -118
- package/lib/module/configureOrderPaymentsModule.js.map +1 -1
- package/lib/module/configureOrderPaymentsModule_BACKUP_55464.d.ts +32 -0
- package/lib/module/configureOrderPaymentsModule_BACKUP_55464.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_BACKUP_55464.js +135 -0
- package/lib/module/configureOrderPaymentsModule_BACKUP_55464.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule_BACKUP_55877.d.ts +32 -0
- package/lib/module/configureOrderPaymentsModule_BACKUP_55877.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_BACKUP_55877.js +135 -0
- package/lib/module/configureOrderPaymentsModule_BACKUP_55877.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55464.d.ts +51 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55464.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55464.js +243 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55464.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55877.d.ts +51 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55877.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55877.js +243 -0
- package/lib/module/configureOrderPaymentsModule_BASE_55877.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55464.d.ts +31 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55464.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55464.js +131 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55464.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55877.d.ts +31 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55877.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55877.js +131 -0
- package/lib/module/configureOrderPaymentsModule_LOCAL_55877.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55464.d.ts +52 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55464.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55464.js +247 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55464.js.map +1 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55877.d.ts +52 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55877.d.ts.map +1 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55877.js +247 -0
- package/lib/module/configureOrderPaymentsModule_REMOTE_55877.js.map +1 -0
- package/lib/module/configureOrderPositionsModule.d.ts +22 -41
- package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
- package/lib/module/configureOrderPositionsModule.js +19 -82
- package/lib/module/configureOrderPositionsModule.js.map +1 -1
- package/lib/module/configureOrderPositionsModule_BACKUP_56197.d.ts +44 -0
- package/lib/module/configureOrderPositionsModule_BACKUP_56197.d.ts.map +1 -0
- package/lib/module/configureOrderPositionsModule_BACKUP_56197.js +138 -0
- package/lib/module/configureOrderPositionsModule_BACKUP_56197.js.map +1 -0
- package/lib/module/configureOrderPositionsModule_BASE_56197.d.ts +60 -0
- package/lib/module/configureOrderPositionsModule_BASE_56197.d.ts.map +1 -0
- package/lib/module/configureOrderPositionsModule_BASE_56197.js +201 -0
- package/lib/module/configureOrderPositionsModule_BASE_56197.js.map +1 -0
- package/lib/module/configureOrderPositionsModule_LOCAL_56197.d.ts +43 -0
- package/lib/module/configureOrderPositionsModule_LOCAL_56197.d.ts.map +1 -0
- package/lib/module/configureOrderPositionsModule_LOCAL_56197.js +134 -0
- package/lib/module/configureOrderPositionsModule_LOCAL_56197.js.map +1 -0
- package/lib/module/configureOrderPositionsModule_REMOTE_56197.d.ts +61 -0
- package/lib/module/configureOrderPositionsModule_REMOTE_56197.d.ts.map +1 -0
- package/lib/module/configureOrderPositionsModule_REMOTE_56197.js +205 -0
- package/lib/module/configureOrderPositionsModule_REMOTE_56197.js.map +1 -0
- package/lib/module/configureOrdersModule-mutations.d.ts +4 -11
- package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-mutations.js +10 -49
- package/lib/module/configureOrdersModule-mutations.js.map +1 -1
- package/lib/module/configureOrdersModule-processing.d.ts +4 -8
- package/lib/module/configureOrdersModule-processing.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-processing.js +3 -1
- package/lib/module/configureOrdersModule-processing.js.map +1 -1
- package/lib/module/configureOrdersModule-queries.d.ts +10 -5
- package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-queries.js +35 -22
- package/lib/module/configureOrdersModule-queries.js.map +1 -1
- package/lib/module/configureOrdersModule-transformations.d.ts +2 -3
- package/lib/module/configureOrdersModule-transformations.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-transformations.js +3 -3
- package/lib/module/configureOrdersModule-transformations.js.map +1 -1
- package/lib/module/configureOrdersModule.d.ts +11 -8
- package/lib/module/configureOrdersModule.d.ts.map +1 -1
- package/lib/module/configureOrdersModule.js +133 -153
- package/lib/module/configureOrdersModule.js.map +1 -1
- package/lib/orders-index.d.ts +0 -7
- package/lib/orders-index.d.ts.map +1 -1
- package/lib/orders-index.js +0 -7
- package/lib/orders-index.js.map +1 -1
- package/lib/orders-settings.d.ts +3 -7
- package/lib/orders-settings.d.ts.map +1 -1
- package/lib/orders-settings.js.map +1 -1
- package/lib/types.d.ts +8 -9
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/package.json +9 -12
- 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/module/buildFindSelector.test.ts +1 -1
- package/src/module/buildFindSelector.ts +24 -0
- package/src/module/configureOrderDeliveriesModule.ts +29 -172
- package/src/module/configureOrderDiscountsModule.ts +44 -210
- package/src/module/configureOrderPaymentsModule.ts +51 -261
- package/src/module/configureOrderPositionsModule.ts +54 -205
- package/src/module/configureOrdersModule-mutations.ts +12 -85
- package/src/module/configureOrdersModule-queries.ts +53 -29
- package/src/module/configureOrdersModule.ts +180 -263
- package/src/orders-index.ts +0 -9
- package/src/orders-settings.ts +4 -6
- package/src/types.ts +8 -9
- package/tsconfig.json +5 -7
- package/lib/service/migrateOrderCartService.d.ts +0 -10
- package/lib/service/migrateOrderCartService.d.ts.map +0 -1
- package/lib/service/migrateOrderCartService.js +0 -32
- package/lib/service/migrateOrderCartService.js.map +0 -1
- package/lib/service/nextUserCartService.d.ts +0 -11
- package/lib/service/nextUserCartService.d.ts.map +0 -1
- package/lib/service/nextUserCartService.js +0 -34
- package/lib/service/nextUserCartService.js.map +0 -1
- package/lib/service/orderServices.d.ts +0 -8
- package/lib/service/orderServices.d.ts.map +0 -1
- package/lib/service/orderServices.js +0 -7
- package/lib/service/orderServices.js.map +0 -1
- package/src/director/OrderDiscountAdapter.ts +0 -8
- package/src/director/OrderDiscountConfiguration.ts +0 -5
- package/src/director/OrderDiscountDirector.ts +0 -5
- package/src/director/OrderPricingAdapter.ts +0 -61
- package/src/director/OrderPricingDirector.ts +0 -72
- package/src/director/OrderPricingSheet.ts +0 -146
- package/src/module/configureOrdersModule-processing.ts +0 -508
- package/src/module/configureOrdersModule-transformations.ts +0 -171
- package/src/service/migrateOrderCartService.ts +0 -53
- package/src/service/nextUserCartService.ts +0 -54
- package/src/service/orderServices.ts +0 -12
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { OrderDelivery } from '@unchainedshop/core-orders';
|
|
3
|
-
import { OrderPayment } from '@unchainedshop/core-orders';
|
|
4
|
-
import { generateDbFilterById, ModuleInput } from '@unchainedshop/mongodb';
|
|
1
|
+
import { generateDbFilterById, ModuleInput, mongodb } from '@unchainedshop/mongodb';
|
|
5
2
|
import { createRequire } from 'node:module';
|
|
6
3
|
import { OrderDeliveriesCollection } from '../db/OrderDeliveriesCollection.js';
|
|
7
4
|
import { OrderDiscountsCollection } from '../db/OrderDiscountsCollection.js';
|
|
8
|
-
import { OrderDiscountTrigger } from '../db/OrderDiscountTrigger.js';
|
|
9
5
|
import { OrderPaymentsCollection } from '../db/OrderPaymentsCollection.js';
|
|
10
6
|
import { OrderPositionsCollection } from '../db/OrderPositionsCollection.js';
|
|
11
7
|
import { OrdersCollection } from '../db/OrdersCollection.js';
|
|
12
|
-
import { OrderDiscountDirector } from '../director/OrderDiscountDirector.js';
|
|
13
|
-
import { OrderPricingDirector } from '../director/OrderPricingDirector.js';
|
|
14
8
|
import { ordersSettings, OrdersSettingsOptions } from '../orders-settings.js';
|
|
15
9
|
import {
|
|
16
10
|
configureOrderDeliveriesModule,
|
|
@@ -20,37 +14,45 @@ import { configureOrderDiscountsModule, OrderDiscountsModule } from './configure
|
|
|
20
14
|
import { configureOrderPaymentsModule, OrderPaymentsModule } from './configureOrderPaymentsModule.js';
|
|
21
15
|
import { configureOrderPositionsModule, OrderPositionsModule } from './configureOrderPositionsModule.js';
|
|
22
16
|
import { configureOrderModuleMutations, OrderMutations } from './configureOrdersModule-mutations.js';
|
|
23
|
-
import { configureOrderModuleProcessing, OrderProcessing } from './configureOrdersModule-processing.js';
|
|
24
17
|
import { configureOrdersModuleQueries, OrderQueries } from './configureOrdersModule-queries.js';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
} from './configureOrdersModule-transformations.js';
|
|
29
|
-
import { Order, OrderPosition } from '../types.js';
|
|
18
|
+
|
|
19
|
+
import { emit, registerEvents } from '@unchainedshop/events';
|
|
20
|
+
import { Order, OrderStatus } from '../types.js';
|
|
30
21
|
|
|
31
22
|
export type OrdersModule = OrderQueries &
|
|
32
|
-
OrderTransformations &
|
|
33
|
-
OrderProcessing &
|
|
34
23
|
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
24
|
// Sub entities
|
|
41
25
|
deliveries: OrderDeliveriesModule;
|
|
42
26
|
discounts: OrderDiscountsModule;
|
|
43
27
|
positions: OrderPositionsModule;
|
|
44
28
|
payments: OrderPaymentsModule;
|
|
29
|
+
|
|
30
|
+
updateStatus: (orderId: string, params: { status: OrderStatus; info?: string }) => Promise<Order>;
|
|
31
|
+
acquireLock: (
|
|
32
|
+
orderId: string,
|
|
33
|
+
identifier: string,
|
|
34
|
+
timeout?: number,
|
|
35
|
+
) => Promise<{ release: () => void }>;
|
|
36
|
+
setDeliveryProvider: (orderId: string, deliveryProviderId: string) => Promise<Order>;
|
|
37
|
+
setPaymentProvider: (orderId: string, paymentProviderId: string) => Promise<Order>;
|
|
45
38
|
};
|
|
46
39
|
|
|
47
40
|
const require = createRequire(import.meta.url);
|
|
48
41
|
const { Locker, MongoAdapter } = require('@kontsedal/locco');
|
|
49
42
|
|
|
43
|
+
const ORDER_EVENTS: string[] = [
|
|
44
|
+
'ORDER_CHECKOUT',
|
|
45
|
+
'ORDER_CONFIRMED',
|
|
46
|
+
'ORDER_REJECTED',
|
|
47
|
+
'ORDER_FULLFILLED',
|
|
48
|
+
];
|
|
49
|
+
|
|
50
50
|
export const configureOrdersModule = async ({
|
|
51
51
|
db,
|
|
52
52
|
options: orderOptions = {},
|
|
53
53
|
}: ModuleInput<OrdersSettingsOptions>): Promise<OrdersModule> => {
|
|
54
|
+
registerEvents(ORDER_EVENTS);
|
|
55
|
+
|
|
54
56
|
ordersSettings.configureSettings(orderOptions);
|
|
55
57
|
|
|
56
58
|
const Orders = await OrdersCollection(db);
|
|
@@ -69,246 +71,10 @@ export const configureOrdersModule = async ({
|
|
|
69
71
|
retrySettings: { retryDelay: 200, retryTimes: 10 },
|
|
70
72
|
});
|
|
71
73
|
|
|
72
|
-
const findOrderPositions = async (order: Order) =>
|
|
73
|
-
OrderPositions.find(
|
|
74
|
-
{
|
|
75
|
-
orderId: order._id,
|
|
76
|
-
quantity: { $gt: 0 },
|
|
77
|
-
},
|
|
78
|
-
{},
|
|
79
|
-
).toArray();
|
|
80
|
-
|
|
81
|
-
const findOrderDelivery = async (order: Order) =>
|
|
82
|
-
OrderDeliveries.findOne(generateDbFilterById(order.deliveryId), {});
|
|
83
|
-
|
|
84
|
-
const findOrderPayment = async (order: Order) =>
|
|
85
|
-
OrderPayments.findOne(generateDbFilterById(order.paymentId), {});
|
|
86
|
-
|
|
87
|
-
const updateDiscounts = async (order: Order, unchainedAPI: UnchainedCore) => {
|
|
88
|
-
const { modules } = unchainedAPI;
|
|
89
|
-
|
|
90
|
-
// 1. go through existing order-discounts and check if discount still valid,
|
|
91
|
-
// those who are not valid anymore should get removed
|
|
92
|
-
const discounts = await modules.orders.discounts.findOrderDiscounts({
|
|
93
|
-
orderId: order._id,
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
await Promise.all(
|
|
97
|
-
discounts.map(async (discount) => {
|
|
98
|
-
const isValid = await modules.orders.discounts.isValid(discount, unchainedAPI);
|
|
99
|
-
|
|
100
|
-
if (!isValid) {
|
|
101
|
-
await modules.orders.discounts.delete(discount._id, unchainedAPI);
|
|
102
|
-
}
|
|
103
|
-
}),
|
|
104
|
-
);
|
|
105
|
-
|
|
106
|
-
// 2. run auto-system discount
|
|
107
|
-
const cleanedDiscounts = await modules.orders.discounts.findOrderDiscounts({
|
|
108
|
-
orderId: order._id,
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
const currentDiscountKeys = cleanedDiscounts.map(({ discountKey }) => discountKey);
|
|
112
|
-
|
|
113
|
-
const director = await OrderDiscountDirector.actions({ order, code: null }, unchainedAPI);
|
|
114
|
-
const systemDiscounts = await director.findSystemDiscounts();
|
|
115
|
-
|
|
116
|
-
await Promise.all(
|
|
117
|
-
systemDiscounts
|
|
118
|
-
.filter((key) => currentDiscountKeys.indexOf(key) === -1)
|
|
119
|
-
.map(async (discountKey) =>
|
|
120
|
-
modules.orders.discounts.create({
|
|
121
|
-
orderId: order._id,
|
|
122
|
-
discountKey,
|
|
123
|
-
trigger: OrderDiscountTrigger.SYSTEM,
|
|
124
|
-
}),
|
|
125
|
-
),
|
|
126
|
-
);
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const initProviders = async (order: Order, unchainedAPI: UnchainedCore) => {
|
|
130
|
-
const { modules } = unchainedAPI;
|
|
131
|
-
|
|
132
|
-
let updatedOrder = order;
|
|
133
|
-
|
|
134
|
-
// Init delivery provider
|
|
135
|
-
const supportedDeliveryProviders = await modules.delivery.findSupported(
|
|
136
|
-
{ order: updatedOrder },
|
|
137
|
-
unchainedAPI,
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
const orderDelivery = await modules.orders.deliveries.findDelivery({
|
|
141
|
-
orderDeliveryId: updatedOrder.deliveryId,
|
|
142
|
-
});
|
|
143
|
-
const deliveryProviderId = orderDelivery?.deliveryProviderId;
|
|
144
|
-
|
|
145
|
-
const isAlreadyInitializedWithSupportedDeliveryProvider = supportedDeliveryProviders?.some(
|
|
146
|
-
(provider) => {
|
|
147
|
-
return provider._id === deliveryProviderId;
|
|
148
|
-
},
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
if (supportedDeliveryProviders?.length > 0 && !isAlreadyInitializedWithSupportedDeliveryProvider) {
|
|
152
|
-
const defaultOrderDeliveryProvider = await modules.delivery.determineDefault(
|
|
153
|
-
supportedDeliveryProviders,
|
|
154
|
-
{ order: updatedOrder },
|
|
155
|
-
unchainedAPI,
|
|
156
|
-
);
|
|
157
|
-
if (defaultOrderDeliveryProvider) {
|
|
158
|
-
updatedOrder = await modules.orders.setDeliveryProvider(
|
|
159
|
-
updatedOrder._id,
|
|
160
|
-
defaultOrderDeliveryProvider._id,
|
|
161
|
-
unchainedAPI,
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Init payment provider
|
|
167
|
-
const supportedPaymentProviders = await modules.payment.paymentProviders.findSupported(
|
|
168
|
-
{ order: updatedOrder },
|
|
169
|
-
unchainedAPI,
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
const orderPayment = await modules.orders.payments.findOrderPayment({
|
|
173
|
-
orderPaymentId: updatedOrder.paymentId,
|
|
174
|
-
});
|
|
175
|
-
const paymentProviderId = orderPayment?.paymentProviderId;
|
|
176
|
-
|
|
177
|
-
const isAlreadyInitializedWithSupportedPaymentProvider = supportedPaymentProviders?.some(
|
|
178
|
-
(provider) => {
|
|
179
|
-
return provider._id === paymentProviderId;
|
|
180
|
-
},
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
if (supportedPaymentProviders?.length > 0 && !isAlreadyInitializedWithSupportedPaymentProvider) {
|
|
184
|
-
const paymentCredentials = await modules.payment.paymentCredentials.findPaymentCredentials(
|
|
185
|
-
{ userId: updatedOrder.userId, isPreferred: true },
|
|
186
|
-
{
|
|
187
|
-
sort: {
|
|
188
|
-
created: -1,
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
);
|
|
192
|
-
|
|
193
|
-
const defaultOrderPaymentProvider = await modules.payment.paymentProviders.determineDefault(
|
|
194
|
-
supportedPaymentProviders,
|
|
195
|
-
{ order: updatedOrder, paymentCredentials },
|
|
196
|
-
unchainedAPI,
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
if (defaultOrderPaymentProvider) {
|
|
200
|
-
updatedOrder = await modules.orders.setPaymentProvider(
|
|
201
|
-
updatedOrder._id,
|
|
202
|
-
defaultOrderPaymentProvider._id,
|
|
203
|
-
unchainedAPI,
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return updatedOrder;
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
const updateCalculation: OrdersModule['updateCalculation'] = async (orderId, unchainedAPI) => {
|
|
211
|
-
const { modules } = unchainedAPI;
|
|
212
|
-
|
|
213
|
-
const selector = generateDbFilterById(orderId);
|
|
214
|
-
const order = (await Orders.findOne(selector, {})) as Order;
|
|
215
|
-
|
|
216
|
-
// Don't recalculate orders, only carts
|
|
217
|
-
if (order.status !== null) return order;
|
|
218
|
-
|
|
219
|
-
await updateDiscounts(order, unchainedAPI);
|
|
220
|
-
|
|
221
|
-
let orderPositions = (await findOrderPositions(order)) as OrderPosition[];
|
|
222
|
-
orderPositions = await Promise.all(
|
|
223
|
-
orderPositions.map(async (orderPosition) =>
|
|
224
|
-
modules.orders.positions.updateCalculation(orderPosition, unchainedAPI),
|
|
225
|
-
),
|
|
226
|
-
);
|
|
227
|
-
|
|
228
|
-
let orderDelivery = (await findOrderDelivery(order)) as OrderDelivery;
|
|
229
|
-
if (orderDelivery) {
|
|
230
|
-
orderDelivery = await modules.orders.deliveries.updateCalculation(orderDelivery, unchainedAPI);
|
|
231
|
-
}
|
|
232
|
-
let orderPayment = (await findOrderPayment(order)) as OrderPayment;
|
|
233
|
-
if (orderPayment) {
|
|
234
|
-
orderPayment = await modules.orders.payments.updateCalculation(orderPayment, unchainedAPI);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
orderPositions = await Promise.all(
|
|
238
|
-
orderPositions.map(async (orderPosition) =>
|
|
239
|
-
modules.orders.positions.updateScheduling({ order, orderDelivery, orderPosition }, unchainedAPI),
|
|
240
|
-
),
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
const pricing = await OrderPricingDirector.actions(
|
|
244
|
-
{ order, orderPositions, orderDelivery, orderPayment },
|
|
245
|
-
unchainedAPI,
|
|
246
|
-
);
|
|
247
|
-
|
|
248
|
-
const calculation = await pricing.calculate();
|
|
249
|
-
const updated = new Date();
|
|
250
|
-
|
|
251
|
-
await Orders.updateOne(selector, {
|
|
252
|
-
$set: {
|
|
253
|
-
calculation,
|
|
254
|
-
updated,
|
|
255
|
-
},
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
/*
|
|
259
|
-
// We have to do initProviders after calculation, only then filterSupportedProviders will work correctly and has access to recent pricing
|
|
260
|
-
// initProviders calls updateCalculation anyways recursively when a new payment or delivery provider gets set
|
|
261
|
-
// Thus, if for example a discount change leads to a free delivery and free payment due to free items amount, the following happens in the stack:
|
|
262
|
-
// 1. create discount
|
|
263
|
-
// 2. update calculation -> order pricing updated to items 0
|
|
264
|
-
// 3. initProviders with updated order -> filterSupportedProviders -> delivery provider is invalid -> set new delivery provider
|
|
265
|
-
// 4. update calculation -> order pricing updated to items 0 and delivery 0
|
|
266
|
-
// 5. initProviders with updated order -> filterSupportedProviders -> payment provider is invalid -> set new payment provider
|
|
267
|
-
// 6. update calculation -> order pricing updated to items 0, delivery 0, payment 0
|
|
268
|
-
// 7. initProviders with updated order -> all providers are valid -> return order
|
|
269
|
-
*/
|
|
270
|
-
return initProviders(
|
|
271
|
-
{
|
|
272
|
-
...order,
|
|
273
|
-
calculation,
|
|
274
|
-
updated,
|
|
275
|
-
},
|
|
276
|
-
unchainedAPI,
|
|
277
|
-
);
|
|
278
|
-
};
|
|
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
|
-
|
|
297
74
|
const orderQueries = configureOrdersModuleQueries({ Orders });
|
|
298
|
-
|
|
299
|
-
Orders,
|
|
300
|
-
});
|
|
301
|
-
const orderProcessing = configureOrderModuleProcessing({
|
|
302
|
-
Orders,
|
|
303
|
-
OrderDeliveries,
|
|
304
|
-
OrderPayments,
|
|
305
|
-
OrderPositions,
|
|
306
|
-
locker,
|
|
307
|
-
});
|
|
75
|
+
|
|
308
76
|
const orderMutations = configureOrderModuleMutations({
|
|
309
77
|
Orders,
|
|
310
|
-
OrderDeliveries,
|
|
311
|
-
OrderPayments,
|
|
312
78
|
OrderPositions,
|
|
313
79
|
});
|
|
314
80
|
|
|
@@ -328,20 +94,171 @@ export const configureOrdersModule = async ({
|
|
|
328
94
|
OrderDeliveries,
|
|
329
95
|
});
|
|
330
96
|
|
|
97
|
+
const findNewOrderNumber = async (order: Order, index = 0) => {
|
|
98
|
+
const newHashID = ordersSettings.orderNumberHashFn(order, index);
|
|
99
|
+
if ((await Orders.countDocuments({ orderNumber: newHashID }, { limit: 1 })) === 0) {
|
|
100
|
+
return newHashID;
|
|
101
|
+
}
|
|
102
|
+
return findNewOrderNumber(order, index + 1);
|
|
103
|
+
};
|
|
104
|
+
|
|
331
105
|
return {
|
|
332
106
|
...orderQueries,
|
|
333
|
-
...orderTransformations,
|
|
334
|
-
...orderProcessing,
|
|
335
107
|
...orderMutations,
|
|
336
108
|
|
|
337
|
-
initProviders,
|
|
338
|
-
updateCalculation,
|
|
339
|
-
invalidateProviders,
|
|
340
|
-
|
|
341
109
|
// Subentities
|
|
342
110
|
deliveries: orderDeliveriesModule,
|
|
343
111
|
discounts: orderDiscountsModule,
|
|
344
112
|
positions: orderPositionsModule,
|
|
345
113
|
payments: orderPaymentsModule,
|
|
114
|
+
|
|
115
|
+
updateStatus: async (orderId, { status, info }) => {
|
|
116
|
+
const selector = generateDbFilterById(orderId);
|
|
117
|
+
const order = await Orders.findOne(selector, {});
|
|
118
|
+
|
|
119
|
+
if (order.status === status) return order;
|
|
120
|
+
|
|
121
|
+
const date = new Date();
|
|
122
|
+
const $set: Partial<Order> = {
|
|
123
|
+
status,
|
|
124
|
+
updated: new Date(),
|
|
125
|
+
};
|
|
126
|
+
switch (status) {
|
|
127
|
+
// explicitly use fallthrough here!
|
|
128
|
+
case OrderStatus.FULLFILLED:
|
|
129
|
+
$set.fullfilled = order.fullfilled || date;
|
|
130
|
+
case OrderStatus.REJECTED: // eslint-disable-line no-fallthrough
|
|
131
|
+
case OrderStatus.CONFIRMED: // eslint-disable-line no-fallthrough
|
|
132
|
+
if (status === OrderStatus.REJECTED) {
|
|
133
|
+
$set.rejected = order.rejected || date;
|
|
134
|
+
} else {
|
|
135
|
+
$set.confirmed = order.confirmed || date;
|
|
136
|
+
}
|
|
137
|
+
case OrderStatus.PENDING: // eslint-disable-line no-fallthrough
|
|
138
|
+
$set.ordered = order.ordered || date;
|
|
139
|
+
$set.orderNumber = order.orderNumber || (await findNewOrderNumber(order));
|
|
140
|
+
break;
|
|
141
|
+
default:
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const modifier: mongodb.UpdateFilter<Order> = {
|
|
146
|
+
$set,
|
|
147
|
+
$push: {
|
|
148
|
+
log: {
|
|
149
|
+
date,
|
|
150
|
+
status,
|
|
151
|
+
info,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const modificationResult = await Orders.findOneAndUpdate(
|
|
157
|
+
{
|
|
158
|
+
...selector,
|
|
159
|
+
status: { $ne: status }, // Only update if status is different
|
|
160
|
+
},
|
|
161
|
+
modifier,
|
|
162
|
+
{
|
|
163
|
+
returnDocument: 'after',
|
|
164
|
+
includeResultMetadata: true,
|
|
165
|
+
},
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
if (modificationResult.ok) {
|
|
169
|
+
if (order.status === null) {
|
|
170
|
+
// The first time that an order transitions away from cart is a checkout event
|
|
171
|
+
await emit('ORDER_CHECKOUT', { order: modificationResult.value, oldStatus: order.status });
|
|
172
|
+
}
|
|
173
|
+
switch (status) {
|
|
174
|
+
case OrderStatus.FULLFILLED:
|
|
175
|
+
await emit('ORDER_FULLFILLED', { order: modificationResult.value, oldStatus: order.status });
|
|
176
|
+
break;
|
|
177
|
+
case OrderStatus.REJECTED:
|
|
178
|
+
await emit('ORDER_REJECTED', { order: modificationResult.value, oldStatus: order.status });
|
|
179
|
+
break;
|
|
180
|
+
case OrderStatus.CONFIRMED:
|
|
181
|
+
await emit('ORDER_CONFIRMED', { order: modificationResult.value, oldStatus: order.status });
|
|
182
|
+
break;
|
|
183
|
+
default:
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return modificationResult.value || Orders.findOne(selector, {});
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
acquireLock: async (orderId: string, identifier: string, timeout = 5000) => {
|
|
192
|
+
return await locker.lock(`order:${identifier}:${orderId}`, timeout).acquire();
|
|
193
|
+
},
|
|
194
|
+
|
|
195
|
+
setDeliveryProvider: async (orderId, deliveryProviderId) => {
|
|
196
|
+
const delivery = await OrderDeliveries.findOne({
|
|
197
|
+
orderId,
|
|
198
|
+
deliveryProviderId,
|
|
199
|
+
});
|
|
200
|
+
const deliveryId =
|
|
201
|
+
delivery?._id ||
|
|
202
|
+
(
|
|
203
|
+
await orderDeliveriesModule.create({
|
|
204
|
+
calculation: [],
|
|
205
|
+
deliveryProviderId,
|
|
206
|
+
log: [],
|
|
207
|
+
orderId,
|
|
208
|
+
status: null,
|
|
209
|
+
})
|
|
210
|
+
)._id;
|
|
211
|
+
|
|
212
|
+
const order = await Orders.findOneAndUpdate(
|
|
213
|
+
{ _id: orderId },
|
|
214
|
+
{
|
|
215
|
+
$set: {
|
|
216
|
+
deliveryId,
|
|
217
|
+
updated: new Date(),
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
{ returnDocument: 'after' },
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
await emit('ORDER_SET_DELIVERY_PROVIDER', {
|
|
224
|
+
order,
|
|
225
|
+
deliveryProviderId,
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
return order;
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
setPaymentProvider: async (orderId, paymentProviderId) => {
|
|
232
|
+
const payment = await OrderPayments.findOne({
|
|
233
|
+
orderId,
|
|
234
|
+
paymentProviderId,
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
const paymentId =
|
|
238
|
+
payment?._id ||
|
|
239
|
+
(
|
|
240
|
+
await orderPaymentsModule.create({
|
|
241
|
+
calculation: [],
|
|
242
|
+
paymentProviderId,
|
|
243
|
+
log: [],
|
|
244
|
+
orderId,
|
|
245
|
+
status: null,
|
|
246
|
+
})
|
|
247
|
+
)._id;
|
|
248
|
+
const order = await Orders.findOneAndUpdate(
|
|
249
|
+
{ _id: orderId },
|
|
250
|
+
{
|
|
251
|
+
$set: { paymentId, updated: new Date() },
|
|
252
|
+
},
|
|
253
|
+
{ returnDocument: 'after' },
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
await emit('ORDER_SET_PAYMENT_PROVIDER', {
|
|
257
|
+
order,
|
|
258
|
+
paymentProviderId,
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
return order;
|
|
262
|
+
},
|
|
346
263
|
};
|
|
347
264
|
};
|
package/src/orders-index.ts
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
2
|
export * from './module/configureOrdersModule.js';
|
|
3
|
-
export * from './service/orderServices.js';
|
|
4
3
|
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,9 +1,7 @@
|
|
|
1
1
|
import { generateRandomHash } from '@unchainedshop/utils';
|
|
2
2
|
import { Order } from './types.js';
|
|
3
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
4
|
-
import { Product } from '@unchainedshop/core-products';
|
|
5
3
|
|
|
6
|
-
export interface OrderSettingsOrderPositionValidation {
|
|
4
|
+
export interface OrderSettingsOrderPositionValidation<Product = unknown> {
|
|
7
5
|
order: Order;
|
|
8
6
|
product: Product;
|
|
9
7
|
quantityDiff?: number;
|
|
@@ -13,14 +11,14 @@ export interface OrderSettingsOrderPositionValidation {
|
|
|
13
11
|
export interface OrdersSettingsOptions {
|
|
14
12
|
ensureUserHasCart?: boolean;
|
|
15
13
|
orderNumberHashFn?: (order: Order, index: number) => string;
|
|
16
|
-
validateOrderPosition?: (
|
|
14
|
+
validateOrderPosition?: <UnchainedAPI = unknown>(
|
|
17
15
|
validationParams: OrderSettingsOrderPositionValidation,
|
|
18
|
-
|
|
16
|
+
unchainedAPI: UnchainedAPI,
|
|
19
17
|
) => Promise<void>;
|
|
20
18
|
lockOrderDuringCheckout?: boolean;
|
|
21
19
|
}
|
|
22
20
|
|
|
23
|
-
export const defaultValidateOrderPosition = async ({ product }, { modules }) => {
|
|
21
|
+
export const defaultValidateOrderPosition = async ({ product }, { modules }: any) => {
|
|
24
22
|
if (!modules.products.isActive(product)) {
|
|
25
23
|
throw new Error('This product is inactive');
|
|
26
24
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { OrderPrice } from './director/OrderPricingDirector.js';
|
|
1
|
+
import { TimestampFields, LogFields, Address, Contact } from '@unchainedshop/mongodb';
|
|
2
|
+
import { Price } from '@unchainedshop/utils';
|
|
4
3
|
|
|
5
4
|
export type OrderReport = {
|
|
6
5
|
newCount: number;
|
|
@@ -19,11 +18,11 @@ export enum OrderStatus {
|
|
|
19
18
|
|
|
20
19
|
export type OrderPosition = {
|
|
21
20
|
_id?: string;
|
|
22
|
-
calculation: Array<
|
|
21
|
+
calculation: Array<any>;
|
|
23
22
|
configuration: Array<{ key: string; value: string }>;
|
|
24
23
|
context?: any;
|
|
25
24
|
orderId: string;
|
|
26
|
-
originalProductId
|
|
25
|
+
originalProductId: string;
|
|
27
26
|
productId: string;
|
|
28
27
|
quantity: number;
|
|
29
28
|
quotationId?: string;
|
|
@@ -60,7 +59,7 @@ export type OrderDiscount = {
|
|
|
60
59
|
_id?: string;
|
|
61
60
|
orderId: string;
|
|
62
61
|
code?: string;
|
|
63
|
-
total?:
|
|
62
|
+
total?: Price;
|
|
64
63
|
trigger?: OrderDiscountTrigger;
|
|
65
64
|
discountKey?: string;
|
|
66
65
|
reservation?: any;
|
|
@@ -99,7 +98,7 @@ export type OrderPayment = {
|
|
|
99
98
|
} & LogFields &
|
|
100
99
|
TimestampFields;
|
|
101
100
|
|
|
102
|
-
export type OrderPaymentDiscount = Omit<
|
|
101
|
+
export type OrderPaymentDiscount = Omit<Price, '_id'> & {
|
|
103
102
|
_id?: string;
|
|
104
103
|
discountId: string;
|
|
105
104
|
item: OrderPayment;
|
|
@@ -116,13 +115,13 @@ export type OrderDelivery = {
|
|
|
116
115
|
} & LogFields &
|
|
117
116
|
TimestampFields;
|
|
118
117
|
|
|
119
|
-
export type OrderDeliveryDiscount = Omit<
|
|
118
|
+
export type OrderDeliveryDiscount = Omit<Price, '_id'> & {
|
|
120
119
|
_id?: string;
|
|
121
120
|
discountId: string;
|
|
122
121
|
item: OrderDelivery;
|
|
123
122
|
};
|
|
124
123
|
|
|
125
|
-
export type OrderPositionDiscount = Omit<
|
|
124
|
+
export type OrderPositionDiscount = Omit<Price, '_id'> & {
|
|
126
125
|
_id?: string;
|
|
127
126
|
discountId: string;
|
|
128
127
|
item: OrderPosition;
|
package/tsconfig.json
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": "../shared/base.tsconfig.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
-
"
|
|
5
|
-
"
|
|
4
|
+
"declarationDir": "./lib",
|
|
5
|
+
"rootDir": "./src",
|
|
6
|
+
"outDir": "./lib"
|
|
6
7
|
},
|
|
7
|
-
"exclude": ["**/*.test.ts", "**/*.test.js", "tests"]
|
|
8
|
-
|
|
9
|
-
"./src"
|
|
10
|
-
]
|
|
11
|
-
}
|
|
8
|
+
"exclude": ["**/*.test.ts", "**/*.test.js", "tests", "lib"]
|
|
9
|
+
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
|
-
import { Order } from '../types.js';
|
|
3
|
-
export type MigrateOrderCartsService = (params: {
|
|
4
|
-
fromUserId: string;
|
|
5
|
-
toUserId: string;
|
|
6
|
-
shouldMerge: boolean;
|
|
7
|
-
countryContext: string;
|
|
8
|
-
}, unchainedAPI: UnchainedCore) => Promise<Order>;
|
|
9
|
-
export declare const migrateOrderCartsService: MigrateOrderCartsService;
|
|
10
|
-
//# sourceMappingURL=migrateOrderCartService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrateOrderCartService.d.ts","sourceRoot":"","sources":["../../src/service/migrateOrderCartService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,MAAM,wBAAwB,GAAG,CACrC,MAAM,EAAE;IACN,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,EACD,YAAY,EAAE,aAAa,KACxB,OAAO,CAAC,KAAK,CAAC,CAAC;AAEpB,eAAO,MAAM,wBAAwB,EAAE,wBAuCtC,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export const migrateOrderCartsService = async ({ fromUserId, toUserId, shouldMerge, countryContext }, unchainedAPI) => {
|
|
2
|
-
const fromCart = await unchainedAPI.modules.orders.cart({
|
|
3
|
-
countryContext,
|
|
4
|
-
userId: fromUserId,
|
|
5
|
-
});
|
|
6
|
-
const toCart = await unchainedAPI.modules.orders.cart({
|
|
7
|
-
countryContext,
|
|
8
|
-
userId: toUserId,
|
|
9
|
-
});
|
|
10
|
-
if (!fromCart) {
|
|
11
|
-
// No cart, don't copy
|
|
12
|
-
return toCart;
|
|
13
|
-
}
|
|
14
|
-
if (!toCart || !shouldMerge) {
|
|
15
|
-
// No destination cart, move whole cart
|
|
16
|
-
unchainedAPI.modules.orders.setCartOwner({ orderId: fromCart._id, userId: toUserId });
|
|
17
|
-
return unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
|
|
18
|
-
}
|
|
19
|
-
// Move positions
|
|
20
|
-
unchainedAPI.modules.orders.moveCartPositions({ fromOrderId: fromCart._id, toOrderId: toCart._id });
|
|
21
|
-
// Move billing address if target order has none
|
|
22
|
-
if (fromCart.billingAddress && !toCart.billingAddress) {
|
|
23
|
-
await unchainedAPI.modules.orders.updateBillingAddress(toCart._id, fromCart.billingAddress);
|
|
24
|
-
}
|
|
25
|
-
// Move contact data if target order has none
|
|
26
|
-
if (fromCart.contact && !toCart.contact) {
|
|
27
|
-
await unchainedAPI.modules.orders.updateContact(toCart._id, fromCart.contact);
|
|
28
|
-
}
|
|
29
|
-
await unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
|
|
30
|
-
return unchainedAPI.modules.orders.updateCalculation(toCart._id, unchainedAPI);
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=migrateOrderCartService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrateOrderCartService.js","sourceRoot":"","sources":["../../src/service/migrateOrderCartService.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,wBAAwB,GAA6B,KAAK,EACrE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EACrD,YAAY,EACZ,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACtD,cAAc;QACd,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACpD,cAAc;QACd,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,sBAAsB;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnF,CAAC;IAED,iBAAiB;IACjB,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAEpG,gDAAgD;IAChD,IAAI,QAAQ,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9F,CAAC;IAED,6CAA6C;IAC7C,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAChF,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACjF,CAAC,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { User } from '@unchainedshop/core-users';
|
|
2
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
3
|
-
import { Order } from '../types.js';
|
|
4
|
-
export type NextUserCartService = (params: {
|
|
5
|
-
user: User;
|
|
6
|
-
orderNumber?: string;
|
|
7
|
-
countryCode?: string;
|
|
8
|
-
forceCartCreation?: boolean;
|
|
9
|
-
}, unchainedAPI: UnchainedCore) => Promise<Order | null>;
|
|
10
|
-
export declare const nextUserCartService: NextUserCartService;
|
|
11
|
-
//# sourceMappingURL=nextUserCartService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nextUserCartService.d.ts","sourceRoot":"","sources":["../../src/service/nextUserCartService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,MAAM,mBAAmB,GAAG,CAChC,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,EACD,YAAY,EAAE,aAAa,KACxB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAE3B,eAAO,MAAM,mBAAmB,EAAE,mBAqCjC,CAAC"}
|