@unchainedshop/core-orders 3.0.0-alpha7 → 3.0.0-rc10
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 +21 -2
- package/lib/db/OrderDeliveriesCollection.d.ts.map +1 -1
- package/lib/db/OrderDeliveriesCollection.js +6 -0
- package/lib/db/OrderDeliveriesCollection.js.map +1 -1
- package/lib/db/OrderDiscountsCollection.d.ts +16 -2
- package/lib/db/OrderDiscountsCollection.d.ts.map +1 -1
- package/lib/db/OrderDiscountsCollection.js +5 -0
- package/lib/db/OrderDiscountsCollection.js.map +1 -1
- package/lib/db/OrderPaymentsCollection.d.ts +22 -2
- package/lib/db/OrderPaymentsCollection.d.ts.map +1 -1
- package/lib/db/OrderPaymentsCollection.js +6 -0
- package/lib/db/OrderPaymentsCollection.js.map +1 -1
- package/lib/db/OrderPositionsCollection.d.ts +22 -2
- package/lib/db/OrderPositionsCollection.d.ts.map +1 -1
- package/lib/db/OrderPositionsCollection.js.map +1 -1
- package/lib/db/OrdersCollection.d.ts +33 -2
- package/lib/db/OrdersCollection.d.ts.map +1 -1
- package/lib/db/OrdersCollection.js +8 -1
- package/lib/db/OrdersCollection.js.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 +8 -69
- package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
- package/lib/module/configureOrderDiscountsModule.d.ts +17 -18
- package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
- package/lib/module/configureOrderDiscountsModule.js +34 -143
- package/lib/module/configureOrderDiscountsModule.js.map +1 -1
- package/lib/module/configureOrderPaymentsModule.d.ts +17 -37
- package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
- package/lib/module/configureOrderPaymentsModule.js +16 -124
- package/lib/module/configureOrderPaymentsModule.js.map +1 -1
- package/lib/module/configureOrderPositionsModule.d.ts +22 -41
- package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
- package/lib/module/configureOrderPositionsModule.js +22 -85
- package/lib/module/configureOrderPositionsModule.js.map +1 -1
- package/lib/module/configureOrdersModule-mutations.d.ts +5 -11
- package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
- package/lib/module/configureOrdersModule-mutations.js +11 -50
- package/lib/module/configureOrdersModule-mutations.js.map +1 -1
- package/lib/module/configureOrdersModule-queries.d.ts +18 -6
- 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.d.ts +11 -8
- package/lib/module/configureOrdersModule.d.ts.map +1 -1
- package/lib/module/configureOrdersModule.js +134 -154
- package/lib/module/configureOrdersModule.js.map +1 -1
- package/lib/orders-index.d.ts +11 -8
- package/lib/orders-index.d.ts.map +1 -1
- package/lib/orders-index.js +11 -8
- package/lib/orders-index.js.map +1 -1
- package/lib/orders-settings.d.ts +4 -8
- package/lib/orders-settings.d.ts.map +1 -1
- package/lib/orders-settings.js.map +1 -1
- package/package.json +13 -13
- package/src/db/OrderDeliveriesCollection.ts +25 -2
- package/src/db/OrderDiscountsCollection.ts +18 -2
- package/src/db/OrderPaymentsCollection.ts +26 -2
- package/src/db/OrderPositionsCollection.ts +21 -2
- package/src/db/OrdersCollection.ts +44 -2
- package/src/module/buildFindSelector.test.ts +8 -8
- package/src/module/buildFindSelector.ts +24 -0
- package/src/module/configureOrderDeliveriesModule.ts +29 -172
- package/src/module/configureOrderDiscountsModule.ts +46 -213
- package/src/module/configureOrderPaymentsModule.ts +58 -266
- package/src/module/configureOrderPositionsModule.ts +57 -208
- package/src/module/configureOrdersModule-mutations.ts +13 -85
- package/src/module/configureOrdersModule-queries.ts +61 -29
- package/src/module/configureOrdersModule.ts +181 -264
- package/src/orders-index.ts +11 -10
- package/src/orders-settings.ts +5 -7
- package/tsconfig.json +5 -7
- package/lib/db/OrderDiscountTrigger.d.ts +0 -5
- package/lib/db/OrderDiscountTrigger.d.ts.map +0 -1
- package/lib/db/OrderDiscountTrigger.js +0 -6
- package/lib/db/OrderDiscountTrigger.js.map +0 -1
- package/lib/director/OrderDiscountAdapter.d.ts +0 -4
- package/lib/director/OrderDiscountAdapter.d.ts.map +0 -1
- package/lib/director/OrderDiscountAdapter.js +0 -3
- package/lib/director/OrderDiscountAdapter.js.map +0 -1
- package/lib/director/OrderDiscountConfiguration.d.ts +0 -6
- package/lib/director/OrderDiscountConfiguration.d.ts.map +0 -1
- package/lib/director/OrderDiscountConfiguration.js +0 -2
- package/lib/director/OrderDiscountConfiguration.js.map +0 -1
- package/lib/director/OrderDiscountDirector.d.ts +0 -3
- package/lib/director/OrderDiscountDirector.d.ts.map +0 -1
- package/lib/director/OrderDiscountDirector.js +0 -3
- package/lib/director/OrderDiscountDirector.js.map +0 -1
- package/lib/director/OrderPricingAdapter.d.ts +0 -22
- package/lib/director/OrderPricingAdapter.d.ts.map +0 -1
- package/lib/director/OrderPricingAdapter.js +0 -25
- package/lib/director/OrderPricingAdapter.js.map +0 -1
- package/lib/director/OrderPricingDirector.d.ts +0 -18
- package/lib/director/OrderPricingDirector.d.ts.map +0 -1
- package/lib/director/OrderPricingDirector.js +0 -39
- package/lib/director/OrderPricingDirector.js.map +0 -1
- package/lib/director/OrderPricingSheet.d.ts +0 -36
- package/lib/director/OrderPricingSheet.d.ts.map +0 -1
- package/lib/director/OrderPricingSheet.js +0 -108
- package/lib/director/OrderPricingSheet.js.map +0 -1
- package/lib/module/configureOrdersModule-processing.d.ts +0 -32
- package/lib/module/configureOrdersModule-processing.d.ts.map +0 -1
- package/lib/module/configureOrdersModule-processing.js +0 -339
- package/lib/module/configureOrdersModule-processing.js.map +0 -1
- package/lib/module/configureOrdersModule-transformations.d.ts +0 -20
- package/lib/module/configureOrdersModule-transformations.d.ts.map +0 -1
- package/lib/module/configureOrdersModule-transformations.js +0 -111
- package/lib/module/configureOrdersModule-transformations.js.map +0 -1
- 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/lib/types.d.ts +0 -116
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -25
- package/lib/types.js.map +0 -1
- package/src/db/OrderDiscountTrigger.ts +0 -4
- 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
- package/src/types.ts +0 -129
|
@@ -1,170 +1,57 @@
|
|
|
1
1
|
import { emit, registerEvents } from '@unchainedshop/events';
|
|
2
2
|
import { generateDbFilterById, generateDbObjectId } from '@unchainedshop/mongodb';
|
|
3
|
-
import { OrderDiscountTrigger } from '../db/
|
|
4
|
-
import { OrderDiscountDirector } from '../director/OrderDiscountDirector.js';
|
|
3
|
+
import { OrderDiscountTrigger } from '../db/OrderDiscountsCollection.js';
|
|
5
4
|
const ORDER_DISCOUNT_EVENTS = [
|
|
6
5
|
'ORDER_CREATE_DISCOUNT',
|
|
7
6
|
'ORDER_UPDATE_DISCOUNT',
|
|
8
7
|
'ORDER_REMOVE_DISCOUNT',
|
|
9
|
-
'ORDER_ADD_DISCOUNT',
|
|
10
8
|
];
|
|
11
|
-
const
|
|
12
|
-
CODE_ALREADY_PRESENT: 'CODE_ALREADY_PRESENT',
|
|
13
|
-
CODE_NOT_VALID: 'CODE_NOT_VALID',
|
|
14
|
-
};
|
|
15
|
-
export const buildFindByIdSelector = (orderDiscountId) => generateDbFilterById(orderDiscountId);
|
|
9
|
+
export const buildFindOrderDiscountByIdSelector = (orderDiscountId) => generateDbFilterById(orderDiscountId);
|
|
16
10
|
export const configureOrderDiscountsModule = ({ OrderDiscounts, }) => {
|
|
17
11
|
registerEvents(ORDER_DISCOUNT_EVENTS);
|
|
18
|
-
const getAdapter = async (orderDiscount, unchainedAPI) => {
|
|
19
|
-
const order = await unchainedAPI.modules.orders.findOrder({
|
|
20
|
-
orderId: orderDiscount.orderId,
|
|
21
|
-
});
|
|
22
|
-
const Adapter = OrderDiscountDirector.getAdapter(orderDiscount.discountKey);
|
|
23
|
-
if (!Adapter)
|
|
24
|
-
return null;
|
|
25
|
-
const adapter = await Adapter.actions({
|
|
26
|
-
context: { order, orderDiscount, code: orderDiscount.code, ...unchainedAPI },
|
|
27
|
-
});
|
|
28
|
-
return adapter;
|
|
29
|
-
};
|
|
30
|
-
const createDiscount = async (doc) => {
|
|
31
|
-
const normalizedTrigger = doc.trigger || OrderDiscountTrigger.USER;
|
|
32
|
-
const { insertedId: discountId } = await OrderDiscounts.insertOne({
|
|
33
|
-
_id: generateDbObjectId(),
|
|
34
|
-
created: new Date(),
|
|
35
|
-
...doc,
|
|
36
|
-
trigger: normalizedTrigger,
|
|
37
|
-
});
|
|
38
|
-
const discount = await OrderDiscounts.findOne(buildFindByIdSelector(discountId));
|
|
39
|
-
return discount;
|
|
40
|
-
};
|
|
41
|
-
const deleteDiscount = async (orderDiscountId, unchainedAPI) => {
|
|
42
|
-
const selector = buildFindByIdSelector(orderDiscountId);
|
|
43
|
-
const discount = await OrderDiscounts.findOne(selector, {});
|
|
44
|
-
if (discount.trigger === OrderDiscountTrigger.USER) {
|
|
45
|
-
// Release
|
|
46
|
-
const adapter = await getAdapter(discount, unchainedAPI);
|
|
47
|
-
if (!adapter)
|
|
48
|
-
return null;
|
|
49
|
-
await adapter.release();
|
|
50
|
-
}
|
|
51
|
-
await OrderDiscounts.deleteOne(selector);
|
|
52
|
-
await emit('ORDER_REMOVE_DISCOUNT', { discount });
|
|
53
|
-
return discount;
|
|
54
|
-
};
|
|
55
|
-
const updateDiscount = async (orderDiscountId, doc) => {
|
|
56
|
-
const discount = await OrderDiscounts.findOneAndUpdate(generateDbFilterById(orderDiscountId), {
|
|
57
|
-
$set: {
|
|
58
|
-
updated: new Date(),
|
|
59
|
-
...doc,
|
|
60
|
-
},
|
|
61
|
-
}, { returnDocument: 'after' });
|
|
62
|
-
await emit('ORDER_UPDATE_DISCOUNT', { discount });
|
|
63
|
-
return discount;
|
|
64
|
-
};
|
|
65
|
-
const reserveDiscount = async (orderDiscount, unchainedAPI) => {
|
|
66
|
-
const adapter = await getAdapter(orderDiscount, unchainedAPI);
|
|
67
|
-
if (!adapter)
|
|
68
|
-
return null;
|
|
69
|
-
const reservation = await adapter.reserve({
|
|
70
|
-
code: orderDiscount.code,
|
|
71
|
-
});
|
|
72
|
-
return updateDiscount(orderDiscount._id, { orderId: orderDiscount.orderId, reservation });
|
|
73
|
-
};
|
|
74
|
-
const grabDiscount = async ({ code, orderId }, unchainedAPI) => {
|
|
75
|
-
const existingDiscount = await OrderDiscounts.findOne({ code, orderId });
|
|
76
|
-
if (existingDiscount)
|
|
77
|
-
throw new Error(OrderDiscountErrorCode.CODE_ALREADY_PRESENT);
|
|
78
|
-
const discount = await OrderDiscounts.findOne({ code, orderId: null });
|
|
79
|
-
if (!discount)
|
|
80
|
-
return null;
|
|
81
|
-
const discountId = discount._id;
|
|
82
|
-
try {
|
|
83
|
-
const updatedDiscount = await updateDiscount(discountId, { orderId });
|
|
84
|
-
const reservedDiscount = await reserveDiscount(updatedDiscount, unchainedAPI);
|
|
85
|
-
return reservedDiscount;
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
// Rollback
|
|
89
|
-
await updateDiscount(discountId, { orderId: discount.orderId });
|
|
90
|
-
throw error;
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
12
|
return {
|
|
94
13
|
// Queries
|
|
95
14
|
findOrderDiscount: async ({ discountId }, options) => {
|
|
96
|
-
return OrderDiscounts.findOne(
|
|
15
|
+
return OrderDiscounts.findOne(buildFindOrderDiscountByIdSelector(discountId), options);
|
|
97
16
|
},
|
|
98
17
|
findOrderDiscounts: async ({ orderId }) => {
|
|
99
18
|
const discounts = OrderDiscounts.find({ orderId });
|
|
100
19
|
return discounts.toArray();
|
|
101
20
|
},
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if (!adapter)
|
|
110
|
-
return null;
|
|
111
|
-
if (orderDiscount.trigger === OrderDiscountTrigger.SYSTEM) {
|
|
112
|
-
return adapter.isValidForSystemTriggering();
|
|
113
|
-
}
|
|
114
|
-
return adapter.isValidForCodeTriggering({
|
|
115
|
-
code: orderDiscount.code,
|
|
21
|
+
create: async (doc) => {
|
|
22
|
+
const normalizedTrigger = doc.trigger || OrderDiscountTrigger.USER;
|
|
23
|
+
const { insertedId: discountId } = await OrderDiscounts.insertOne({
|
|
24
|
+
_id: generateDbObjectId(),
|
|
25
|
+
created: new Date(),
|
|
26
|
+
...doc,
|
|
27
|
+
trigger: normalizedTrigger,
|
|
116
28
|
});
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
configurationForPricingAdapterKey: async (orderDiscount, adapterKey, calculationSheet, unchainedAPI) => {
|
|
120
|
-
const adapter = await getAdapter(orderDiscount, unchainedAPI);
|
|
121
|
-
if (!adapter)
|
|
122
|
-
return null;
|
|
123
|
-
return adapter.discountForPricingAdapterKey({
|
|
124
|
-
pricingAdapterKey: adapterKey,
|
|
125
|
-
calculationSheet,
|
|
29
|
+
const discount = await OrderDiscounts.findOne({
|
|
30
|
+
_id: discountId,
|
|
126
31
|
});
|
|
32
|
+
await emit('ORDER_CREATE_DISCOUNT', { discount });
|
|
33
|
+
return discount;
|
|
127
34
|
},
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const director = await OrderDiscountDirector.actions({ order, code }, unchainedAPI);
|
|
137
|
-
const discountKey = await director.resolveDiscountKeyFromStaticCode({
|
|
35
|
+
delete: async (orderDiscountId) => {
|
|
36
|
+
const selector = buildFindOrderDiscountByIdSelector(orderDiscountId);
|
|
37
|
+
const orderDiscount = await OrderDiscounts.findOneAndDelete(selector);
|
|
38
|
+
await emit('ORDER_REMOVE_DISCOUNT', { discount: orderDiscount });
|
|
39
|
+
return orderDiscount;
|
|
40
|
+
},
|
|
41
|
+
isDiscountCodeUsed: async ({ code, orderId }) => {
|
|
42
|
+
return ((await OrderDiscounts.countDocuments({
|
|
138
43
|
code,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const newDiscount = await createDiscount({
|
|
142
|
-
orderId: order._id,
|
|
143
|
-
code,
|
|
144
|
-
discountKey,
|
|
145
|
-
});
|
|
146
|
-
try {
|
|
147
|
-
const reservedDiscount = await reserveDiscount(newDiscount, unchainedAPI);
|
|
148
|
-
await emit('ORDER_ADD_DISCOUNT', { discount: reserveDiscount });
|
|
149
|
-
return reservedDiscount;
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
await deleteDiscount(newDiscount._id, unchainedAPI);
|
|
153
|
-
throw error;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
throw new Error(OrderDiscountErrorCode.CODE_NOT_VALID);
|
|
44
|
+
orderId,
|
|
45
|
+
})) > 0);
|
|
157
46
|
},
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
return discount;
|
|
47
|
+
findSpareDiscount: async ({ code }) => {
|
|
48
|
+
return OrderDiscounts.findOne({
|
|
49
|
+
code,
|
|
50
|
+
orderId: { $in: [undefined, null] },
|
|
51
|
+
});
|
|
164
52
|
},
|
|
165
|
-
delete: deleteDiscount,
|
|
166
53
|
update: async (orderDiscountId, doc) => {
|
|
167
|
-
const discount = await OrderDiscounts.findOneAndUpdate(
|
|
54
|
+
const discount = await OrderDiscounts.findOneAndUpdate({ _id: orderDiscountId }, {
|
|
168
55
|
$set: {
|
|
169
56
|
updated: new Date(),
|
|
170
57
|
...doc,
|
|
@@ -173,6 +60,10 @@ export const configureOrderDiscountsModule = ({ OrderDiscounts, }) => {
|
|
|
173
60
|
await emit('ORDER_UPDATE_DISCOUNT', { discount });
|
|
174
61
|
return discount;
|
|
175
62
|
},
|
|
63
|
+
deleteOrderDiscounts: async (orderId) => {
|
|
64
|
+
const { deletedCount } = await OrderDiscounts.deleteMany({ orderId });
|
|
65
|
+
return deletedCount;
|
|
66
|
+
},
|
|
176
67
|
};
|
|
177
68
|
};
|
|
178
69
|
//# sourceMappingURL=configureOrderDiscountsModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureOrderDiscountsModule.js","sourceRoot":"","sources":["../../src/module/configureOrderDiscountsModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configureOrderDiscountsModule.js","sourceRoot":"","sources":["../../src/module/configureOrderDiscountsModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,32 @@
|
|
|
1
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
1
|
import { mongodb } from '@unchainedshop/mongodb';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
2
|
+
import { PricingCalculation } from '@unchainedshop/utils';
|
|
3
|
+
import { OrderPayment, OrderPaymentStatus } from '../db/OrderPaymentsCollection.js';
|
|
4
|
+
export declare const buildFindOrderPaymentByIdSelector: (orderPaymentId: string) => mongodb.Filter<OrderPayment>;
|
|
5
|
+
export declare const buildFindByContextDataSelector: (context: any) => mongodb.Filter<OrderPayment>;
|
|
6
|
+
export declare const configureOrderPaymentsModule: ({ OrderPayments, }: {
|
|
7
|
+
OrderPayments: mongodb.Collection<OrderPayment>;
|
|
8
|
+
}) => {
|
|
9
|
+
findOrderPayment: ({ orderPaymentId, }: {
|
|
8
10
|
orderPaymentId: string;
|
|
9
11
|
}, options?: mongodb.FindOptions) => Promise<OrderPayment>;
|
|
10
|
-
findOrderPaymentByContextData: (
|
|
12
|
+
findOrderPaymentByContextData: ({ context, }: {
|
|
11
13
|
context: any;
|
|
12
14
|
}, options?: mongodb.FindOptions) => Promise<OrderPayment>;
|
|
13
|
-
countOrderPaymentsByContextData: (
|
|
15
|
+
countOrderPaymentsByContextData: ({ context, }: {
|
|
14
16
|
context: any;
|
|
15
17
|
}, options?: mongodb.FindOptions) => Promise<number>;
|
|
16
|
-
|
|
17
|
-
order: Order;
|
|
18
|
-
orderDiscount: OrderDiscount;
|
|
19
|
-
}, unchainedAPI: UnchainedCore) => Array<OrderPricingDiscount>;
|
|
20
|
-
isBlockingOrderConfirmation: (orderPayment: OrderPayment, unchainedAPI: UnchainedCore) => Promise<boolean>;
|
|
21
|
-
isBlockingOrderFullfillment: (orderPayment: OrderPayment) => boolean;
|
|
22
|
-
normalizedStatus: (orderPayment: OrderPayment) => string;
|
|
23
|
-
pricingSheet: (orderPayment: OrderPayment, currency: string, unchainedAPI: UnchainedCore) => IPaymentPricingSheet;
|
|
18
|
+
normalizedStatus: (orderPayment: OrderPayment) => OrderPaymentStatus;
|
|
24
19
|
create: (doc: OrderPayment) => Promise<OrderPayment>;
|
|
25
|
-
cancel: (orderPayment: OrderPayment, paymentContext: {
|
|
26
|
-
transactionContext: any;
|
|
27
|
-
userId: string;
|
|
28
|
-
}, unchainedAPI: UnchainedCore) => Promise<OrderPayment>;
|
|
29
|
-
confirm: (orderPayment: OrderPayment, paymentContext: {
|
|
30
|
-
transactionContext: any;
|
|
31
|
-
userId: string;
|
|
32
|
-
}, unchainedAPI: UnchainedCore) => Promise<OrderPayment>;
|
|
33
|
-
charge: (orderPayment: OrderPayment, paymentContext: {
|
|
34
|
-
transactionContext: any;
|
|
35
|
-
userId: string;
|
|
36
|
-
}, unchainedAPI: UnchainedCore) => Promise<OrderPayment>;
|
|
37
20
|
logEvent: (orderPaymentId: string, event: any) => Promise<boolean>;
|
|
38
|
-
markAsPaid: (
|
|
39
|
-
updateContext: (orderPaymentId: string, context: any) => Promise<OrderPayment
|
|
40
|
-
updateStatus: (orderPaymentId: string,
|
|
21
|
+
markAsPaid: (orderPayment: OrderPayment, meta: any) => Promise<void>;
|
|
22
|
+
updateContext: (orderPaymentId: string, context: any) => Promise<OrderPayment>;
|
|
23
|
+
updateStatus: (orderPaymentId: string, { transactionId, status, info, }: {
|
|
41
24
|
transactionId?: string;
|
|
42
25
|
status: OrderPaymentStatus;
|
|
43
26
|
info?: string;
|
|
44
27
|
}) => Promise<OrderPayment>;
|
|
45
|
-
updateCalculation: (
|
|
28
|
+
updateCalculation: <T extends PricingCalculation>(orderPaymentId: string, calculation: Array<T>) => Promise<mongodb.WithId<OrderPayment>>;
|
|
29
|
+
deleteOrderPayments: (orderId: string) => Promise<number>;
|
|
46
30
|
};
|
|
47
|
-
export
|
|
48
|
-
export declare const buildFindByContextDataSelector: (context: any) => mongodb.Filter<OrderPayment>;
|
|
49
|
-
export declare const configureOrderPaymentsModule: ({ OrderPayments, }: {
|
|
50
|
-
OrderPayments: mongodb.Collection<OrderPayment>;
|
|
51
|
-
}) => OrderPaymentsModule;
|
|
31
|
+
export type OrderPaymentsModule = ReturnType<typeof configureOrderPaymentsModule>;
|
|
52
32
|
//# sourceMappingURL=configureOrderPaymentsModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureOrderPaymentsModule.d.ts","sourceRoot":"","sources":["../../src/module/configureOrderPaymentsModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configureOrderPaymentsModule.d.ts","sourceRoot":"","sources":["../../src/module/configureOrderPaymentsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAA4C,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAIpF,eAAO,MAAM,iCAAiC,mBAAoB,MAAM,KAC9B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAEvE,eAAO,MAAM,8BAA8B,YAAa,GAAG,KAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAgBxF,CAAC;AAEF,eAAO,MAAM,4BAA4B,uBAEtC;IACD,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;CACjD;4CAgDQ;QACD,cAAc,EAAE,MAAM,CAAC;KACxB,YACS,OAAO,CAAC,WAAW,KAC5B,OAAO,CAAC,YAAY,CAAC;kDAMnB;QACD,OAAO,EAAE,GAAG,CAAC;KACd,YACS,OAAO,CAAC,WAAW,KAC5B,OAAO,CAAC,YAAY,CAAC;oDAQnB;QACD,OAAO,EAAE,GAAG,CAAC;KACd,YACS,OAAO,CAAC,WAAW;qCAtEO,YAAY;kBAiF9B,YAAY,KAAG,OAAO,CAAC,YAAY,CAAC;+BAgBvB,MAAM,SAAS,GAAG,KAAG,OAAO,CAAC,OAAO,CAAC;+BAgBrC,YAAY,QAAQ,GAAG;oCAUlB,MAAM,WAAW,GAAG,KAAG,OAAO,CAAC,YAAY,CAAC;mCApHlE,MAAM,oCAKnB;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KACvE,OAAO,CAAC,YAAY,CAAC;wBA4II,CAAC,SAAS,kBAAkB,kBACpC,MAAM,eACT,KAAK,CAAC,CAAC,CAAC;mCAec,MAAM;CAK9C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { emit, registerEvents } from '@unchainedshop/events';
|
|
2
2
|
import { generateDbFilterById, generateDbObjectId } from '@unchainedshop/mongodb';
|
|
3
|
-
import { OrderPaymentStatus } from '../
|
|
3
|
+
import { OrderPaymentStatus } from '../db/OrderPaymentsCollection.js';
|
|
4
4
|
const ORDER_PAYMENT_EVENTS = ['ORDER_UPDATE_PAYMENT', 'ORDER_SIGN_PAYMENT', 'ORDER_PAY'];
|
|
5
|
-
export const
|
|
5
|
+
export const buildFindOrderPaymentByIdSelector = (orderPaymentId) => generateDbFilterById(orderPaymentId);
|
|
6
6
|
export const buildFindByContextDataSelector = (context) => {
|
|
7
7
|
const contextKeys = Object.keys(context);
|
|
8
8
|
if (contextKeys.length === 0)
|
|
@@ -22,16 +22,7 @@ export const configureOrderPaymentsModule = ({ OrderPayments, }) => {
|
|
|
22
22
|
? OrderPaymentStatus.OPEN
|
|
23
23
|
: orderPayment.status;
|
|
24
24
|
};
|
|
25
|
-
const
|
|
26
|
-
...rest,
|
|
27
|
-
orderPayment,
|
|
28
|
-
paymentProviderId: orderPayment.paymentProviderId,
|
|
29
|
-
transactionContext: {
|
|
30
|
-
...(transactionContext || {}),
|
|
31
|
-
...(orderPayment.context || {}),
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
const updateStatus = async (orderPaymentId, { status, transactionId, info }) => {
|
|
25
|
+
const updateStatus = async (orderPaymentId, { transactionId, status, info, }) => {
|
|
35
26
|
const date = new Date();
|
|
36
27
|
const modifier = {
|
|
37
28
|
$set: { status, updated: new Date() },
|
|
@@ -53,54 +44,23 @@ export const configureOrderPaymentsModule = ({ OrderPayments, }) => {
|
|
|
53
44
|
// @ts-ignore
|
|
54
45
|
modifier.$set.paid = date;
|
|
55
46
|
}
|
|
56
|
-
const selector =
|
|
47
|
+
const selector = buildFindOrderPaymentByIdSelector(orderPaymentId);
|
|
57
48
|
return OrderPayments.findOneAndUpdate(selector, modifier, { returnDocument: 'after' });
|
|
58
49
|
};
|
|
59
50
|
return {
|
|
60
51
|
// Queries
|
|
61
|
-
findOrderPayment: async ({ orderPaymentId }, options) => {
|
|
62
|
-
return OrderPayments.findOne(
|
|
52
|
+
findOrderPayment: async ({ orderPaymentId, }, options) => {
|
|
53
|
+
return OrderPayments.findOne(buildFindOrderPaymentByIdSelector(orderPaymentId), options);
|
|
63
54
|
},
|
|
64
|
-
findOrderPaymentByContextData: async ({ context }, options) => {
|
|
55
|
+
findOrderPaymentByContextData: async ({ context, }, options) => {
|
|
65
56
|
const selector = buildFindByContextDataSelector(context);
|
|
66
57
|
return OrderPayments.findOne(selector, options);
|
|
67
58
|
},
|
|
68
|
-
countOrderPaymentsByContextData: async ({ context }, options) => {
|
|
59
|
+
countOrderPaymentsByContextData: async ({ context, }, options) => {
|
|
69
60
|
const selector = buildFindByContextDataSelector(context);
|
|
70
61
|
return OrderPayments.countDocuments(selector, options);
|
|
71
62
|
},
|
|
72
|
-
// Transformations
|
|
73
|
-
discounts: (orderPayment, { order, orderDiscount }, context) => {
|
|
74
|
-
const { modules } = context;
|
|
75
|
-
if (!orderPayment)
|
|
76
|
-
return [];
|
|
77
|
-
const pricingSheet = modules.orders.payments.pricingSheet(orderPayment, order.currency, context);
|
|
78
|
-
return pricingSheet.discountPrices(orderDiscount._id).map((discount) => ({
|
|
79
|
-
payment: orderPayment,
|
|
80
|
-
...discount,
|
|
81
|
-
}));
|
|
82
|
-
},
|
|
83
|
-
isBlockingOrderConfirmation: async (orderPayment, unchainedAPI) => {
|
|
84
|
-
if (orderPayment.status === OrderPaymentStatus.PAID)
|
|
85
|
-
return false;
|
|
86
|
-
const provider = await unchainedAPI.modules.payment.paymentProviders.findProvider({
|
|
87
|
-
paymentProviderId: orderPayment.paymentProviderId,
|
|
88
|
-
});
|
|
89
|
-
const isPayLaterAllowed = await unchainedAPI.modules.payment.paymentProviders.isPayLaterAllowed(provider, unchainedAPI);
|
|
90
|
-
return !isPayLaterAllowed;
|
|
91
|
-
},
|
|
92
|
-
isBlockingOrderFullfillment: (orderPayment) => {
|
|
93
|
-
if (orderPayment.status === OrderPaymentStatus.PAID)
|
|
94
|
-
return false;
|
|
95
|
-
return true;
|
|
96
|
-
},
|
|
97
63
|
normalizedStatus,
|
|
98
|
-
pricingSheet: (orderPayment, currency, { modules }) => {
|
|
99
|
-
return modules.payment.paymentProviders.pricingSheet({
|
|
100
|
-
calculation: orderPayment.calculation,
|
|
101
|
-
currency,
|
|
102
|
-
});
|
|
103
|
-
},
|
|
104
64
|
// Mutations
|
|
105
65
|
create: async (doc) => {
|
|
106
66
|
const { insertedId: orderPaymentId } = await OrderPayments.insertOne({
|
|
@@ -110,76 +70,7 @@ export const configureOrderPaymentsModule = ({ OrderPayments, }) => {
|
|
|
110
70
|
status: null,
|
|
111
71
|
context: doc.context || {},
|
|
112
72
|
});
|
|
113
|
-
const orderPayment = await OrderPayments.findOne(
|
|
114
|
-
return orderPayment;
|
|
115
|
-
},
|
|
116
|
-
confirm: async (orderPayment, paymentContext, unchainedAPI) => {
|
|
117
|
-
const { modules } = unchainedAPI;
|
|
118
|
-
if (normalizedStatus(orderPayment) !== OrderPaymentStatus.PAID) {
|
|
119
|
-
return orderPayment;
|
|
120
|
-
}
|
|
121
|
-
const arbitraryResponseData = await modules.payment.paymentProviders.confirm(orderPayment.paymentProviderId, buildPaymentProviderActionsContext(orderPayment, paymentContext), unchainedAPI);
|
|
122
|
-
if (arbitraryResponseData) {
|
|
123
|
-
return updateStatus(orderPayment._id, {
|
|
124
|
-
status: OrderPaymentStatus.PAID,
|
|
125
|
-
info: JSON.stringify(arbitraryResponseData),
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
return orderPayment;
|
|
129
|
-
},
|
|
130
|
-
cancel: async (orderPayment, paymentContext, unchainedAPI) => {
|
|
131
|
-
const { modules } = unchainedAPI;
|
|
132
|
-
if (normalizedStatus(orderPayment) !== OrderPaymentStatus.PAID) {
|
|
133
|
-
return orderPayment;
|
|
134
|
-
}
|
|
135
|
-
const arbitraryResponseData = await modules.payment.paymentProviders.cancel(orderPayment.paymentProviderId, buildPaymentProviderActionsContext(orderPayment, paymentContext), unchainedAPI);
|
|
136
|
-
if (arbitraryResponseData) {
|
|
137
|
-
return updateStatus(orderPayment._id, {
|
|
138
|
-
status: OrderPaymentStatus.REFUNDED,
|
|
139
|
-
info: JSON.stringify(arbitraryResponseData),
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
return orderPayment;
|
|
143
|
-
},
|
|
144
|
-
charge: async (orderPayment, context, unchainedAPI) => {
|
|
145
|
-
const { modules } = unchainedAPI;
|
|
146
|
-
if (normalizedStatus(orderPayment) !== OrderPaymentStatus.OPEN) {
|
|
147
|
-
return orderPayment;
|
|
148
|
-
}
|
|
149
|
-
const paymentCredentials = context.transactionContext?.paymentCredentials ||
|
|
150
|
-
(await modules.payment.paymentCredentials.findPaymentCredential({
|
|
151
|
-
userId: context.userId,
|
|
152
|
-
paymentProviderId: orderPayment.paymentProviderId,
|
|
153
|
-
isPreferred: true,
|
|
154
|
-
}));
|
|
155
|
-
const paymentContext = buildPaymentProviderActionsContext(orderPayment, {
|
|
156
|
-
...context,
|
|
157
|
-
transactionContext: {
|
|
158
|
-
...context.transactionContext,
|
|
159
|
-
paymentCredentials,
|
|
160
|
-
},
|
|
161
|
-
});
|
|
162
|
-
const result = await modules.payment.paymentProviders.charge(orderPayment.paymentProviderId, paymentContext, unchainedAPI);
|
|
163
|
-
if (!result)
|
|
164
|
-
return orderPayment;
|
|
165
|
-
const { credentials, ...arbitraryResponseData } = result;
|
|
166
|
-
if (credentials) {
|
|
167
|
-
const { token, ...meta } = credentials;
|
|
168
|
-
await modules.payment.paymentCredentials.upsertCredentials({
|
|
169
|
-
userId: paymentContext.userId,
|
|
170
|
-
paymentProviderId: orderPayment.paymentProviderId,
|
|
171
|
-
token,
|
|
172
|
-
...meta,
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
if (arbitraryResponseData) {
|
|
176
|
-
const { transactionId, ...info } = arbitraryResponseData;
|
|
177
|
-
return updateStatus(orderPayment._id, {
|
|
178
|
-
transactionId,
|
|
179
|
-
status: OrderPaymentStatus.PAID,
|
|
180
|
-
info: JSON.stringify(info),
|
|
181
|
-
});
|
|
182
|
-
}
|
|
73
|
+
const orderPayment = await OrderPayments.findOne(buildFindOrderPaymentByIdSelector(orderPaymentId));
|
|
183
74
|
return orderPayment;
|
|
184
75
|
},
|
|
185
76
|
logEvent: async (orderPaymentId, event) => {
|
|
@@ -206,7 +97,7 @@ export const configureOrderPaymentsModule = ({ OrderPayments, }) => {
|
|
|
206
97
|
await emit('ORDER_PAY', { orderPayment });
|
|
207
98
|
},
|
|
208
99
|
updateContext: async (orderPaymentId, context) => {
|
|
209
|
-
const selector =
|
|
100
|
+
const selector = buildFindOrderPaymentByIdSelector(orderPaymentId);
|
|
210
101
|
if (!context || Object.keys(context).length === 0)
|
|
211
102
|
return OrderPayments.findOne(selector, {});
|
|
212
103
|
const contextSetters = Object.fromEntries(Object.entries(context).map(([key, value]) => [`context.${key}`, value]));
|
|
@@ -225,11 +116,8 @@ export const configureOrderPaymentsModule = ({ OrderPayments, }) => {
|
|
|
225
116
|
return null;
|
|
226
117
|
},
|
|
227
118
|
updateStatus,
|
|
228
|
-
updateCalculation: async (
|
|
229
|
-
|
|
230
|
-
item: orderPayment,
|
|
231
|
-
}, unchainedAPI);
|
|
232
|
-
return OrderPayments.findOneAndUpdate(buildFindByIdSelector(orderPayment._id), {
|
|
119
|
+
updateCalculation: async (orderPaymentId, calculation) => {
|
|
120
|
+
return OrderPayments.findOneAndUpdate(buildFindOrderPaymentByIdSelector(orderPaymentId), {
|
|
233
121
|
$set: {
|
|
234
122
|
calculation,
|
|
235
123
|
updated: new Date(),
|
|
@@ -238,6 +126,10 @@ export const configureOrderPaymentsModule = ({ OrderPayments, }) => {
|
|
|
238
126
|
returnDocument: 'after',
|
|
239
127
|
});
|
|
240
128
|
},
|
|
129
|
+
deleteOrderPayments: async (orderId) => {
|
|
130
|
+
const { deletedCount } = await OrderPayments.deleteMany({ orderId });
|
|
131
|
+
return deletedCount;
|
|
132
|
+
},
|
|
241
133
|
};
|
|
242
134
|
};
|
|
243
135
|
//# sourceMappingURL=configureOrderPaymentsModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureOrderPaymentsModule.js","sourceRoot":"","sources":["../../src/module/configureOrderPaymentsModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configureOrderPaymentsModule.js","sourceRoot":"","sources":["../../src/module/configureOrderPaymentsModule.ts"],"names":[],"mappings":"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"}
|