@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,5 +1,28 @@
|
|
|
1
|
-
import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
|
|
2
|
-
import {
|
|
1
|
+
import { mongodb, buildDbIndexes, LogFields, TimestampFields } from '@unchainedshop/mongodb';
|
|
2
|
+
import { Price } from '@unchainedshop/utils';
|
|
3
|
+
|
|
4
|
+
export enum OrderDeliveryStatus {
|
|
5
|
+
OPEN = 'OPEN', // Null value is mapped to OPEN status
|
|
6
|
+
DELIVERED = 'DELIVERED',
|
|
7
|
+
RETURNED = 'RETURNED',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type OrderDelivery = {
|
|
11
|
+
_id?: string;
|
|
12
|
+
orderId: string;
|
|
13
|
+
deliveryProviderId: string;
|
|
14
|
+
delivered?: Date;
|
|
15
|
+
status: OrderDeliveryStatus | null;
|
|
16
|
+
context?: any;
|
|
17
|
+
calculation: Array<any>;
|
|
18
|
+
} & LogFields &
|
|
19
|
+
TimestampFields;
|
|
20
|
+
|
|
21
|
+
export type OrderDeliveryDiscount = Omit<Price, '_id'> & {
|
|
22
|
+
_id?: string;
|
|
23
|
+
discountId: string;
|
|
24
|
+
item: OrderDelivery;
|
|
25
|
+
};
|
|
3
26
|
|
|
4
27
|
export const OrderDeliveriesCollection = async (db: mongodb.Db) => {
|
|
5
28
|
const OrderDeliveries = db.collection<OrderDelivery>('order_deliveries');
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
|
|
2
|
-
import {
|
|
1
|
+
import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb';
|
|
2
|
+
import { Price } from '@unchainedshop/utils';
|
|
3
|
+
|
|
4
|
+
export type OrderDiscount = {
|
|
5
|
+
_id?: string;
|
|
6
|
+
orderId: string;
|
|
7
|
+
code?: string;
|
|
8
|
+
total?: Price;
|
|
9
|
+
trigger?: OrderDiscountTrigger;
|
|
10
|
+
discountKey?: string;
|
|
11
|
+
reservation?: any;
|
|
12
|
+
context?: any;
|
|
13
|
+
} & TimestampFields;
|
|
3
14
|
|
|
4
15
|
export const OrderDiscountsCollection = async (db: mongodb.Db) => {
|
|
5
16
|
const OrderDiscounts = db.collection<OrderDiscount>('order_discounts');
|
|
@@ -12,3 +23,8 @@ export const OrderDiscountsCollection = async (db: mongodb.Db) => {
|
|
|
12
23
|
|
|
13
24
|
return OrderDiscounts;
|
|
14
25
|
};
|
|
26
|
+
|
|
27
|
+
export enum OrderDiscountTrigger {
|
|
28
|
+
USER = 'USER',
|
|
29
|
+
SYSTEM = 'SYSTEM',
|
|
30
|
+
}
|
|
@@ -1,5 +1,29 @@
|
|
|
1
|
-
import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
|
|
2
|
-
import {
|
|
1
|
+
import { mongodb, buildDbIndexes, LogFields, TimestampFields } from '@unchainedshop/mongodb';
|
|
2
|
+
import { Price } from '@unchainedshop/utils';
|
|
3
|
+
|
|
4
|
+
export enum OrderPaymentStatus {
|
|
5
|
+
OPEN = 'OPEN', // Null value is mapped to OPEN status
|
|
6
|
+
PAID = 'PAID',
|
|
7
|
+
REFUNDED = 'REFUNDED',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type OrderPayment = {
|
|
11
|
+
_id?: string;
|
|
12
|
+
orderId: string;
|
|
13
|
+
context?: any;
|
|
14
|
+
paid?: Date;
|
|
15
|
+
transactionId?: string;
|
|
16
|
+
paymentProviderId?: string;
|
|
17
|
+
status?: OrderPaymentStatus | null;
|
|
18
|
+
calculation?: Array<any>;
|
|
19
|
+
} & LogFields &
|
|
20
|
+
TimestampFields;
|
|
21
|
+
|
|
22
|
+
export type OrderPaymentDiscount = Omit<Price, '_id'> & {
|
|
23
|
+
_id?: string;
|
|
24
|
+
discountId: string;
|
|
25
|
+
item: OrderPayment;
|
|
26
|
+
};
|
|
3
27
|
|
|
4
28
|
export const OrderPaymentsCollection = async (db: mongodb.Db) => {
|
|
5
29
|
const OrderPayments = db.collection<OrderPayment>('order_payments');
|
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
|
|
2
|
-
import {
|
|
1
|
+
import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb';
|
|
2
|
+
import { Price } from '@unchainedshop/utils';
|
|
3
|
+
|
|
4
|
+
export type OrderPosition = {
|
|
5
|
+
_id?: string;
|
|
6
|
+
calculation: Array<any>;
|
|
7
|
+
configuration: Array<{ key: string; value: string }>;
|
|
8
|
+
context?: any;
|
|
9
|
+
orderId: string;
|
|
10
|
+
originalProductId: string;
|
|
11
|
+
productId: string;
|
|
12
|
+
quantity: number;
|
|
13
|
+
quotationId?: string;
|
|
14
|
+
scheduling: Array<any>;
|
|
15
|
+
} & TimestampFields;
|
|
16
|
+
|
|
17
|
+
export type OrderPositionDiscount = Omit<Price, '_id'> & {
|
|
18
|
+
_id?: string;
|
|
19
|
+
discountId: string;
|
|
20
|
+
item: OrderPosition;
|
|
21
|
+
};
|
|
3
22
|
|
|
4
23
|
export const OrderPositionsCollection = async (db: mongodb.Db) => {
|
|
5
24
|
const OrderPositions = db.collection<OrderPosition>('order_positions');
|
|
@@ -1,5 +1,47 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
mongodb,
|
|
3
|
+
buildDbIndexes,
|
|
4
|
+
Address,
|
|
5
|
+
Contact,
|
|
6
|
+
LogFields,
|
|
7
|
+
TimestampFields,
|
|
8
|
+
} from '@unchainedshop/mongodb';
|
|
9
|
+
|
|
10
|
+
export enum OrderStatus {
|
|
11
|
+
PENDING = 'PENDING',
|
|
12
|
+
CONFIRMED = 'CONFIRMED',
|
|
13
|
+
FULLFILLED = 'FULLFILLED',
|
|
14
|
+
REJECTED = 'REJECTED',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type Order = {
|
|
18
|
+
_id?: string;
|
|
19
|
+
billingAddress?: Address;
|
|
20
|
+
calculation: Array<any>;
|
|
21
|
+
confirmed?: Date;
|
|
22
|
+
rejected?: Date;
|
|
23
|
+
contact?: Contact;
|
|
24
|
+
context?: any;
|
|
25
|
+
countryCode: string;
|
|
26
|
+
currency: string;
|
|
27
|
+
deliveryId?: string;
|
|
28
|
+
fullfilled?: Date;
|
|
29
|
+
ordered?: Date;
|
|
30
|
+
orderNumber?: string;
|
|
31
|
+
originEnrollmentId?: string;
|
|
32
|
+
paymentId?: string;
|
|
33
|
+
status: OrderStatus | null;
|
|
34
|
+
userId: string;
|
|
35
|
+
} & LogFields &
|
|
36
|
+
TimestampFields;
|
|
37
|
+
|
|
38
|
+
export type OrderQuery = {
|
|
39
|
+
includeCarts?: boolean;
|
|
40
|
+
orderStatus?: OrderStatus[];
|
|
41
|
+
queryString?: string;
|
|
42
|
+
status?: OrderStatus[];
|
|
43
|
+
userId?: string;
|
|
44
|
+
};
|
|
3
45
|
|
|
4
46
|
export const OrdersCollection = async (db: mongodb.Db) => {
|
|
5
47
|
const Orders = db.collection<Order>('orders');
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { OrderStatus } from '../
|
|
1
|
+
import { OrderStatus } from '../db/OrdersCollection.js';
|
|
2
2
|
import { buildFindByIdSelector as buildFindByIdSelectorForDelivery } from './configureOrderDeliveriesModule.js';
|
|
3
|
-
import {
|
|
3
|
+
import { buildFindOrderDiscountByIdSelector } from './configureOrderDiscountsModule.js';
|
|
4
4
|
import {
|
|
5
|
-
|
|
5
|
+
buildFindOrderPaymentByIdSelector,
|
|
6
6
|
buildFindByContextDataSelector,
|
|
7
7
|
} from './configureOrderPaymentsModule.js';
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
8
|
+
import { buildFindOrderPositionByIdSelector } from './configureOrderPositionsModule.js';
|
|
9
|
+
import buildFindSelectorForOrder from './buildFindSelector.js';
|
|
10
10
|
|
|
11
11
|
describe('OrderPosition', () => {
|
|
12
12
|
describe('buildFindSelector', () => {
|
|
@@ -75,7 +75,7 @@ describe('OrderDelivery', () => {
|
|
|
75
75
|
describe('OrderDiscount', () => {
|
|
76
76
|
describe('buildFindByIdSelector', () => {
|
|
77
77
|
it('Return correct db _id selector', () => {
|
|
78
|
-
expect(
|
|
78
|
+
expect(buildFindOrderDiscountByIdSelector('order-discount-id')).toEqual({
|
|
79
79
|
_id: 'order-discount-id',
|
|
80
80
|
});
|
|
81
81
|
});
|
|
@@ -85,7 +85,7 @@ describe('OrderDiscount', () => {
|
|
|
85
85
|
describe('OrderPayment', () => {
|
|
86
86
|
describe('buildFindByIdSelector', () => {
|
|
87
87
|
it('Return correct db _id selector', () => {
|
|
88
|
-
expect(
|
|
88
|
+
expect(buildFindOrderPaymentByIdSelector('order-payment-id')).toEqual({ _id: 'order-payment-id' });
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
91
|
|
|
@@ -102,7 +102,7 @@ describe('OrderPayment', () => {
|
|
|
102
102
|
describe('OrderPosition', () => {
|
|
103
103
|
describe('buildFindByIdSelector', () => {
|
|
104
104
|
it('Return correct db _id selector', () => {
|
|
105
|
-
expect(
|
|
105
|
+
expect(buildFindOrderPositionByIdSelector('order-position-id')).toEqual({
|
|
106
106
|
_id: 'order-position-id',
|
|
107
107
|
});
|
|
108
108
|
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { OrderQuery, Order } from '../db/OrdersCollection.js';
|
|
2
|
+
import { mongodb } from '@unchainedshop/mongodb';
|
|
3
|
+
|
|
4
|
+
export const buildFindSelector = ({ includeCarts, status, userId, queryString }: OrderQuery) => {
|
|
5
|
+
const selector: mongodb.Filter<Order> = {};
|
|
6
|
+
|
|
7
|
+
if (userId) {
|
|
8
|
+
selector.userId = userId;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (Array.isArray(status) && status?.length) {
|
|
12
|
+
selector.status = { $in: status };
|
|
13
|
+
} else if (!includeCarts) {
|
|
14
|
+
selector.status = { $ne: null }; // TODO: Slow performance! IDXSCAN in common query!
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (queryString) {
|
|
18
|
+
(selector as any).$text = { $search: queryString };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return selector;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default buildFindSelector;
|
|
@@ -1,65 +1,7 @@
|
|
|
1
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
1
|
import { mongodb, generateDbFilterById, generateDbObjectId } from '@unchainedshop/mongodb';
|
|
3
2
|
import { emit, registerEvents } from '@unchainedshop/events';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { DeliveryDirector } from '@unchainedshop/core-delivery';
|
|
7
|
-
import { OrderPricingDiscount } from '../director/OrderPricingDirector.js';
|
|
8
|
-
|
|
9
|
-
export type OrderDeliveriesModule = {
|
|
10
|
-
// Queries
|
|
11
|
-
findDelivery: (
|
|
12
|
-
params: { orderDeliveryId: string },
|
|
13
|
-
options?: mongodb.FindOptions,
|
|
14
|
-
) => Promise<OrderDelivery>;
|
|
15
|
-
|
|
16
|
-
// Transformations
|
|
17
|
-
discounts: (
|
|
18
|
-
orderDelivery: OrderDelivery,
|
|
19
|
-
params: { order: Order; orderDiscount: OrderDiscount },
|
|
20
|
-
unchainedAPI: UnchainedCore,
|
|
21
|
-
) => Array<OrderPricingDiscount>;
|
|
22
|
-
isBlockingOrderConfirmation: (
|
|
23
|
-
orderDelivery: OrderDelivery,
|
|
24
|
-
unchainedAPI: UnchainedCore,
|
|
25
|
-
) => Promise<boolean>;
|
|
26
|
-
isBlockingOrderFullfillment: (orderDelivery: OrderDelivery) => boolean;
|
|
27
|
-
normalizedStatus: (orderDelivery: OrderDelivery) => string;
|
|
28
|
-
pricingSheet: (
|
|
29
|
-
orderDelivery: OrderDelivery,
|
|
30
|
-
currency: string,
|
|
31
|
-
unchainedAPI: UnchainedCore,
|
|
32
|
-
) => IDeliveryPricingSheet;
|
|
33
|
-
|
|
34
|
-
// Mutations
|
|
35
|
-
create: (doc: OrderDelivery) => Promise<OrderDelivery>;
|
|
36
|
-
delete: (orderDeliveryId: string) => Promise<number>;
|
|
37
|
-
|
|
38
|
-
markAsDelivered: (orderDelivery: OrderDelivery) => Promise<void>;
|
|
39
|
-
|
|
40
|
-
activePickUpLocation: (
|
|
41
|
-
orderDelivery: OrderDelivery,
|
|
42
|
-
unchainedAPI: UnchainedCore,
|
|
43
|
-
) => Promise<DeliveryLocation | null>;
|
|
44
|
-
|
|
45
|
-
send: (
|
|
46
|
-
orderDelivery: OrderDelivery,
|
|
47
|
-
params: { order: Order; deliveryContext?: any },
|
|
48
|
-
unchainedAPI: UnchainedCore,
|
|
49
|
-
) => Promise<OrderDelivery>;
|
|
50
|
-
|
|
51
|
-
updateContext: (orderDeliveryId: string, context: any) => Promise<OrderDelivery | null>;
|
|
52
|
-
|
|
53
|
-
updateStatus: (
|
|
54
|
-
orderDeliveryId: string,
|
|
55
|
-
params: { status: OrderDeliveryStatus; info?: string },
|
|
56
|
-
) => Promise<OrderDelivery>;
|
|
57
|
-
|
|
58
|
-
updateCalculation: (
|
|
59
|
-
orderDelivery: OrderDelivery,
|
|
60
|
-
unchainedAPI: UnchainedCore,
|
|
61
|
-
) => Promise<OrderDelivery>;
|
|
62
|
-
};
|
|
3
|
+
import { PricingCalculation } from '@unchainedshop/utils';
|
|
4
|
+
import { OrderDelivery, OrderDeliveryStatus } from '../db/OrderDeliveriesCollection.js';
|
|
63
5
|
|
|
64
6
|
const ORDER_DELIVERY_EVENTS: string[] = ['ORDER_DELIVER', 'ORDER_UPDATE_DELIVERY'];
|
|
65
7
|
|
|
@@ -70,19 +12,19 @@ export const configureOrderDeliveriesModule = ({
|
|
|
70
12
|
OrderDeliveries,
|
|
71
13
|
}: {
|
|
72
14
|
OrderDeliveries: mongodb.Collection<OrderDelivery>;
|
|
73
|
-
})
|
|
15
|
+
}) => {
|
|
74
16
|
registerEvents(ORDER_DELIVERY_EVENTS);
|
|
75
17
|
|
|
76
|
-
const normalizedStatus
|
|
18
|
+
const normalizedStatus = (orderDelivery: OrderDelivery) => {
|
|
77
19
|
return orderDelivery.status === null
|
|
78
20
|
? OrderDeliveryStatus.OPEN
|
|
79
21
|
: (orderDelivery.status as OrderDeliveryStatus);
|
|
80
22
|
};
|
|
81
23
|
|
|
82
|
-
const updateStatus
|
|
83
|
-
orderDeliveryId,
|
|
84
|
-
{ status, info },
|
|
85
|
-
) => {
|
|
24
|
+
const updateStatus = async (
|
|
25
|
+
orderDeliveryId: string,
|
|
26
|
+
{ status, info }: { status: OrderDeliveryStatus; info?: string },
|
|
27
|
+
): Promise<OrderDelivery> => {
|
|
86
28
|
const date = new Date();
|
|
87
29
|
const modifier: mongodb.UpdateFilter<OrderDelivery> = {
|
|
88
30
|
$set: { status, updated: new Date() },
|
|
@@ -106,72 +48,18 @@ export const configureOrderDeliveriesModule = ({
|
|
|
106
48
|
|
|
107
49
|
return {
|
|
108
50
|
// Queries
|
|
109
|
-
findDelivery: async (
|
|
51
|
+
findDelivery: async (
|
|
52
|
+
{ orderDeliveryId }: { orderDeliveryId: string },
|
|
53
|
+
options?: mongodb.FindOptions,
|
|
54
|
+
): Promise<OrderDelivery> => {
|
|
110
55
|
return OrderDeliveries.findOne(buildFindByIdSelector(orderDeliveryId), options);
|
|
111
56
|
},
|
|
112
57
|
|
|
113
|
-
// Transformations
|
|
114
|
-
discounts: (orderDelivery, { order, orderDiscount }, context) => {
|
|
115
|
-
const { modules } = context;
|
|
116
|
-
if (!orderDelivery) return [];
|
|
117
|
-
|
|
118
|
-
const pricingSheet = modules.orders.deliveries.pricingSheet(
|
|
119
|
-
orderDelivery,
|
|
120
|
-
order.currency,
|
|
121
|
-
context,
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
return pricingSheet.discountPrices(orderDiscount._id).map((discount) => ({
|
|
125
|
-
delivery: orderDelivery,
|
|
126
|
-
...discount,
|
|
127
|
-
}));
|
|
128
|
-
},
|
|
129
|
-
|
|
130
|
-
isBlockingOrderConfirmation: async (orderDelivery, unchainedAPI) => {
|
|
131
|
-
const provider = await unchainedAPI.modules.delivery.findProvider({
|
|
132
|
-
deliveryProviderId: orderDelivery.deliveryProviderId,
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
const isAutoReleaseAllowed = await unchainedAPI.modules.delivery.isAutoReleaseAllowed(
|
|
136
|
-
provider,
|
|
137
|
-
unchainedAPI,
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
return !isAutoReleaseAllowed;
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
activePickUpLocation: async (orderDelivery, unchainedAPI) => {
|
|
144
|
-
const { orderPickUpLocationId } = orderDelivery.context || {};
|
|
145
|
-
|
|
146
|
-
const provider = await unchainedAPI.modules.delivery.findProvider({
|
|
147
|
-
deliveryProviderId: orderDelivery.deliveryProviderId,
|
|
148
|
-
});
|
|
149
|
-
const director = await DeliveryDirector.actions(
|
|
150
|
-
provider,
|
|
151
|
-
{ orderDelivery: orderDelivery },
|
|
152
|
-
unchainedAPI,
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
return director.pickUpLocationById(orderPickUpLocationId);
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
isBlockingOrderFullfillment: (orderDelivery) => {
|
|
159
|
-
if (orderDelivery.status === OrderDeliveryStatus.DELIVERED) return false;
|
|
160
|
-
return true;
|
|
161
|
-
},
|
|
162
|
-
|
|
163
58
|
normalizedStatus,
|
|
164
59
|
|
|
165
|
-
pricingSheet: (orderDelivery, currency, { modules }) => {
|
|
166
|
-
return modules.delivery.pricingSheet({
|
|
167
|
-
calculation: orderDelivery.calculation,
|
|
168
|
-
currency,
|
|
169
|
-
});
|
|
170
|
-
},
|
|
171
|
-
|
|
172
60
|
// Mutations
|
|
173
61
|
|
|
174
|
-
create: async (doc) => {
|
|
62
|
+
create: async (doc: OrderDelivery): Promise<OrderDelivery> => {
|
|
175
63
|
const { insertedId: orderDeliveryId } = await OrderDeliveries.insertOne({
|
|
176
64
|
_id: generateDbObjectId(),
|
|
177
65
|
created: new Date(),
|
|
@@ -184,56 +72,22 @@ export const configureOrderDeliveriesModule = ({
|
|
|
184
72
|
return orderDelivery;
|
|
185
73
|
},
|
|
186
74
|
|
|
187
|
-
delete: async (orderDeliveryId) => {
|
|
75
|
+
delete: async (orderDeliveryId: string) => {
|
|
188
76
|
const { deletedCount } = await OrderDeliveries.deleteOne({ _id: orderDeliveryId });
|
|
189
77
|
return deletedCount;
|
|
190
78
|
},
|
|
191
79
|
|
|
192
|
-
markAsDelivered: async (orderDelivery) => {
|
|
80
|
+
markAsDelivered: async (orderDelivery: OrderDelivery) => {
|
|
193
81
|
if (normalizedStatus(orderDelivery) !== OrderDeliveryStatus.OPEN) return;
|
|
194
82
|
const updatedOrderDelivery = await updateStatus(orderDelivery._id, {
|
|
195
83
|
status: OrderDeliveryStatus.DELIVERED,
|
|
196
84
|
info: 'mark delivered manually',
|
|
197
85
|
});
|
|
198
86
|
await emit('ORDER_DELIVER', { orderDelivery: updatedOrderDelivery });
|
|
87
|
+
return updatedOrderDelivery;
|
|
199
88
|
},
|
|
200
89
|
|
|
201
|
-
|
|
202
|
-
if (normalizedStatus(orderDelivery) !== OrderDeliveryStatus.OPEN) return orderDelivery;
|
|
203
|
-
|
|
204
|
-
const deliveryProvider = await unchainedAPI.modules.delivery.findProvider({
|
|
205
|
-
deliveryProviderId: orderDelivery.deliveryProviderId,
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
const deliveryProviderId = deliveryProvider._id;
|
|
209
|
-
|
|
210
|
-
const address = orderDelivery.context?.address || order || order.billingAddress;
|
|
211
|
-
|
|
212
|
-
const arbitraryResponseData = await unchainedAPI.modules.delivery.send(
|
|
213
|
-
deliveryProviderId,
|
|
214
|
-
{
|
|
215
|
-
order,
|
|
216
|
-
orderDelivery,
|
|
217
|
-
transactionContext: {
|
|
218
|
-
...(deliveryContext || {}),
|
|
219
|
-
...(orderDelivery.context || {}),
|
|
220
|
-
...(address || {}),
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
unchainedAPI,
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
if (arbitraryResponseData) {
|
|
227
|
-
return updateStatus(orderDelivery._id, {
|
|
228
|
-
status: OrderDeliveryStatus.DELIVERED,
|
|
229
|
-
info: JSON.stringify(arbitraryResponseData),
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return orderDelivery;
|
|
234
|
-
},
|
|
235
|
-
|
|
236
|
-
updateContext: async (orderDeliveryId, context) => {
|
|
90
|
+
updateContext: async (orderDeliveryId: string, context: any): Promise<OrderDelivery> => {
|
|
237
91
|
const selector = buildFindByIdSelector(orderDeliveryId);
|
|
238
92
|
if (!context || Object.keys(context).length === 0) return OrderDeliveries.findOne(selector, {});
|
|
239
93
|
const contextSetters = Object.fromEntries(
|
|
@@ -263,16 +117,12 @@ export const configureOrderDeliveriesModule = ({
|
|
|
263
117
|
|
|
264
118
|
updateStatus,
|
|
265
119
|
|
|
266
|
-
updateCalculation: async
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
},
|
|
271
|
-
unchainedAPI,
|
|
272
|
-
);
|
|
273
|
-
|
|
120
|
+
updateCalculation: async <T extends PricingCalculation>(
|
|
121
|
+
orderDeliveryId: string,
|
|
122
|
+
calculation: Array<T>,
|
|
123
|
+
): Promise<OrderDelivery> => {
|
|
274
124
|
return OrderDeliveries.findOneAndUpdate(
|
|
275
|
-
|
|
125
|
+
{ _id: orderDeliveryId },
|
|
276
126
|
{
|
|
277
127
|
$set: {
|
|
278
128
|
calculation,
|
|
@@ -284,5 +134,12 @@ export const configureOrderDeliveriesModule = ({
|
|
|
284
134
|
},
|
|
285
135
|
);
|
|
286
136
|
},
|
|
137
|
+
|
|
138
|
+
deleteOrderDeliveries: async (orderId: string) => {
|
|
139
|
+
const { deletedCount } = await OrderDeliveries.deleteMany({ orderId });
|
|
140
|
+
return deletedCount;
|
|
141
|
+
},
|
|
287
142
|
};
|
|
288
143
|
};
|
|
144
|
+
|
|
145
|
+
export type OrderDeliveriesModule = ReturnType<typeof configureOrderDeliveriesModule>;
|