@instockng/api-client 1.0.3 → 1.0.4

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.
Files changed (170) hide show
  1. package/dist/apps/backend/src/generated/zod/index.d.ts +1114 -0
  2. package/dist/apps/backend/src/generated/zod/index.js +670 -0
  3. package/dist/apps/backend/src/http-app.d.ts +40 -0
  4. package/dist/apps/backend/src/http-app.js +106 -0
  5. package/dist/apps/backend/src/lib/brand-response.d.ts +14 -0
  6. package/dist/apps/backend/src/lib/brand-response.js +8 -0
  7. package/dist/apps/backend/src/lib/cart-helpers.d.ts +280 -0
  8. package/dist/apps/backend/src/lib/cart-helpers.js +93 -0
  9. package/dist/apps/backend/src/lib/cart-recovery.d.ts +30 -0
  10. package/dist/apps/backend/src/lib/cart-recovery.js +147 -0
  11. package/dist/apps/backend/src/lib/cart-response.d.ts +121 -0
  12. package/dist/apps/backend/src/lib/cart-response.js +150 -0
  13. package/dist/apps/backend/src/lib/clerk.d.ts +18 -0
  14. package/dist/apps/backend/src/lib/clerk.js +167 -0
  15. package/dist/apps/backend/src/lib/delivery-zone-response.d.ts +62 -0
  16. package/dist/apps/backend/src/lib/delivery-zone-response.js +24 -0
  17. package/dist/apps/backend/src/lib/discount-code-response.d.ts +42 -0
  18. package/dist/apps/backend/src/lib/discount-code-response.js +19 -0
  19. package/dist/apps/backend/src/lib/discount.d.ts +20 -0
  20. package/dist/apps/backend/src/lib/discount.js +35 -0
  21. package/dist/apps/backend/src/lib/inventory.d.ts +26 -0
  22. package/dist/apps/backend/src/lib/inventory.js +160 -0
  23. package/dist/apps/backend/src/lib/meta-capi.d.ts +48 -0
  24. package/dist/apps/backend/src/lib/meta-capi.js +120 -0
  25. package/dist/apps/backend/src/lib/openapi.d.ts +36 -0
  26. package/dist/apps/backend/src/lib/openapi.js +69 -0
  27. package/dist/apps/backend/src/lib/order-recovery.d.ts +367 -0
  28. package/dist/apps/backend/src/lib/order-recovery.js +373 -0
  29. package/dist/apps/backend/src/lib/order-response.d.ts +136 -0
  30. package/dist/apps/backend/src/lib/order-response.js +61 -0
  31. package/dist/apps/backend/src/lib/pricing.d.ts +39 -0
  32. package/dist/apps/backend/src/lib/pricing.js +62 -0
  33. package/dist/apps/backend/src/lib/prisma.d.ts +9 -0
  34. package/dist/apps/backend/src/lib/prisma.js +30 -0
  35. package/dist/apps/backend/src/lib/product-response.d.ts +82 -0
  36. package/dist/apps/backend/src/lib/product-response.js +29 -0
  37. package/dist/apps/backend/src/lib/utils.d.ts +32 -0
  38. package/dist/apps/backend/src/lib/utils.js +63 -0
  39. package/dist/apps/backend/src/middleware/clerk-auth.d.ts +8 -0
  40. package/dist/apps/backend/src/middleware/clerk-auth.js +89 -0
  41. package/dist/apps/backend/src/middleware/cors.d.ts +8 -0
  42. package/dist/apps/backend/src/middleware/cors.js +11 -0
  43. package/dist/apps/backend/src/notifications/producers/meta-capi-producer.d.ts +55 -0
  44. package/dist/apps/backend/src/notifications/producers/meta-capi-producer.js +125 -0
  45. package/dist/apps/backend/src/notifications/producers/order-notification.d.ts +9 -0
  46. package/dist/apps/backend/src/notifications/producers/order-notification.js +18 -0
  47. package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.d.ts +10 -0
  48. package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.js +11 -0
  49. package/dist/apps/backend/src/routes/admin/abandoned-carts.d.ts +605 -0
  50. package/dist/apps/backend/src/routes/admin/abandoned-carts.js +194 -0
  51. package/dist/apps/backend/src/routes/admin/brands.d.ts +175 -0
  52. package/dist/apps/backend/src/routes/admin/brands.js +118 -0
  53. package/dist/apps/backend/src/routes/admin/customers.d.ts +306 -0
  54. package/dist/apps/backend/src/routes/admin/customers.js +39 -0
  55. package/dist/apps/backend/src/routes/admin/delivery-zones.d.ts +438 -0
  56. package/dist/apps/backend/src/routes/admin/delivery-zones.js +300 -0
  57. package/dist/apps/backend/src/routes/admin/discount-codes.d.ts +478 -0
  58. package/dist/apps/backend/src/routes/admin/discount-codes.js +418 -0
  59. package/dist/apps/backend/src/routes/admin/inventory.d.ts +273 -0
  60. package/dist/apps/backend/src/routes/admin/inventory.js +189 -0
  61. package/dist/apps/backend/src/routes/admin/orders.d.ts +1478 -0
  62. package/dist/apps/backend/src/routes/admin/orders.js +503 -0
  63. package/dist/apps/backend/src/routes/admin/products.d.ts +860 -0
  64. package/dist/apps/backend/src/routes/admin/products.js +107 -0
  65. package/dist/apps/backend/src/routes/admin/stats.d.ts +288 -0
  66. package/dist/apps/backend/src/routes/admin/stats.js +55 -0
  67. package/dist/apps/backend/src/routes/admin/variants.d.ts +239 -0
  68. package/dist/apps/backend/src/routes/admin/variants.js +173 -0
  69. package/dist/apps/backend/src/routes/admin/warehouses.d.ts +373 -0
  70. package/dist/apps/backend/src/routes/admin/warehouses.js +123 -0
  71. package/dist/apps/backend/src/routes/public/brands.d.ts +40 -0
  72. package/dist/apps/backend/src/routes/public/brands.js +38 -0
  73. package/dist/apps/backend/src/routes/public/carts.d.ts +2655 -0
  74. package/dist/apps/backend/src/routes/public/carts.js +631 -0
  75. package/dist/apps/backend/src/routes/public/delivery-zones.d.ts +35 -0
  76. package/dist/apps/backend/src/routes/public/delivery-zones.js +62 -0
  77. package/dist/apps/backend/src/routes/public/orders.d.ts +323 -0
  78. package/dist/apps/backend/src/routes/public/orders.js +160 -0
  79. package/dist/apps/backend/src/routes/public/products.d.ts +449 -0
  80. package/dist/apps/backend/src/routes/public/products.js +133 -0
  81. package/dist/apps/backend/src/types/index.d.ts +42 -0
  82. package/dist/apps/backend/src/types/index.js +2 -0
  83. package/dist/apps/backend/src/validators/brand.d.ts +17 -0
  84. package/dist/apps/backend/src/validators/brand.js +15 -0
  85. package/dist/apps/backend/src/validators/delivery-zone.d.ts +31 -0
  86. package/dist/apps/backend/src/validators/delivery-zone.js +51 -0
  87. package/dist/apps/backend/src/validators/discount-code.d.ts +74 -0
  88. package/dist/apps/backend/src/validators/discount-code.js +50 -0
  89. package/dist/apps/backend/src/validators/inventory.d.ts +20 -0
  90. package/dist/apps/backend/src/validators/inventory.js +15 -0
  91. package/dist/apps/backend/src/validators/order.d.ts +87 -0
  92. package/dist/apps/backend/src/validators/order.js +61 -0
  93. package/dist/apps/backend/src/validators/product.d.ts +18 -0
  94. package/dist/apps/backend/src/validators/product.js +19 -0
  95. package/dist/apps/backend/src/validators/variant.d.ts +19 -0
  96. package/dist/apps/backend/src/validators/variant.js +19 -0
  97. package/dist/apps/backend/src/validators/warehouse.d.ts +15 -0
  98. package/dist/apps/backend/src/validators/warehouse.js +15 -0
  99. package/dist/fetchers/carts.d.ts +746 -754
  100. package/dist/hooks/public/carts.d.ts +694 -702
  101. package/dist/packages/api-client/src/backend-types.d.ts +10 -0
  102. package/dist/packages/api-client/src/backend-types.js +10 -0
  103. package/dist/packages/api-client/src/client.d.ts +20 -0
  104. package/dist/packages/api-client/src/client.js +40 -0
  105. package/dist/packages/api-client/src/fetchers/brands.d.ts +25 -0
  106. package/dist/packages/api-client/src/fetchers/brands.js +26 -0
  107. package/dist/packages/api-client/src/fetchers/carts.d.ts +2335 -0
  108. package/dist/packages/api-client/src/fetchers/carts.js +169 -0
  109. package/dist/packages/api-client/src/fetchers/delivery-zones.d.ts +28 -0
  110. package/dist/packages/api-client/src/fetchers/delivery-zones.js +26 -0
  111. package/dist/packages/api-client/src/fetchers/index.d.ts +22 -0
  112. package/dist/packages/api-client/src/fetchers/index.js +22 -0
  113. package/dist/packages/api-client/src/fetchers/orders.d.ts +283 -0
  114. package/dist/packages/api-client/src/fetchers/orders.js +44 -0
  115. package/dist/packages/api-client/src/fetchers/products.d.ts +386 -0
  116. package/dist/packages/api-client/src/fetchers/products.js +42 -0
  117. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.d.ts +535 -0
  118. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.js +79 -0
  119. package/dist/packages/api-client/src/hooks/admin/brands.d.ts +79 -0
  120. package/dist/packages/api-client/src/hooks/admin/brands.js +103 -0
  121. package/dist/packages/api-client/src/hooks/admin/customers.d.ts +278 -0
  122. package/dist/packages/api-client/src/hooks/admin/customers.js +25 -0
  123. package/dist/packages/api-client/src/hooks/admin/delivery-zones.d.ts +270 -0
  124. package/dist/packages/api-client/src/hooks/admin/delivery-zones.js +168 -0
  125. package/dist/packages/api-client/src/hooks/admin/discount-codes.d.ts +299 -0
  126. package/dist/packages/api-client/src/hooks/admin/discount-codes.js +157 -0
  127. package/dist/packages/api-client/src/hooks/admin/index.d.ts +16 -0
  128. package/dist/packages/api-client/src/hooks/admin/index.js +16 -0
  129. package/dist/packages/api-client/src/hooks/admin/inventory.d.ts +224 -0
  130. package/dist/packages/api-client/src/hooks/admin/inventory.js +102 -0
  131. package/dist/packages/api-client/src/hooks/admin/orders.d.ts +1380 -0
  132. package/dist/packages/api-client/src/hooks/admin/orders.js +169 -0
  133. package/dist/packages/api-client/src/hooks/admin/products.d.ts +374 -0
  134. package/dist/packages/api-client/src/hooks/admin/products.js +84 -0
  135. package/dist/packages/api-client/src/hooks/admin/stats.d.ts +277 -0
  136. package/dist/packages/api-client/src/hooks/admin/stats.js +24 -0
  137. package/dist/packages/api-client/src/hooks/admin/variants.d.ts +115 -0
  138. package/dist/packages/api-client/src/hooks/admin/variants.js +121 -0
  139. package/dist/packages/api-client/src/hooks/admin/warehouses.d.ts +277 -0
  140. package/dist/packages/api-client/src/hooks/admin/warehouses.js +103 -0
  141. package/dist/packages/api-client/src/hooks/public/brands.d.ts +33 -0
  142. package/dist/packages/api-client/src/hooks/public/brands.js +30 -0
  143. package/dist/packages/api-client/src/hooks/public/carts.d.ts +2405 -0
  144. package/dist/packages/api-client/src/hooks/public/carts.js +213 -0
  145. package/dist/packages/api-client/src/hooks/public/delivery-zones.d.ts +34 -0
  146. package/dist/packages/api-client/src/hooks/public/delivery-zones.js +28 -0
  147. package/dist/packages/api-client/src/hooks/public/index.d.ts +10 -0
  148. package/dist/packages/api-client/src/hooks/public/index.js +10 -0
  149. package/dist/packages/api-client/src/hooks/public/orders.d.ts +302 -0
  150. package/dist/packages/api-client/src/hooks/public/orders.js +50 -0
  151. package/dist/packages/api-client/src/hooks/public/products.d.ts +398 -0
  152. package/dist/packages/api-client/src/hooks/public/products.js +47 -0
  153. package/dist/packages/api-client/src/hooks/use-query-unwrapped.d.ts +20 -0
  154. package/dist/packages/api-client/src/hooks/use-query-unwrapped.js +22 -0
  155. package/dist/packages/api-client/src/hooks/useApiConfig.d.ts +11 -0
  156. package/dist/packages/api-client/src/hooks/useApiConfig.js +14 -0
  157. package/dist/packages/api-client/src/index.d.ts +20 -0
  158. package/dist/packages/api-client/src/index.js +25 -0
  159. package/dist/packages/api-client/src/provider.d.ts +33 -0
  160. package/dist/packages/api-client/src/provider.js +52 -0
  161. package/dist/packages/api-client/src/rpc-client.d.ts +9035 -0
  162. package/dist/packages/api-client/src/rpc-client.js +78 -0
  163. package/dist/packages/api-client/src/rpc-types.d.ts +76 -0
  164. package/dist/packages/api-client/src/rpc-types.js +7 -0
  165. package/dist/packages/api-client/src/types.d.ts +33 -0
  166. package/dist/packages/api-client/src/types.js +16 -0
  167. package/dist/packages/api-client/src/utils/query-keys.d.ts +106 -0
  168. package/dist/packages/api-client/src/utils/query-keys.js +108 -0
  169. package/dist/rpc-client.d.ts +685 -693
  170. package/package.json +10 -9
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ export const createStateSchema = z.object({
3
+ name: z.string().min(1),
4
+ isActive: z.boolean().optional(),
5
+ });
6
+ export const updateStateSchema = z.object({
7
+ name: z.string().min(1).optional(),
8
+ isActive: z.boolean().optional(),
9
+ });
10
+ export const createDeliveryZoneSchema = z
11
+ .object({
12
+ stateId: z.uuid(),
13
+ brandId: z.uuid().nullable().optional(),
14
+ name: z.string().min(1),
15
+ deliveryCost: z.number().nonnegative(),
16
+ freeShippingThreshold: z.number().nonnegative().nullable().optional(),
17
+ allowCOD: z.boolean().optional(),
18
+ allowOnline: z.boolean().optional(),
19
+ waybillOnly: z.boolean().optional(),
20
+ estimatedDays: z.number().int().positive().nullable().optional(),
21
+ isActive: z.boolean().optional(),
22
+ })
23
+ .refine((data) => {
24
+ // If waybillOnly is true, allowCOD must be false
25
+ if (data.waybillOnly && data.allowCOD !== false) {
26
+ return false;
27
+ }
28
+ return true;
29
+ }, {
30
+ message: 'When waybillOnly is true, allowCOD must be false',
31
+ });
32
+ export const updateDeliveryZoneSchema = z
33
+ .object({
34
+ name: z.string().min(1).optional(),
35
+ deliveryCost: z.number().nonnegative().optional(),
36
+ freeShippingThreshold: z.number().nonnegative().nullable().optional(),
37
+ allowCOD: z.boolean().optional(),
38
+ allowOnline: z.boolean().optional(),
39
+ waybillOnly: z.boolean().optional(),
40
+ estimatedDays: z.number().int().positive().nullable().optional(),
41
+ isActive: z.boolean().optional(),
42
+ })
43
+ .refine((data) => {
44
+ // If waybillOnly is being set to true, allowCOD must be false
45
+ if (data.waybillOnly && data.allowCOD !== false && data.allowCOD !== undefined) {
46
+ return false;
47
+ }
48
+ return true;
49
+ }, {
50
+ message: 'When waybillOnly is true, allowCOD must be false',
51
+ });
@@ -0,0 +1,74 @@
1
+ import { z } from 'zod';
2
+ export declare const createDiscountCodeSchema: z.ZodObject<{
3
+ code: z.ZodString;
4
+ brandId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5
+ type: z.ZodEnum<{
6
+ fixed: "fixed";
7
+ percentage: "percentage";
8
+ }>;
9
+ value: z.ZodNumber;
10
+ description: z.ZodOptional<z.ZodString>;
11
+ category: z.ZodDefault<z.ZodEnum<{
12
+ recovery: "recovery";
13
+ manual: "manual";
14
+ influencer: "influencer";
15
+ seasonal: "seasonal";
16
+ referral: "referral";
17
+ }>>;
18
+ minPurchase: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
19
+ maxDiscount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
20
+ usageLimit: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
21
+ perCustomerLimit: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
22
+ validFrom: z.ZodOptional<z.ZodString>;
23
+ validUntil: z.ZodOptional<z.ZodNullable<z.ZodString>>;
24
+ isActive: z.ZodDefault<z.ZodBoolean>;
25
+ isAutoApply: z.ZodDefault<z.ZodBoolean>;
26
+ }, z.core.$strip>;
27
+ export declare const updateDiscountCodeSchema: z.ZodObject<{
28
+ code: z.ZodOptional<z.ZodString>;
29
+ type: z.ZodOptional<z.ZodEnum<{
30
+ fixed: "fixed";
31
+ percentage: "percentage";
32
+ }>>;
33
+ value: z.ZodOptional<z.ZodNumber>;
34
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
35
+ category: z.ZodOptional<z.ZodEnum<{
36
+ recovery: "recovery";
37
+ manual: "manual";
38
+ influencer: "influencer";
39
+ seasonal: "seasonal";
40
+ referral: "referral";
41
+ }>>;
42
+ minPurchase: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
43
+ maxDiscount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
44
+ usageLimit: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
45
+ perCustomerLimit: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
46
+ validFrom: z.ZodOptional<z.ZodString>;
47
+ validUntil: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ isActive: z.ZodOptional<z.ZodBoolean>;
49
+ isAutoApply: z.ZodOptional<z.ZodBoolean>;
50
+ }, z.core.$strip>;
51
+ export declare const bulkGenerateCodesSchema: z.ZodObject<{
52
+ prefix: z.ZodString;
53
+ count: z.ZodNumber;
54
+ brandId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
+ type: z.ZodEnum<{
56
+ fixed: "fixed";
57
+ percentage: "percentage";
58
+ }>;
59
+ value: z.ZodNumber;
60
+ description: z.ZodOptional<z.ZodString>;
61
+ category: z.ZodDefault<z.ZodEnum<{
62
+ recovery: "recovery";
63
+ manual: "manual";
64
+ influencer: "influencer";
65
+ seasonal: "seasonal";
66
+ referral: "referral";
67
+ }>>;
68
+ minPurchase: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
69
+ maxDiscount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
70
+ perCustomerLimit: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
71
+ validFrom: z.ZodOptional<z.ZodString>;
72
+ validUntil: z.ZodOptional<z.ZodNullable<z.ZodString>>;
73
+ isActive: z.ZodDefault<z.ZodBoolean>;
74
+ }, z.core.$strip>;
@@ -0,0 +1,50 @@
1
+ import { z } from 'zod';
2
+ // Create discount code schema
3
+ export const createDiscountCodeSchema = z.object({
4
+ code: z.string().min(1).max(50).regex(/^[A-Z0-9-]+$/, 'Code must contain only uppercase letters, numbers, and hyphens'),
5
+ brandId: z.string().uuid().nullable().optional(),
6
+ type: z.enum(['percentage', 'fixed']),
7
+ value: z.number().positive(), // Percentage (e.g., 10.00 for 10%) or fixed amount in Naira
8
+ description: z.string().min(1).max(500).optional(),
9
+ category: z.enum(['manual', 'recovery', 'influencer', 'seasonal', 'referral']).default('manual'),
10
+ minPurchase: z.number().nonnegative().nullable().optional(), // Minimum purchase in Naira
11
+ maxDiscount: z.number().positive().nullable().optional(), // Max discount in Naira
12
+ usageLimit: z.number().int().positive().nullable().optional(),
13
+ perCustomerLimit: z.number().int().positive().nullable().optional(),
14
+ validFrom: z.string().datetime().optional(),
15
+ validUntil: z.string().datetime().nullable().optional(),
16
+ isActive: z.boolean().default(true),
17
+ isAutoApply: z.boolean().default(false),
18
+ });
19
+ // Update discount code schema (all fields optional)
20
+ export const updateDiscountCodeSchema = z.object({
21
+ code: z.string().min(1).max(50).regex(/^[A-Z0-9-]+$/).optional(),
22
+ type: z.enum(['percentage', 'fixed']).optional(),
23
+ value: z.number().positive().optional(), // Percentage or fixed amount in Naira
24
+ description: z.string().min(1).max(500).nullable().optional(),
25
+ category: z.enum(['manual', 'recovery', 'influencer', 'seasonal', 'referral']).optional(),
26
+ minPurchase: z.number().nonnegative().nullable().optional(), // Minimum purchase in Naira
27
+ maxDiscount: z.number().positive().nullable().optional(), // Max discount in Naira
28
+ usageLimit: z.number().int().positive().nullable().optional(),
29
+ perCustomerLimit: z.number().int().positive().nullable().optional(),
30
+ validFrom: z.string().datetime().optional(),
31
+ validUntil: z.string().datetime().nullable().optional(),
32
+ isActive: z.boolean().optional(),
33
+ isAutoApply: z.boolean().optional(),
34
+ });
35
+ // Bulk generate discount codes schema
36
+ export const bulkGenerateCodesSchema = z.object({
37
+ prefix: z.string().min(1).max(20).regex(/^[A-Z0-9-]+$/),
38
+ count: z.number().int().positive().max(1000), // Max 1000 codes at once
39
+ brandId: z.string().uuid().nullable().optional(),
40
+ type: z.enum(['percentage', 'fixed']),
41
+ value: z.number().positive(), // Percentage or fixed amount in Naira
42
+ description: z.string().min(1).max(500).optional(),
43
+ category: z.enum(['manual', 'recovery', 'influencer', 'seasonal', 'referral']).default('manual'),
44
+ minPurchase: z.number().nonnegative().nullable().optional(), // Minimum purchase in Naira
45
+ maxDiscount: z.number().positive().nullable().optional(), // Max discount in Naira
46
+ perCustomerLimit: z.number().int().positive().nullable().optional(),
47
+ validFrom: z.string().datetime().optional(),
48
+ validUntil: z.string().datetime().nullable().optional(),
49
+ isActive: z.boolean().default(true),
50
+ });
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const adjustInventorySchema: z.ZodObject<{
3
+ variantId: z.ZodUUID;
4
+ warehouseId: z.ZodUUID;
5
+ quantity: z.ZodNumber;
6
+ type: z.ZodEnum<{
7
+ restock: "restock";
8
+ adjustment: "adjustment";
9
+ damaged: "damaged";
10
+ initial: "initial";
11
+ }>;
12
+ reason: z.ZodOptional<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ export declare const transferInventorySchema: z.ZodObject<{
15
+ variantId: z.ZodUUID;
16
+ fromWarehouseId: z.ZodUUID;
17
+ toWarehouseId: z.ZodUUID;
18
+ quantity: z.ZodNumber;
19
+ reason: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strip>;
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ export const adjustInventorySchema = z.object({
3
+ variantId: z.uuid(),
4
+ warehouseId: z.uuid(),
5
+ quantity: z.number().int(),
6
+ type: z.enum(['restock', 'adjustment', 'damaged', 'initial']),
7
+ reason: z.string().optional(),
8
+ });
9
+ export const transferInventorySchema = z.object({
10
+ variantId: z.uuid(),
11
+ fromWarehouseId: z.uuid(),
12
+ toWarehouseId: z.uuid(),
13
+ quantity: z.number().int().positive(),
14
+ reason: z.string().optional(),
15
+ });
@@ -0,0 +1,87 @@
1
+ import { z } from 'zod';
2
+ export declare const createOrderSchema: z.ZodObject<{
3
+ brandSlug: z.ZodString;
4
+ firstName: z.ZodString;
5
+ lastName: z.ZodString;
6
+ phone: z.ZodString;
7
+ address: z.ZodString;
8
+ city: z.ZodString;
9
+ deliveryZoneId: z.ZodString;
10
+ deliveryCharge: z.ZodNumber;
11
+ items: z.ZodArray<z.ZodObject<{
12
+ sku: z.ZodString;
13
+ quantity: z.ZodNumber;
14
+ }, z.core.$strip>>;
15
+ discount: z.ZodOptional<z.ZodNumber>;
16
+ paymentMethod: z.ZodEnum<{
17
+ cod: "cod";
18
+ online: "online";
19
+ }>;
20
+ paystackReference: z.ZodOptional<z.ZodString>;
21
+ }, z.core.$strip>;
22
+ export declare const updateOrderSchema: z.ZodObject<{
23
+ brandSlug: z.ZodOptional<z.ZodString>;
24
+ firstName: z.ZodOptional<z.ZodString>;
25
+ lastName: z.ZodOptional<z.ZodString>;
26
+ phone: z.ZodOptional<z.ZodString>;
27
+ address: z.ZodOptional<z.ZodString>;
28
+ city: z.ZodOptional<z.ZodString>;
29
+ deliveryZoneId: z.ZodOptional<z.ZodString>;
30
+ deliveryCharge: z.ZodOptional<z.ZodNumber>;
31
+ discount: z.ZodOptional<z.ZodNumber>;
32
+ paymentMethod: z.ZodOptional<z.ZodEnum<{
33
+ cod: "cod";
34
+ online: "online";
35
+ }>>;
36
+ paystackReference: z.ZodOptional<z.ZodString>;
37
+ items: z.ZodOptional<z.ZodArray<z.ZodObject<{
38
+ sku: z.ZodString;
39
+ quantity: z.ZodNumber;
40
+ }, z.core.$strip>>>;
41
+ }, z.core.$strip>;
42
+ export declare const updateOrderStatusSchema: z.ZodObject<{
43
+ status: z.ZodEnum<{
44
+ pending: "pending";
45
+ shipped: "shipped";
46
+ delivered: "delivered";
47
+ cancelled: "cancelled";
48
+ returned: "returned";
49
+ prospect: "prospect";
50
+ }>;
51
+ cancellationReason: z.ZodOptional<z.ZodString>;
52
+ prospectReason: z.ZodOptional<z.ZodEnum<{
53
+ other: "other";
54
+ no_answer: "no_answer";
55
+ thinking: "thinking";
56
+ price_concern: "price_concern";
57
+ will_call_back: "will_call_back";
58
+ unclear_commitment: "unclear_commitment";
59
+ payment_issue: "payment_issue";
60
+ }>>;
61
+ prospectNote: z.ZodOptional<z.ZodString>;
62
+ warehouses: z.ZodOptional<z.ZodArray<z.ZodObject<{
63
+ orderItemId: z.ZodUUID;
64
+ warehouseId: z.ZodUUID;
65
+ }, z.core.$strip>>>;
66
+ }, z.core.$strip>;
67
+ export declare const orderFiltersSchema: z.ZodObject<{
68
+ brandId: z.ZodOptional<z.ZodUUID>;
69
+ status: z.ZodOptional<z.ZodEnum<{
70
+ pending: "pending";
71
+ shipped: "shipped";
72
+ delivered: "delivered";
73
+ cancelled: "cancelled";
74
+ returned: "returned";
75
+ prospect: "prospect";
76
+ }>>;
77
+ paymentMethod: z.ZodOptional<z.ZodEnum<{
78
+ cod: "cod";
79
+ online: "online";
80
+ }>>;
81
+ warehouseId: z.ZodOptional<z.ZodUUID>;
82
+ search: z.ZodOptional<z.ZodString>;
83
+ startDate: z.ZodOptional<z.ZodString>;
84
+ endDate: z.ZodOptional<z.ZodString>;
85
+ page: z.ZodOptional<z.ZodNumber>;
86
+ limit: z.ZodOptional<z.ZodNumber>;
87
+ }, z.core.$strip>;
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ import { OrderStatusSchema, ProspectReasonSchema, PaymentMethodSchema } from '../generated/zod';
3
+ // Order creation schema (public API)
4
+ export const createOrderSchema = z.object({
5
+ brandSlug: z.string().min(1),
6
+ firstName: z.string().min(1),
7
+ lastName: z.string().min(1),
8
+ phone: z.string().min(1),
9
+ address: z.string().min(1),
10
+ city: z.string().min(1),
11
+ deliveryZoneId: z.string().uuid(),
12
+ deliveryCharge: z.number().nonnegative(),
13
+ items: z.array(z.object({
14
+ sku: z.string().min(1),
15
+ quantity: z.number().int().positive(),
16
+ })).min(1),
17
+ discount: z.number().nonnegative().optional(),
18
+ paymentMethod: PaymentMethodSchema,
19
+ paystackReference: z.string().optional(),
20
+ });
21
+ // Update order schema (admin API)
22
+ export const updateOrderSchema = z.object({
23
+ brandSlug: z.string().min(1).optional(),
24
+ firstName: z.string().min(1).optional(),
25
+ lastName: z.string().min(1).optional(),
26
+ phone: z.string().min(1).optional(),
27
+ address: z.string().min(1).optional(),
28
+ city: z.string().min(1).optional(),
29
+ deliveryZoneId: z.string().uuid().optional(),
30
+ deliveryCharge: z.number().nonnegative().optional(),
31
+ discount: z.number().nonnegative().optional(),
32
+ paymentMethod: PaymentMethodSchema.optional(),
33
+ paystackReference: z.string().optional(),
34
+ items: z.array(z.object({
35
+ sku: z.string().min(1),
36
+ quantity: z.number().int().positive(),
37
+ })).optional(),
38
+ });
39
+ // Update order status schema
40
+ export const updateOrderStatusSchema = z.object({
41
+ status: OrderStatusSchema,
42
+ cancellationReason: z.string().optional(),
43
+ prospectReason: ProspectReasonSchema.optional(),
44
+ prospectNote: z.string().optional(),
45
+ warehouses: z.array(z.object({
46
+ orderItemId: z.uuid(),
47
+ warehouseId: z.uuid(),
48
+ })).optional(), // Required when status is 'shipped'
49
+ });
50
+ // Order filter schema
51
+ export const orderFiltersSchema = z.object({
52
+ brandId: z.uuid().optional(),
53
+ status: OrderStatusSchema.optional(),
54
+ paymentMethod: PaymentMethodSchema.optional(),
55
+ warehouseId: z.uuid().optional(),
56
+ search: z.string().optional(), // Search by order number, customer name, phone
57
+ startDate: z.string().optional(),
58
+ endDate: z.string().optional(),
59
+ page: z.number().int().positive().optional(),
60
+ limit: z.number().int().positive().max(100).optional(),
61
+ });
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ export declare const createProductSchema: z.ZodObject<{
3
+ brandId: z.ZodString;
4
+ name: z.ZodString;
5
+ slug: z.ZodString;
6
+ description: z.ZodOptional<z.ZodString>;
7
+ thumbnailUrl: z.ZodOptional<z.ZodString>;
8
+ quantityDiscounts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
9
+ isActive: z.ZodOptional<z.ZodBoolean>;
10
+ }, z.core.$strip>;
11
+ export declare const updateProductSchema: z.ZodObject<{
12
+ name: z.ZodOptional<z.ZodString>;
13
+ slug: z.ZodOptional<z.ZodString>;
14
+ description: z.ZodOptional<z.ZodString>;
15
+ thumbnailUrl: z.ZodOptional<z.ZodString>;
16
+ quantityDiscounts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
17
+ isActive: z.ZodOptional<z.ZodBoolean>;
18
+ }, z.core.$strip>;
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ const quantityDiscountsSchema = z.record(z.string().regex(/^\d+$/, 'Quantity must be a number'), z.number().int().min(0).max(100, 'Discount must be between 0 and 100')).optional();
3
+ export const createProductSchema = z.object({
4
+ brandId: z.string().uuid(),
5
+ name: z.string().min(1),
6
+ slug: z.string().min(1).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, 'Slug must be lowercase letters, numbers, and hyphens only'),
7
+ description: z.string().optional(),
8
+ thumbnailUrl: z.string().url().optional(),
9
+ quantityDiscounts: quantityDiscountsSchema,
10
+ isActive: z.boolean().optional(),
11
+ });
12
+ export const updateProductSchema = z.object({
13
+ name: z.string().min(1).optional(),
14
+ slug: z.string().min(1).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, 'Slug must be lowercase letters, numbers, and hyphens only').optional(),
15
+ description: z.string().optional(),
16
+ thumbnailUrl: z.string().url().optional(),
17
+ quantityDiscounts: quantityDiscountsSchema,
18
+ isActive: z.boolean().optional(),
19
+ });
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ export declare const createVariantSchema: z.ZodObject<{
3
+ sku: z.ZodString;
4
+ name: z.ZodOptional<z.ZodString>;
5
+ thumbnailUrl: z.ZodOptional<z.ZodURL>;
6
+ price: z.ZodNumber;
7
+ trackInventory: z.ZodOptional<z.ZodBoolean>;
8
+ lowStockThreshold: z.ZodOptional<z.ZodNumber>;
9
+ isActive: z.ZodOptional<z.ZodBoolean>;
10
+ }, z.core.$strip>;
11
+ export declare const updateVariantSchema: z.ZodObject<{
12
+ sku: z.ZodOptional<z.ZodString>;
13
+ name: z.ZodOptional<z.ZodString>;
14
+ thumbnailUrl: z.ZodOptional<z.ZodString>;
15
+ price: z.ZodOptional<z.ZodNumber>;
16
+ trackInventory: z.ZodOptional<z.ZodBoolean>;
17
+ lowStockThreshold: z.ZodOptional<z.ZodNumber>;
18
+ isActive: z.ZodOptional<z.ZodBoolean>;
19
+ }, z.core.$strip>;
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ export const createVariantSchema = z.object({
3
+ sku: z.string().min(1),
4
+ name: z.string().optional(),
5
+ thumbnailUrl: z.url().optional(),
6
+ price: z.number().positive(), // Price in Naira
7
+ trackInventory: z.boolean().optional(),
8
+ lowStockThreshold: z.number().int().nonnegative().optional(),
9
+ isActive: z.boolean().optional(),
10
+ });
11
+ export const updateVariantSchema = z.object({
12
+ sku: z.string().min(1).optional(),
13
+ name: z.string().optional(),
14
+ thumbnailUrl: z.string().url().optional(),
15
+ price: z.number().positive().optional(), // Price in Naira
16
+ trackInventory: z.boolean().optional(),
17
+ lowStockThreshold: z.number().int().nonnegative().optional(),
18
+ isActive: z.boolean().optional(),
19
+ });
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ export declare const createWarehouseSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ address: z.ZodOptional<z.ZodString>;
5
+ city: z.ZodOptional<z.ZodString>;
6
+ state: z.ZodOptional<z.ZodString>;
7
+ isActive: z.ZodOptional<z.ZodBoolean>;
8
+ }, z.core.$strip>;
9
+ export declare const updateWarehouseSchema: z.ZodObject<{
10
+ name: z.ZodOptional<z.ZodString>;
11
+ address: z.ZodOptional<z.ZodString>;
12
+ city: z.ZodOptional<z.ZodString>;
13
+ state: z.ZodOptional<z.ZodString>;
14
+ isActive: z.ZodOptional<z.ZodBoolean>;
15
+ }, z.core.$strip>;
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ export const createWarehouseSchema = z.object({
3
+ name: z.string().min(1),
4
+ address: z.string().optional(),
5
+ city: z.string().optional(),
6
+ state: z.string().optional(),
7
+ isActive: z.boolean().optional(),
8
+ });
9
+ export const updateWarehouseSchema = z.object({
10
+ name: z.string().min(1).optional(),
11
+ address: z.string().optional(),
12
+ city: z.string().optional(),
13
+ state: z.string().optional(),
14
+ isActive: z.boolean().optional(),
15
+ });