@unchainedshop/api 4.0.0-rc.10 → 4.0.0-rc.12
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/mcp/index.d.ts.map +1 -1
- package/lib/mcp/index.js +6 -0
- package/lib/mcp/index.js.map +1 -1
- package/lib/mcp/tools/delivery/createDeliveryProviderHandler.d.ts +44 -0
- package/lib/mcp/tools/delivery/createDeliveryProviderHandler.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/createDeliveryProviderHandler.js +50 -0
- package/lib/mcp/tools/delivery/createDeliveryProviderHandler.js.map +1 -0
- package/lib/mcp/tools/delivery/deliveryInterfacesHandler.d.ts +20 -0
- package/lib/mcp/tools/delivery/deliveryInterfacesHandler.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/deliveryInterfacesHandler.js +45 -0
- package/lib/mcp/tools/delivery/deliveryInterfacesHandler.js.map +1 -0
- package/lib/mcp/tools/delivery/deliveryProvider.d.ts +20 -0
- package/lib/mcp/tools/delivery/deliveryProvider.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/deliveryProvider.js +43 -0
- package/lib/mcp/tools/delivery/deliveryProvider.js.map +1 -0
- package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.d.ts +20 -0
- package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.js +36 -0
- package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.js.map +1 -0
- package/lib/mcp/tools/delivery/deliveryProvidersListHandler.d.ts +24 -0
- package/lib/mcp/tools/delivery/deliveryProvidersListHandler.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/deliveryProvidersListHandler.js +44 -0
- package/lib/mcp/tools/delivery/deliveryProvidersListHandler.js.map +1 -0
- package/lib/mcp/tools/delivery/index.d.ts +4 -0
- package/lib/mcp/tools/delivery/index.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/index.js +17 -0
- package/lib/mcp/tools/delivery/index.js.map +1 -0
- package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.d.ts +20 -0
- package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.js +37 -0
- package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.js.map +1 -0
- package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.d.ts +96 -0
- package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.d.ts.map +1 -0
- package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.js +54 -0
- package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.js.map +1 -0
- package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.d.ts +36 -0
- package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.d.ts.map +1 -0
- package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.js +89 -0
- package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.js.map +1 -0
- package/lib/mcp/tools/order/getSalesSummaryHandler.d.ts +40 -0
- package/lib/mcp/tools/order/getSalesSummaryHandler.d.ts.map +1 -0
- package/lib/mcp/tools/order/getSalesSummaryHandler.js +90 -0
- package/lib/mcp/tools/order/getSalesSummaryHandler.js.map +1 -0
- package/lib/mcp/tools/order/getTopCustomersHandler.d.ts +52 -0
- package/lib/mcp/tools/order/getTopCustomersHandler.d.ts.map +1 -0
- package/lib/mcp/tools/order/getTopCustomersHandler.js +114 -0
- package/lib/mcp/tools/order/getTopCustomersHandler.js.map +1 -0
- package/lib/mcp/tools/order/getTopSellingProductsHandler.d.ts +28 -0
- package/lib/mcp/tools/order/getTopSellingProductsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/order/getTopSellingProductsHandler.js +99 -0
- package/lib/mcp/tools/order/getTopSellingProductsHandler.js.map +1 -0
- package/lib/mcp/tools/order/index.d.ts +4 -0
- package/lib/mcp/tools/order/index.d.ts.map +1 -0
- package/lib/mcp/tools/order/index.js +13 -0
- package/lib/mcp/tools/order/index.js.map +1 -0
- package/lib/mcp/tools/order/ordersListHandler.d.ts +108 -0
- package/lib/mcp/tools/order/ordersListHandler.d.ts.map +1 -0
- package/lib/mcp/tools/order/ordersListHandler.js +91 -0
- package/lib/mcp/tools/order/ordersListHandler.js.map +1 -0
- package/lib/mcp/tools/payment/createPaymentProviderHandler.d.ts.map +1 -1
- package/lib/mcp/tools/payment/createPaymentProviderHandler.js +5 -2
- package/lib/mcp/tools/payment/createPaymentProviderHandler.js.map +1 -1
- package/lib/mcp/tools/payment/index.js +1 -1
- package/lib/mcp/tools/payment/index.js.map +1 -1
- package/lib/mcp/tools/payment/paymentInterfacesHandler.d.ts +2 -2
- package/lib/mcp/tools/payment/paymentInterfacesHandler.d.ts.map +1 -1
- package/lib/mcp/tools/payment/paymentInterfacesHandler.js +7 -5
- package/lib/mcp/tools/payment/paymentInterfacesHandler.js.map +1 -1
- package/lib/mcp/tools/payment/paymentProviderByIdHandler.js +1 -1
- package/lib/mcp/tools/payment/paymentProviderByIdHandler.js.map +1 -1
- package/lib/mcp/tools/payment/paymentProvidersListHandler.d.ts +4 -0
- package/lib/mcp/tools/payment/paymentProvidersListHandler.d.ts.map +1 -1
- package/lib/mcp/tools/payment/paymentProvidersListHandler.js +12 -3
- package/lib/mcp/tools/payment/paymentProvidersListHandler.js.map +1 -1
- package/lib/mcp/tools/payment/removePaymentProviderHandler.d.ts.map +1 -1
- package/lib/mcp/tools/payment/removePaymentProviderHandler.js +5 -4
- package/lib/mcp/tools/payment/removePaymentProviderHandler.js.map +1 -1
- package/lib/mcp/tools/payment/updatePaymentProviderHandler.d.ts +66 -10
- package/lib/mcp/tools/payment/updatePaymentProviderHandler.d.ts.map +1 -1
- package/lib/mcp/tools/payment/updatePaymentProviderHandler.js +18 -3
- package/lib/mcp/tools/payment/updatePaymentProviderHandler.js.map +1 -1
- package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.d.ts +44 -0
- package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.js +48 -0
- package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.js.map +1 -0
- package/lib/mcp/tools/warehousing/index.d.ts +4 -0
- package/lib/mcp/tools/warehousing/index.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/index.js +17 -0
- package/lib/mcp/tools/warehousing/index.js.map +1 -0
- package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.d.ts +20 -0
- package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.js +39 -0
- package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.js.map +1 -0
- package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.d.ts +96 -0
- package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.js +58 -0
- package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.js.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.d.ts +20 -0
- package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.js +45 -0
- package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.js.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingProviderHandler.d.ts +20 -0
- package/lib/mcp/tools/warehousing/warehousingProviderHandler.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingProviderHandler.js +45 -0
- package/lib/mcp/tools/warehousing/warehousingProviderHandler.js.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.d.ts +20 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.js +36 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.js.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.d.ts +24 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.d.ts.map +1 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.js +44 -0
- package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.js.map +1 -0
- package/lib/mcp/utils/orderFilters.d.ts +22 -0
- package/lib/mcp/utils/orderFilters.d.ts.map +1 -0
- package/lib/mcp/utils/orderFilters.js +34 -0
- package/lib/mcp/utils/orderFilters.js.map +1 -0
- package/lib/mcp/utils/sharedSchemas.d.ts +11 -0
- package/lib/mcp/utils/sharedSchemas.d.ts.map +1 -0
- package/lib/mcp/utils/sharedSchemas.js +11 -0
- package/lib/mcp/utils/sharedSchemas.js.map +1 -0
- package/lib/resolvers/queries/delivery/deliveryInterfaces.d.ts +2 -2
- package/lib/resolvers/queries/delivery/deliveryInterfaces.d.ts.map +1 -1
- package/lib/resolvers/queries/delivery/deliveryInterfaces.js +6 -4
- package/lib/resolvers/queries/delivery/deliveryInterfaces.js.map +1 -1
- package/lib/resolvers/queries/orders/orders.d.ts.map +1 -1
- package/lib/resolvers/queries/orders/orders.js +21 -4
- package/lib/resolvers/queries/orders/orders.js.map +1 -1
- package/lib/resolvers/queries/orders/ordersCount.d.ts.map +1 -1
- package/lib/resolvers/queries/orders/ordersCount.js +17 -1
- package/lib/resolvers/queries/orders/ordersCount.js.map +1 -1
- package/lib/resolvers/queries/payment/paymentInterfaces.d.ts.map +1 -1
- package/lib/resolvers/queries/payment/paymentInterfaces.js +5 -3
- package/lib/resolvers/queries/payment/paymentInterfaces.js.map +1 -1
- package/lib/resolvers/queries/warehousing/warehousingInterfaces.d.ts.map +1 -1
- package/lib/resolvers/queries/warehousing/warehousingInterfaces.js +5 -3
- package/lib/resolvers/queries/warehousing/warehousingInterfaces.js.map +1 -1
- package/lib/schema/query.d.ts.map +1 -1
- package/lib/schema/query.js +14 -4
- package/lib/schema/query.js.map +1 -1
- package/package.json +1 -1
- package/src/mcp/index.ts +6 -1
- package/src/mcp/tools/delivery/createDeliveryProviderHandler.ts +62 -0
- package/src/mcp/tools/delivery/deliveryInterfacesHandler.ts +56 -0
- package/src/mcp/tools/delivery/deliveryProvider.ts +51 -0
- package/src/mcp/tools/delivery/deliveryProvidersCountHandler.ts +46 -0
- package/src/mcp/tools/delivery/deliveryProvidersListHandler.ts +54 -0
- package/src/mcp/tools/delivery/index.ts +74 -0
- package/src/mcp/tools/delivery/removeDeliveryProviderHandler.ts +45 -0
- package/src/mcp/tools/delivery/updateDeliveryProviderHandler.ts +68 -0
- package/src/mcp/tools/order/getMonthlySalesBreakdownHandler.ts +106 -0
- package/src/mcp/tools/order/getSalesSummaryHandler.ts +103 -0
- package/src/mcp/tools/order/getTopCustomersHandler.ts +124 -0
- package/src/mcp/tools/order/getTopSellingProductsHandler.ts +112 -0
- package/src/mcp/tools/order/index.ts +50 -0
- package/src/mcp/tools/order/ordersListHandler.ts +119 -0
- package/src/mcp/tools/payment/createPaymentProviderHandler.ts +7 -2
- package/src/mcp/tools/payment/index.ts +1 -1
- package/src/mcp/tools/payment/paymentInterfacesHandler.ts +13 -10
- package/src/mcp/tools/payment/paymentProviderByIdHandler.ts +1 -1
- package/src/mcp/tools/payment/paymentProvidersListHandler.ts +14 -4
- package/src/mcp/tools/payment/removePaymentProviderHandler.ts +6 -8
- package/src/mcp/tools/payment/updatePaymentProviderHandler.ts +23 -4
- package/src/mcp/tools/warehousing/createWarehousingProviderHandler.ts +61 -0
- package/src/mcp/tools/warehousing/index.ts +81 -0
- package/src/mcp/tools/warehousing/removeWarehousingProviderHandler.ts +46 -0
- package/src/mcp/tools/warehousing/updateWarehousingProviderHandler.ts +72 -0
- package/src/mcp/tools/warehousing/warehousingInterfacesHandler.ts +58 -0
- package/src/mcp/tools/warehousing/warehousingProviderHandler.ts +55 -0
- package/src/mcp/tools/warehousing/warehousingProvidersCountHandler.ts +46 -0
- package/src/mcp/tools/warehousing/warehousingProvidersListHandler.ts +55 -0
- package/src/mcp/utils/orderFilters.ts +52 -0
- package/src/mcp/utils/sharedSchemas.ts +12 -0
- package/src/resolvers/queries/delivery/deliveryInterfaces.ts +8 -4
- package/src/resolvers/queries/orders/orders.ts +25 -5
- package/src/resolvers/queries/orders/ordersCount.ts +21 -1
- package/src/resolvers/queries/payment/paymentInterfaces.ts +11 -7
- package/src/resolvers/queries/warehousing/warehousingInterfaces.ts +5 -3
- package/src/schema/query.ts +14 -4
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { WarehousingProviderNotFoundError } from '../../../errors.js';
|
|
5
|
+
|
|
6
|
+
const ConfigurationEntry = z.object({
|
|
7
|
+
key: z.string().min(1).describe('Configuration key'),
|
|
8
|
+
value: z.any().describe('Configuration value'),
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const UpdateWarehousingProviderSchema = {
|
|
12
|
+
warehousingProviderId: z.string().min(1).describe('ID of the warehousing provider to update'),
|
|
13
|
+
warehousingProvider: z
|
|
14
|
+
.object({
|
|
15
|
+
configuration: z
|
|
16
|
+
.array(ConfigurationEntry)
|
|
17
|
+
.optional()
|
|
18
|
+
.describe('List of key-value configuration entries'),
|
|
19
|
+
})
|
|
20
|
+
.refine(
|
|
21
|
+
(data) => {
|
|
22
|
+
const keys = data.configuration?.map((entry) => entry.key) || [];
|
|
23
|
+
return new Set(keys).size === keys.length;
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
message: 'Duplicate keys are not allowed in configuration.',
|
|
27
|
+
path: ['configuration'],
|
|
28
|
+
},
|
|
29
|
+
),
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const UpdateWarehousingProviderZodSchema = z.object(UpdateWarehousingProviderSchema);
|
|
33
|
+
export type UpdateWarehousingProviderParams = z.infer<typeof UpdateWarehousingProviderZodSchema>;
|
|
34
|
+
|
|
35
|
+
export async function updateWarehousingProviderHandler(
|
|
36
|
+
context: Context,
|
|
37
|
+
params: UpdateWarehousingProviderParams,
|
|
38
|
+
) {
|
|
39
|
+
const { modules, userId } = context;
|
|
40
|
+
const { warehousingProviderId, warehousingProvider } = params;
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
log('handler updateWarehousingProviderHandler', {
|
|
44
|
+
userId,
|
|
45
|
+
warehousingProviderId,
|
|
46
|
+
warehousingProvider,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
if (!(await modules.warehousing.providerExists({ warehousingProviderId })))
|
|
50
|
+
throw new WarehousingProviderNotFoundError({ warehousingProviderId });
|
|
51
|
+
|
|
52
|
+
const provider = await modules.warehousing.update(warehousingProviderId, warehousingProvider as any);
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text' as const,
|
|
58
|
+
text: JSON.stringify({ provider }),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
} catch (error) {
|
|
63
|
+
return {
|
|
64
|
+
content: [
|
|
65
|
+
{
|
|
66
|
+
type: 'text' as const,
|
|
67
|
+
text: `Error updating warehousing provider: ${(error as Error).message}`,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { WarehousingDirector } from '@unchainedshop/core';
|
|
5
|
+
import { WarehousingProviderType } from '@unchainedshop/core-warehousing';
|
|
6
|
+
|
|
7
|
+
const WarehousingProviderTypeEnum = z
|
|
8
|
+
.enum(['PHYSICAL', 'VIRTUAL'])
|
|
9
|
+
.describe('Warehousing provider type');
|
|
10
|
+
|
|
11
|
+
export const WarehousingInterfacesSchema = {
|
|
12
|
+
type: WarehousingProviderTypeEnum.optional().describe('Optional filter by warehousing provider type'),
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const WarehousingInterfacesZodSchema = z.object(WarehousingInterfacesSchema);
|
|
16
|
+
export type WarehousingInterfacesParams = z.infer<typeof WarehousingInterfacesZodSchema>;
|
|
17
|
+
|
|
18
|
+
export async function warehousingInterfacesHandler(
|
|
19
|
+
context: Context,
|
|
20
|
+
params: WarehousingInterfacesParams,
|
|
21
|
+
) {
|
|
22
|
+
const { userId } = context;
|
|
23
|
+
const { type } = params;
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
log('handler warehousingInterfacesHandler', { userId, type });
|
|
27
|
+
|
|
28
|
+
const allAdapters = await WarehousingDirector.getAdapters();
|
|
29
|
+
|
|
30
|
+
const filteredAdapters = type
|
|
31
|
+
? allAdapters.filter((Adapter) => Adapter.typeSupported(type as WarehousingProviderType))
|
|
32
|
+
: allAdapters;
|
|
33
|
+
|
|
34
|
+
const interfaces = filteredAdapters.map((Adapter) => ({
|
|
35
|
+
_id: Adapter.key,
|
|
36
|
+
label: Adapter.label,
|
|
37
|
+
version: Adapter.version,
|
|
38
|
+
}));
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
content: [
|
|
42
|
+
{
|
|
43
|
+
type: 'text' as const,
|
|
44
|
+
text: JSON.stringify({ interfaces }),
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
} catch (error) {
|
|
49
|
+
return {
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: 'text' as const,
|
|
53
|
+
text: `Error fetching warehousing interfaces: ${(error as Error).message}`,
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
|
|
5
|
+
export const WarehousingProviderByIdSchema = {
|
|
6
|
+
warehousingProviderId: z.string().min(1).describe('ID of the warehousing provider'),
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const WarehousingProviderByIdZodSchema = z.object(WarehousingProviderByIdSchema);
|
|
10
|
+
export type WarehousingProviderByIdParams = z.infer<typeof WarehousingProviderByIdZodSchema>;
|
|
11
|
+
|
|
12
|
+
export async function warehousingProviderHandler(
|
|
13
|
+
context: Context,
|
|
14
|
+
params: WarehousingProviderByIdParams,
|
|
15
|
+
) {
|
|
16
|
+
const { modules, userId } = context;
|
|
17
|
+
const { warehousingProviderId } = params;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
log('handler warehousingProviderHandler', { userId, warehousingProviderId });
|
|
21
|
+
|
|
22
|
+
const provider = await modules.warehousing.findProvider({
|
|
23
|
+
warehousingProviderId,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (!provider) {
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: 'text' as const,
|
|
31
|
+
text: `Warehousing provider not found for ID: ${warehousingProviderId}`,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: 'text' as const,
|
|
41
|
+
text: JSON.stringify({ provider }),
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: 'text' as const,
|
|
50
|
+
text: `Error fetching warehousing provider: ${(error as Error).message}`,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
|
|
5
|
+
const WarehousingProviderTypeEnum = z
|
|
6
|
+
.enum(['PHYSICAL', 'VIRTUAL'])
|
|
7
|
+
.describe('Warehousing provider type');
|
|
8
|
+
|
|
9
|
+
export const WarehousingProvidersCountSchema = {
|
|
10
|
+
type: WarehousingProviderTypeEnum.optional(),
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const WarehousingProvidersCountZodSchema = z.object(WarehousingProvidersCountSchema);
|
|
14
|
+
export type WarehousingProvidersCountParams = z.infer<typeof WarehousingProvidersCountZodSchema>;
|
|
15
|
+
|
|
16
|
+
export async function warehousingProvidersCountHandler(
|
|
17
|
+
context: Context,
|
|
18
|
+
params: WarehousingProvidersCountParams,
|
|
19
|
+
) {
|
|
20
|
+
const { modules, userId } = context;
|
|
21
|
+
const { type } = params;
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
log('handler warehousingProvidersCountHandler', { userId, type });
|
|
25
|
+
|
|
26
|
+
const count = await modules.warehousing.count(params as any);
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: 'text' as const,
|
|
32
|
+
text: JSON.stringify({ count }),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
} catch (error) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: 'text' as const,
|
|
41
|
+
text: `Error counting warehousing providers: ${(error as Error).message}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
|
|
5
|
+
const WarehousingProviderTypeEnum = z
|
|
6
|
+
.enum(['PHYSICAL', 'VIRTUAL'])
|
|
7
|
+
.describe('Warehousing provider type');
|
|
8
|
+
|
|
9
|
+
export const WarehousingProvidersListSchema = {
|
|
10
|
+
type: WarehousingProviderTypeEnum.optional().describe('Optional filter by provider type'),
|
|
11
|
+
queryString: z.string().min(1).optional().describe('Search by _id or adapterKey (partial match)'),
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const WarehousingProvidersListZodSchema = z.object(WarehousingProvidersListSchema);
|
|
15
|
+
export type WarehousingProvidersListParams = z.infer<typeof WarehousingProvidersListZodSchema>;
|
|
16
|
+
|
|
17
|
+
export async function warehousingProvidersListHandler(
|
|
18
|
+
context: Context,
|
|
19
|
+
params: WarehousingProvidersListParams,
|
|
20
|
+
) {
|
|
21
|
+
const { modules, userId } = context;
|
|
22
|
+
const { type, queryString } = params;
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
log('handler warehousingProvidersListHandler', { userId, type, queryString });
|
|
26
|
+
|
|
27
|
+
const selector: Record<string, any> = {};
|
|
28
|
+
if (type) selector.type = type;
|
|
29
|
+
|
|
30
|
+
if (queryString) {
|
|
31
|
+
const regex = new RegExp(queryString, 'i');
|
|
32
|
+
selector.$or = [{ _id: regex }, { adapterKey: regex }];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const providers = await modules.warehousing.findProviders(selector);
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: 'text' as const,
|
|
41
|
+
text: JSON.stringify({ providers }),
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: 'text' as const,
|
|
50
|
+
text: `Error fetching warehousing providers: ${(error as Error).message}`,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Context } from '../../context.js';
|
|
2
|
+
|
|
3
|
+
export const resolveOrderFilters = async (
|
|
4
|
+
modules: Context['modules'],
|
|
5
|
+
{
|
|
6
|
+
paymentProviderIds,
|
|
7
|
+
deliveryProviderIds,
|
|
8
|
+
}: {
|
|
9
|
+
paymentProviderIds?: string[];
|
|
10
|
+
deliveryProviderIds?: string[];
|
|
11
|
+
},
|
|
12
|
+
) => {
|
|
13
|
+
const [orderPayments, orderDeliveries] = await Promise.all([
|
|
14
|
+
paymentProviderIds?.length
|
|
15
|
+
? modules.orders.payments.findOrderPaymentsByProviderIds({ paymentProviderIds })
|
|
16
|
+
: [],
|
|
17
|
+
deliveryProviderIds?.length
|
|
18
|
+
? modules.orders.deliveries.findDeliveryByProvidersId({ deliveryProviderIds })
|
|
19
|
+
: [],
|
|
20
|
+
]);
|
|
21
|
+
|
|
22
|
+
if (
|
|
23
|
+
(paymentProviderIds?.length && !orderPayments.length) ||
|
|
24
|
+
(deliveryProviderIds?.length && !orderDeliveries.length)
|
|
25
|
+
) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
paymentIds: orderPayments.map((p) => p._id),
|
|
31
|
+
deliveryIds: orderDeliveries.map((d) => d._id),
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const formatSummaryMap = (
|
|
36
|
+
map: Map<string, { sales: number; orders: number }>,
|
|
37
|
+
): { date: string; sales: number; orders: number; avgOrderValue: number }[] => {
|
|
38
|
+
return Array.from(map.entries())
|
|
39
|
+
.reverse()
|
|
40
|
+
.map(([date, { sales, orders }]) => ({
|
|
41
|
+
date,
|
|
42
|
+
sales: Number(sales.toFixed(2)),
|
|
43
|
+
orders,
|
|
44
|
+
avgOrderValue: orders > 0 ? Math.round(sales / orders) : 0,
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const resolveDateRange = (from?: string, to?: string, fallbackDays = 30) => {
|
|
49
|
+
const endDate = to ? new Date(to) : new Date();
|
|
50
|
+
const startDate = from ? new Date(from) : new Date(endDate.getTime() - (fallbackDays - 1) * 86400000);
|
|
51
|
+
return { startDate, endDate };
|
|
52
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export const OrderFilterSchema = {
|
|
4
|
+
paymentProviderIds: z.array(z.string()).optional(),
|
|
5
|
+
deliveryProviderIds: z.array(z.string()).optional(),
|
|
6
|
+
status: z.array(z.enum(['PENDING', 'CONFIRMED', 'SHIPPED', 'DELIVERED', 'CANCELLED'])).optional(),
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const DateRangeSchema = {
|
|
10
|
+
from: z.string().datetime().optional(),
|
|
11
|
+
to: z.string().datetime().optional(),
|
|
12
|
+
};
|
|
@@ -3,16 +3,20 @@ import { Context } from '../../../context.js';
|
|
|
3
3
|
import { DeliveryProviderType } from '@unchainedshop/core-delivery';
|
|
4
4
|
import { log } from '@unchainedshop/logger';
|
|
5
5
|
|
|
6
|
-
export default function deliveryInterfaces(
|
|
6
|
+
export default async function deliveryInterfaces(
|
|
7
7
|
root: never,
|
|
8
8
|
{ type }: { type: DeliveryProviderType },
|
|
9
9
|
{ userId }: Context,
|
|
10
10
|
) {
|
|
11
11
|
log(`query deliveryInterfaces ${type}`, { userId });
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
const allAdapters = await DeliveryDirector.getAdapters();
|
|
14
|
+
|
|
15
|
+
const filteredAdapters = type
|
|
16
|
+
? allAdapters.filter((Adapter) => Adapter.typeSupported(type as DeliveryProviderType))
|
|
17
|
+
: allAdapters;
|
|
18
|
+
|
|
19
|
+
return filteredAdapters.map((Adapter) => ({
|
|
16
20
|
_id: Adapter.key,
|
|
17
21
|
label: Adapter.label,
|
|
18
22
|
version: Adapter.version,
|
|
@@ -8,11 +8,31 @@ export default async function orders(
|
|
|
8
8
|
params: OrderQuery & { limit?: number; offset?: number; sort?: SortOption[] },
|
|
9
9
|
{ modules, userId }: Context,
|
|
10
10
|
) {
|
|
11
|
-
const {
|
|
11
|
+
const { limit, offset, paymentProviderIds, deliveryProviderIds, ...restParams } = params;
|
|
12
|
+
log(`query orders: ${limit} ${offset} ${restParams?.queryString || ''}`, { userId });
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const promises: Promise<any>[] = [];
|
|
15
|
+
|
|
16
|
+
await Promise.all(promises);
|
|
17
|
+
const [orderPayments, orderDeliveries] = await Promise.all([
|
|
18
|
+
paymentProviderIds?.length
|
|
19
|
+
? modules.orders.payments.findOrderPaymentsByProviderIds({ paymentProviderIds })
|
|
20
|
+
: [],
|
|
21
|
+
deliveryProviderIds?.length
|
|
22
|
+
? modules.orders.deliveries.findDeliveryByProvidersId({ deliveryProviderIds })
|
|
23
|
+
: [],
|
|
24
|
+
]);
|
|
25
|
+
if (
|
|
26
|
+
(paymentProviderIds?.length && !orderPayments.length) ||
|
|
27
|
+
(deliveryProviderIds?.length && !orderDeliveries.length)
|
|
28
|
+
)
|
|
29
|
+
return [];
|
|
30
|
+
const paymentIds = orderPayments.map((p) => p._id);
|
|
31
|
+
const deliveryIds = orderDeliveries.map((d) => d._id);
|
|
16
32
|
|
|
17
|
-
return modules.orders.findOrders(
|
|
33
|
+
return modules.orders.findOrders({
|
|
34
|
+
...restParams,
|
|
35
|
+
paymentIds,
|
|
36
|
+
deliveryIds,
|
|
37
|
+
});
|
|
18
38
|
}
|
|
@@ -7,7 +7,27 @@ export default async function ordersCount(
|
|
|
7
7
|
params: OrderQuery,
|
|
8
8
|
{ modules, userId }: Context,
|
|
9
9
|
) {
|
|
10
|
+
const { paymentProviderIds, deliveryProviderIds, ...restParams } = params;
|
|
10
11
|
log(`query ordersCount: ${params.includeCarts ? 'includeCart' : ''}`, { userId });
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
const promises: Promise<any>[] = [];
|
|
14
|
+
|
|
15
|
+
await Promise.all(promises);
|
|
16
|
+
const [orderPayments, orderDeliveries] = await Promise.all([
|
|
17
|
+
paymentProviderIds?.length
|
|
18
|
+
? modules.orders.payments.findOrderPaymentsByProviderIds({ paymentProviderIds })
|
|
19
|
+
: [],
|
|
20
|
+
deliveryProviderIds?.length
|
|
21
|
+
? modules.orders.deliveries.findDeliveryByProvidersId({ deliveryProviderIds })
|
|
22
|
+
: [],
|
|
23
|
+
]);
|
|
24
|
+
if (
|
|
25
|
+
(paymentProviderIds?.length && !orderPayments.length) ||
|
|
26
|
+
(deliveryProviderIds?.length && !orderDeliveries.length)
|
|
27
|
+
)
|
|
28
|
+
return 0;
|
|
29
|
+
const paymentIds = orderPayments.map((p) => p._id);
|
|
30
|
+
const deliveryIds = orderDeliveries.map((d) => d._id);
|
|
31
|
+
|
|
32
|
+
return modules.orders.count({ ...restParams, paymentIds, deliveryIds });
|
|
13
33
|
}
|
|
@@ -10,11 +10,15 @@ export default async function paymentInterfaces(
|
|
|
10
10
|
) {
|
|
11
11
|
log(`query paymentInterfaces ${type}`, { userId });
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const allAdapters = await PaymentDirector.getAdapters();
|
|
14
|
+
|
|
15
|
+
const filteredAdapters = type
|
|
16
|
+
? allAdapters.filter((Adapter) => Adapter.typeSupported(type as PaymentProviderType))
|
|
17
|
+
: allAdapters;
|
|
18
|
+
|
|
19
|
+
return filteredAdapters.map((Adapter) => ({
|
|
20
|
+
_id: Adapter.key,
|
|
21
|
+
label: Adapter.label,
|
|
22
|
+
version: Adapter.version,
|
|
23
|
+
}));
|
|
20
24
|
}
|
|
@@ -9,10 +9,12 @@ export default async function warehousingInterfaces(
|
|
|
9
9
|
{ userId }: Context,
|
|
10
10
|
) {
|
|
11
11
|
log(`query warehousingInterfaces ${type}`, { userId });
|
|
12
|
+
const allAdapters = await WarehousingDirector.getAdapters();
|
|
13
|
+
const filteredAdapters = type
|
|
14
|
+
? allAdapters.filter((Adapter) => Adapter.typeSupported(type as WarehousingProviderType))
|
|
15
|
+
: allAdapters;
|
|
12
16
|
|
|
13
|
-
return
|
|
14
|
-
adapterFilter: (Adapter) => Adapter.typeSupported(type),
|
|
15
|
-
}).map((Adapter) => ({
|
|
17
|
+
return filteredAdapters.map((Adapter) => ({
|
|
16
18
|
_id: Adapter.key,
|
|
17
19
|
label: Adapter.label,
|
|
18
20
|
version: Adapter.version,
|
package/src/schema/query.ts
CHANGED
|
@@ -181,7 +181,7 @@ export default [
|
|
|
181
181
|
"""
|
|
182
182
|
Get all delivery interfaces filtered by type
|
|
183
183
|
"""
|
|
184
|
-
deliveryInterfaces(type: DeliveryProviderType
|
|
184
|
+
deliveryInterfaces(type: DeliveryProviderType): [DeliveryInterface!]!
|
|
185
185
|
@cacheControl(scope: PRIVATE, maxAge: 0)
|
|
186
186
|
|
|
187
187
|
"""
|
|
@@ -205,7 +205,7 @@ export default [
|
|
|
205
205
|
"""
|
|
206
206
|
Get all warehousing interfaces filtered by type
|
|
207
207
|
"""
|
|
208
|
-
warehousingInterfaces(type: WarehousingProviderType
|
|
208
|
+
warehousingInterfaces(type: WarehousingProviderType): [WarehousingInterface!]!
|
|
209
209
|
@cacheControl(scope: PRIVATE, maxAge: 0)
|
|
210
210
|
|
|
211
211
|
"""
|
|
@@ -242,13 +242,20 @@ export default [
|
|
|
242
242
|
"""
|
|
243
243
|
Get all payment interfaces filtered by type
|
|
244
244
|
"""
|
|
245
|
-
paymentInterfaces(type: PaymentProviderType
|
|
245
|
+
paymentInterfaces(type: PaymentProviderType): [PaymentInterface!]!
|
|
246
246
|
@cacheControl(scope: PRIVATE, maxAge: 0)
|
|
247
247
|
|
|
248
248
|
"""
|
|
249
249
|
Returns total number of orders
|
|
250
250
|
"""
|
|
251
|
-
ordersCount(
|
|
251
|
+
ordersCount(
|
|
252
|
+
includeCarts: Boolean = false
|
|
253
|
+
queryString: String
|
|
254
|
+
paymentProviderIds: [String!]
|
|
255
|
+
deliveryProviderIds: [String!]
|
|
256
|
+
dateRange: DateFilterInput
|
|
257
|
+
status: [OrderStatus!]
|
|
258
|
+
): Int!
|
|
252
259
|
|
|
253
260
|
"""
|
|
254
261
|
Get all orders, by default sorted by creation date (descending)
|
|
@@ -260,6 +267,9 @@ export default [
|
|
|
260
267
|
queryString: String
|
|
261
268
|
status: [OrderStatus!]
|
|
262
269
|
sort: [SortOptionInput!]
|
|
270
|
+
paymentProviderIds: [String!]
|
|
271
|
+
deliveryProviderIds: [String!]
|
|
272
|
+
dateRange: DateFilterInput
|
|
263
273
|
): [Order!]!
|
|
264
274
|
|
|
265
275
|
"""
|