@instockng/api-client 1.0.8 → 1.0.10

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 (193) hide show
  1. package/dist/fetchers/brands.d.ts +1 -1
  2. package/dist/fetchers/carts.d.ts +85 -47
  3. package/dist/fetchers/delivery-zones.d.ts +2 -0
  4. package/dist/fetchers/orders.d.ts +26 -14
  5. package/dist/fetchers/products.d.ts +14 -6
  6. package/dist/hooks/admin/abandoned-carts.d.ts +18 -10
  7. package/dist/hooks/admin/brands.d.ts +4 -4
  8. package/dist/hooks/admin/customers.d.ts +13 -7
  9. package/dist/hooks/admin/delivery-zones.d.ts +23 -15
  10. package/dist/hooks/admin/discount-codes.d.ts +10 -10
  11. package/dist/hooks/admin/inventory.d.ts +4 -0
  12. package/dist/hooks/admin/orders.d.ts +78 -42
  13. package/dist/hooks/admin/products.d.ts +14 -6
  14. package/dist/hooks/admin/stats.d.ts +13 -7
  15. package/dist/hooks/admin/variants.d.ts +5 -5
  16. package/dist/hooks/admin/warehouses.d.ts +11 -7
  17. package/dist/hooks/public/brands.d.ts +1 -1
  18. package/dist/hooks/public/carts.d.ts +85 -47
  19. package/dist/hooks/public/delivery-zones.d.ts +2 -0
  20. package/dist/hooks/public/orders.d.ts +26 -14
  21. package/dist/hooks/public/products.d.ts +14 -6
  22. package/dist/rpc-client.d.ts +335 -187
  23. package/package.json +1 -1
  24. package/dist/apps/backend/src/generated/zod/index.d.ts +0 -1114
  25. package/dist/apps/backend/src/generated/zod/index.js +0 -670
  26. package/dist/apps/backend/src/http-app.d.ts +0 -40
  27. package/dist/apps/backend/src/http-app.js +0 -134
  28. package/dist/apps/backend/src/lib/brand-response.d.ts +0 -14
  29. package/dist/apps/backend/src/lib/brand-response.js +0 -8
  30. package/dist/apps/backend/src/lib/cart-helpers.d.ts +0 -282
  31. package/dist/apps/backend/src/lib/cart-helpers.js +0 -121
  32. package/dist/apps/backend/src/lib/cart-recovery.d.ts +0 -30
  33. package/dist/apps/backend/src/lib/cart-recovery.js +0 -147
  34. package/dist/apps/backend/src/lib/cart-response.d.ts +0 -121
  35. package/dist/apps/backend/src/lib/cart-response.js +0 -150
  36. package/dist/apps/backend/src/lib/clerk.d.ts +0 -18
  37. package/dist/apps/backend/src/lib/clerk.js +0 -190
  38. package/dist/apps/backend/src/lib/delivery-zone-response.d.ts +0 -64
  39. package/dist/apps/backend/src/lib/delivery-zone-response.js +0 -24
  40. package/dist/apps/backend/src/lib/discount-code-response.d.ts +0 -42
  41. package/dist/apps/backend/src/lib/discount-code-response.js +0 -19
  42. package/dist/apps/backend/src/lib/discount.d.ts +0 -20
  43. package/dist/apps/backend/src/lib/discount.js +0 -35
  44. package/dist/apps/backend/src/lib/inventory.d.ts +0 -26
  45. package/dist/apps/backend/src/lib/inventory.js +0 -160
  46. package/dist/apps/backend/src/lib/meta-capi.d.ts +0 -53
  47. package/dist/apps/backend/src/lib/meta-capi.js +0 -151
  48. package/dist/apps/backend/src/lib/openapi.d.ts +0 -36
  49. package/dist/apps/backend/src/lib/openapi.js +0 -69
  50. package/dist/apps/backend/src/lib/order-recovery.d.ts +0 -459
  51. package/dist/apps/backend/src/lib/order-recovery.js +0 -378
  52. package/dist/apps/backend/src/lib/order-response.d.ts +0 -138
  53. package/dist/apps/backend/src/lib/order-response.js +0 -61
  54. package/dist/apps/backend/src/lib/pricing.d.ts +0 -39
  55. package/dist/apps/backend/src/lib/pricing.js +0 -62
  56. package/dist/apps/backend/src/lib/prisma.d.ts +0 -9
  57. package/dist/apps/backend/src/lib/prisma.js +0 -30
  58. package/dist/apps/backend/src/lib/product-response.d.ts +0 -82
  59. package/dist/apps/backend/src/lib/product-response.js +0 -29
  60. package/dist/apps/backend/src/lib/sentry.d.ts +0 -48
  61. package/dist/apps/backend/src/lib/sentry.js +0 -180
  62. package/dist/apps/backend/src/lib/utils.d.ts +0 -32
  63. package/dist/apps/backend/src/lib/utils.js +0 -63
  64. package/dist/apps/backend/src/middleware/clerk-auth.d.ts +0 -8
  65. package/dist/apps/backend/src/middleware/clerk-auth.js +0 -89
  66. package/dist/apps/backend/src/middleware/cors.d.ts +0 -8
  67. package/dist/apps/backend/src/middleware/cors.js +0 -11
  68. package/dist/apps/backend/src/notifications/producers/meta-capi-producer.d.ts +0 -62
  69. package/dist/apps/backend/src/notifications/producers/meta-capi-producer.js +0 -180
  70. package/dist/apps/backend/src/notifications/producers/order-notification.d.ts +0 -9
  71. package/dist/apps/backend/src/notifications/producers/order-notification.js +0 -18
  72. package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.d.ts +0 -10
  73. package/dist/apps/backend/src/notifications/producers/prospect-recovery-notification.js +0 -11
  74. package/dist/apps/backend/src/routes/admin/abandoned-carts.d.ts +0 -605
  75. package/dist/apps/backend/src/routes/admin/abandoned-carts.js +0 -194
  76. package/dist/apps/backend/src/routes/admin/brands.d.ts +0 -175
  77. package/dist/apps/backend/src/routes/admin/brands.js +0 -118
  78. package/dist/apps/backend/src/routes/admin/customers.d.ts +0 -308
  79. package/dist/apps/backend/src/routes/admin/customers.js +0 -39
  80. package/dist/apps/backend/src/routes/admin/delivery-zones.d.ts +0 -446
  81. package/dist/apps/backend/src/routes/admin/delivery-zones.js +0 -300
  82. package/dist/apps/backend/src/routes/admin/discount-codes.d.ts +0 -478
  83. package/dist/apps/backend/src/routes/admin/discount-codes.js +0 -418
  84. package/dist/apps/backend/src/routes/admin/inventory.d.ts +0 -273
  85. package/dist/apps/backend/src/routes/admin/inventory.js +0 -199
  86. package/dist/apps/backend/src/routes/admin/orders.d.ts +0 -1780
  87. package/dist/apps/backend/src/routes/admin/orders.js +0 -552
  88. package/dist/apps/backend/src/routes/admin/products.d.ts +0 -860
  89. package/dist/apps/backend/src/routes/admin/products.js +0 -126
  90. package/dist/apps/backend/src/routes/admin/stats.d.ts +0 -290
  91. package/dist/apps/backend/src/routes/admin/stats.js +0 -55
  92. package/dist/apps/backend/src/routes/admin/variants.d.ts +0 -239
  93. package/dist/apps/backend/src/routes/admin/variants.js +0 -197
  94. package/dist/apps/backend/src/routes/admin/warehouses.d.ts +0 -373
  95. package/dist/apps/backend/src/routes/admin/warehouses.js +0 -123
  96. package/dist/apps/backend/src/routes/public/brands.d.ts +0 -40
  97. package/dist/apps/backend/src/routes/public/brands.js +0 -38
  98. package/dist/apps/backend/src/routes/public/carts.d.ts +0 -2657
  99. package/dist/apps/backend/src/routes/public/carts.js +0 -778
  100. package/dist/apps/backend/src/routes/public/delivery-zones.d.ts +0 -37
  101. package/dist/apps/backend/src/routes/public/delivery-zones.js +0 -64
  102. package/dist/apps/backend/src/routes/public/orders.d.ts +0 -609
  103. package/dist/apps/backend/src/routes/public/orders.js +0 -184
  104. package/dist/apps/backend/src/routes/public/products.d.ts +0 -449
  105. package/dist/apps/backend/src/routes/public/products.js +0 -133
  106. package/dist/apps/backend/src/types/index.d.ts +0 -43
  107. package/dist/apps/backend/src/types/index.js +0 -2
  108. package/dist/apps/backend/src/validators/brand.d.ts +0 -17
  109. package/dist/apps/backend/src/validators/brand.js +0 -15
  110. package/dist/apps/backend/src/validators/delivery-zone.d.ts +0 -35
  111. package/dist/apps/backend/src/validators/delivery-zone.js +0 -55
  112. package/dist/apps/backend/src/validators/discount-code.d.ts +0 -74
  113. package/dist/apps/backend/src/validators/discount-code.js +0 -50
  114. package/dist/apps/backend/src/validators/inventory.d.ts +0 -20
  115. package/dist/apps/backend/src/validators/inventory.js +0 -15
  116. package/dist/apps/backend/src/validators/order.d.ts +0 -58
  117. package/dist/apps/backend/src/validators/order.js +0 -62
  118. package/dist/apps/backend/src/validators/product.d.ts +0 -18
  119. package/dist/apps/backend/src/validators/product.js +0 -19
  120. package/dist/apps/backend/src/validators/variant.d.ts +0 -19
  121. package/dist/apps/backend/src/validators/variant.js +0 -19
  122. package/dist/apps/backend/src/validators/warehouse.d.ts +0 -15
  123. package/dist/apps/backend/src/validators/warehouse.js +0 -15
  124. package/dist/packages/api-client/src/backend-types.d.ts +0 -10
  125. package/dist/packages/api-client/src/backend-types.js +0 -10
  126. package/dist/packages/api-client/src/client.d.ts +0 -20
  127. package/dist/packages/api-client/src/client.js +0 -40
  128. package/dist/packages/api-client/src/enum-types.d.ts +0 -8
  129. package/dist/packages/api-client/src/enum-types.js +0 -5
  130. package/dist/packages/api-client/src/fetchers/brands.d.ts +0 -25
  131. package/dist/packages/api-client/src/fetchers/brands.js +0 -26
  132. package/dist/packages/api-client/src/fetchers/carts.d.ts +0 -2337
  133. package/dist/packages/api-client/src/fetchers/carts.js +0 -174
  134. package/dist/packages/api-client/src/fetchers/delivery-zones.d.ts +0 -30
  135. package/dist/packages/api-client/src/fetchers/delivery-zones.js +0 -26
  136. package/dist/packages/api-client/src/fetchers/index.d.ts +0 -22
  137. package/dist/packages/api-client/src/fetchers/index.js +0 -22
  138. package/dist/packages/api-client/src/fetchers/orders.d.ts +0 -544
  139. package/dist/packages/api-client/src/fetchers/orders.js +0 -44
  140. package/dist/packages/api-client/src/fetchers/products.d.ts +0 -386
  141. package/dist/packages/api-client/src/fetchers/products.js +0 -42
  142. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.d.ts +0 -535
  143. package/dist/packages/api-client/src/hooks/admin/abandoned-carts.js +0 -83
  144. package/dist/packages/api-client/src/hooks/admin/brands.d.ts +0 -79
  145. package/dist/packages/api-client/src/hooks/admin/brands.js +0 -108
  146. package/dist/packages/api-client/src/hooks/admin/customers.d.ts +0 -280
  147. package/dist/packages/api-client/src/hooks/admin/customers.js +0 -26
  148. package/dist/packages/api-client/src/hooks/admin/delivery-zones.d.ts +0 -278
  149. package/dist/packages/api-client/src/hooks/admin/delivery-zones.js +0 -176
  150. package/dist/packages/api-client/src/hooks/admin/discount-codes.d.ts +0 -299
  151. package/dist/packages/api-client/src/hooks/admin/discount-codes.js +0 -165
  152. package/dist/packages/api-client/src/hooks/admin/index.d.ts +0 -16
  153. package/dist/packages/api-client/src/hooks/admin/index.js +0 -16
  154. package/dist/packages/api-client/src/hooks/admin/inventory.d.ts +0 -224
  155. package/dist/packages/api-client/src/hooks/admin/inventory.js +0 -107
  156. package/dist/packages/api-client/src/hooks/admin/orders.d.ts +0 -1674
  157. package/dist/packages/api-client/src/hooks/admin/orders.js +0 -178
  158. package/dist/packages/api-client/src/hooks/admin/products.d.ts +0 -374
  159. package/dist/packages/api-client/src/hooks/admin/products.js +0 -89
  160. package/dist/packages/api-client/src/hooks/admin/stats.d.ts +0 -279
  161. package/dist/packages/api-client/src/hooks/admin/stats.js +0 -25
  162. package/dist/packages/api-client/src/hooks/admin/variants.d.ts +0 -115
  163. package/dist/packages/api-client/src/hooks/admin/variants.js +0 -127
  164. package/dist/packages/api-client/src/hooks/admin/warehouses.d.ts +0 -277
  165. package/dist/packages/api-client/src/hooks/admin/warehouses.js +0 -108
  166. package/dist/packages/api-client/src/hooks/public/brands.d.ts +0 -33
  167. package/dist/packages/api-client/src/hooks/public/brands.js +0 -30
  168. package/dist/packages/api-client/src/hooks/public/carts.d.ts +0 -2407
  169. package/dist/packages/api-client/src/hooks/public/carts.js +0 -213
  170. package/dist/packages/api-client/src/hooks/public/delivery-zones.d.ts +0 -36
  171. package/dist/packages/api-client/src/hooks/public/delivery-zones.js +0 -28
  172. package/dist/packages/api-client/src/hooks/public/index.d.ts +0 -10
  173. package/dist/packages/api-client/src/hooks/public/index.js +0 -10
  174. package/dist/packages/api-client/src/hooks/public/orders.d.ts +0 -563
  175. package/dist/packages/api-client/src/hooks/public/orders.js +0 -50
  176. package/dist/packages/api-client/src/hooks/public/products.d.ts +0 -398
  177. package/dist/packages/api-client/src/hooks/public/products.js +0 -47
  178. package/dist/packages/api-client/src/hooks/use-query-unwrapped.d.ts +0 -20
  179. package/dist/packages/api-client/src/hooks/use-query-unwrapped.js +0 -22
  180. package/dist/packages/api-client/src/hooks/useApiConfig.d.ts +0 -12
  181. package/dist/packages/api-client/src/hooks/useApiConfig.js +0 -14
  182. package/dist/packages/api-client/src/index.d.ts +0 -20
  183. package/dist/packages/api-client/src/index.js +0 -25
  184. package/dist/packages/api-client/src/provider.d.ts +0 -36
  185. package/dist/packages/api-client/src/provider.js +0 -54
  186. package/dist/packages/api-client/src/rpc-client.d.ts +0 -9639
  187. package/dist/packages/api-client/src/rpc-client.js +0 -78
  188. package/dist/packages/api-client/src/rpc-types.d.ts +0 -76
  189. package/dist/packages/api-client/src/rpc-types.js +0 -7
  190. package/dist/packages/api-client/src/types.d.ts +0 -34
  191. package/dist/packages/api-client/src/types.js +0 -16
  192. package/dist/packages/api-client/src/utils/query-keys.d.ts +0 -106
  193. package/dist/packages/api-client/src/utils/query-keys.js +0 -108
@@ -1,300 +0,0 @@
1
- import { Hono } from 'hono';
2
- import { zValidator } from '@hono/zod-validator';
3
- import { getPrismaClient } from '../../lib/prisma';
4
- import { createStateSchema, updateStateSchema, createDeliveryZoneSchema, updateDeliveryZoneSchema, } from '../../validators/delivery-zone';
5
- import { formatStateResponse } from '../../lib/delivery-zone-response';
6
- import { formatDeliveryZoneResponse } from '../../lib/delivery-zone-response';
7
- const app = new Hono()
8
- // List all states
9
- .get('/states', async (c) => {
10
- try {
11
- const prisma = getPrismaClient(c.env.DATABASE_URL);
12
- const states = await prisma.state.findMany({
13
- where: { deletedAt: null },
14
- include: {
15
- deliveryZones: {
16
- where: { deletedAt: null },
17
- orderBy: { name: 'asc' },
18
- include: {
19
- brand: true,
20
- state: true,
21
- },
22
- },
23
- },
24
- orderBy: { name: 'asc' },
25
- });
26
- return c.json(states.map((s) => ({
27
- ...formatStateResponse(s),
28
- deliveryZones: s.deliveryZones.map(formatDeliveryZoneResponse),
29
- })));
30
- }
31
- catch (error) {
32
- console.error('Error fetching states:', error);
33
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to fetch states' } }, 500);
34
- }
35
- })
36
- // Create state
37
- .post('/states', zValidator('json', createStateSchema), async (c) => {
38
- try {
39
- const input = c.req.valid('json');
40
- const prisma = getPrismaClient(c.env.DATABASE_URL);
41
- // Check if state name already exists
42
- const existing = await prisma.state.findFirst({
43
- where: { name: input.name, deletedAt: null },
44
- });
45
- if (existing) {
46
- return c.json({ error: { code: 'STATE_EXISTS', message: 'State with this name already exists' } }, 400);
47
- }
48
- const state = await prisma.state.create({
49
- data: {
50
- name: input.name,
51
- isActive: input.isActive ?? true,
52
- },
53
- });
54
- return c.json(formatStateResponse(state), 201);
55
- }
56
- catch (error) {
57
- console.error('Error creating state:', error);
58
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to create state' } }, 500);
59
- }
60
- })
61
- // Update state
62
- .patch('/states/:id', zValidator('json', updateStateSchema), async (c) => {
63
- try {
64
- const stateId = c.req.param('id');
65
- const input = c.req.valid('json');
66
- const prisma = getPrismaClient(c.env.DATABASE_URL);
67
- const state = await prisma.state.findFirst({
68
- where: { id: stateId, deletedAt: null },
69
- });
70
- if (!state) {
71
- return c.json({ error: { code: 'STATE_NOT_FOUND', message: 'State not found' } }, 404);
72
- }
73
- // Check for name conflicts if name is being updated
74
- if (input.name && input.name !== state.name) {
75
- const existing = await prisma.state.findFirst({
76
- where: { name: input.name, deletedAt: null, id: { not: stateId } },
77
- });
78
- if (existing) {
79
- return c.json({ error: { code: 'STATE_EXISTS', message: 'State with this name already exists' } }, 400);
80
- }
81
- }
82
- const updated = await prisma.state.update({
83
- where: { id: stateId },
84
- data: {
85
- name: input.name,
86
- isActive: input.isActive,
87
- },
88
- });
89
- return c.json(formatStateResponse(updated));
90
- }
91
- catch (error) {
92
- console.error('Error updating state:', error);
93
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to update state' } }, 500);
94
- }
95
- })
96
- // Soft delete state
97
- .delete('/states/:id', async (c) => {
98
- try {
99
- const stateId = c.req.param('id');
100
- const prisma = getPrismaClient(c.env.DATABASE_URL);
101
- const state = await prisma.state.findFirst({
102
- where: { id: stateId, deletedAt: null },
103
- });
104
- if (!state) {
105
- return c.json({ error: { code: 'STATE_NOT_FOUND', message: 'State not found' } }, 404);
106
- }
107
- // Soft delete zones in this state as well
108
- await prisma.$transaction([
109
- prisma.deliveryZone.updateMany({
110
- where: { stateId, deletedAt: null },
111
- data: { deletedAt: new Date() },
112
- }),
113
- prisma.state.update({
114
- where: { id: stateId },
115
- data: { deletedAt: new Date() },
116
- }),
117
- ]);
118
- return c.status(204);
119
- }
120
- catch (error) {
121
- console.error('Error deleting state:', error);
122
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to delete state' } }, 500);
123
- }
124
- })
125
- // ============ DELIVERY ZONES ============
126
- // List delivery zones with optional filters
127
- .get('/zones', async (c) => {
128
- try {
129
- const prisma = getPrismaClient(c.env.DATABASE_URL);
130
- const stateId = c.req.query('stateId');
131
- const brandId = c.req.query('brandId');
132
- const zones = await prisma.deliveryZone.findMany({
133
- where: {
134
- deletedAt: null,
135
- ...(stateId && { stateId }),
136
- ...(brandId && { brandId }),
137
- },
138
- include: {
139
- state: true,
140
- brand: true,
141
- },
142
- orderBy: [{ state: { name: 'asc' } }, { name: 'asc' }],
143
- });
144
- return c.json(zones.map(formatDeliveryZoneResponse));
145
- }
146
- catch (error) {
147
- console.error('Error fetching delivery zones:', error);
148
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to fetch delivery zones' } }, 500);
149
- }
150
- })
151
- // Create delivery zone
152
- .post('/zones', zValidator('json', createDeliveryZoneSchema), async (c) => {
153
- try {
154
- const input = c.req.valid('json');
155
- const prisma = getPrismaClient(c.env.DATABASE_URL);
156
- // Validate state exists
157
- const state = await prisma.state.findFirst({
158
- where: { id: input.stateId, deletedAt: null },
159
- });
160
- if (!state) {
161
- return c.json({ error: { code: 'STATE_NOT_FOUND', message: 'State not found' } }, 404);
162
- }
163
- // Validate brand if provided
164
- if (input.brandId) {
165
- const brand = await prisma.brand.findFirst({
166
- where: { id: input.brandId, deletedAt: null },
167
- });
168
- if (!brand) {
169
- return c.json({ error: { code: 'BRAND_NOT_FOUND', message: 'Brand not found' } }, 404);
170
- }
171
- }
172
- // Check for duplicate zone name in this state
173
- const existing = await prisma.deliveryZone.findFirst({
174
- where: {
175
- stateId: input.stateId,
176
- brandId: input.brandId ?? null,
177
- name: input.name,
178
- deletedAt: null,
179
- },
180
- });
181
- if (existing) {
182
- return c.json({ error: { code: 'ZONE_EXISTS', message: 'Zone with this name already exists in this state' } }, 400);
183
- }
184
- // Enforce waybillOnly => allowCOD = false
185
- const allowCOD = input.waybillOnly ? false : (input.allowCOD ?? true);
186
- const zone = await prisma.deliveryZone.create({
187
- data: {
188
- stateId: input.stateId,
189
- brandId: input.brandId ?? null,
190
- name: input.name,
191
- deliveryCost: input.deliveryCost,
192
- freeShippingThreshold: input.freeShippingThreshold ?? null,
193
- allowCOD,
194
- allowOnline: input.allowOnline ?? true,
195
- waybillOnly: input.waybillOnly ?? false,
196
- estimatedDays: input.estimatedDays ?? null,
197
- isActive: input.isActive ?? true,
198
- },
199
- include: {
200
- state: true,
201
- brand: true,
202
- },
203
- });
204
- return c.json(formatDeliveryZoneResponse(zone), 201);
205
- }
206
- catch (error) {
207
- console.error('Error creating delivery zone:', error);
208
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to create delivery zone' } }, 500);
209
- }
210
- })
211
- // Update delivery zone
212
- .patch('/zones/:id', zValidator('json', updateDeliveryZoneSchema), async (c) => {
213
- try {
214
- const zoneId = c.req.param('id');
215
- const input = c.req.valid('json');
216
- const prisma = getPrismaClient(c.env.DATABASE_URL);
217
- const zone = await prisma.deliveryZone.findFirst({
218
- where: { id: zoneId, deletedAt: null },
219
- });
220
- if (!zone) {
221
- return c.json({ error: { code: 'ZONE_NOT_FOUND', message: 'Delivery zone not found' } }, 404);
222
- }
223
- // Check for name conflicts if name is being updated
224
- if (input.name && input.name !== zone.name) {
225
- const existing = await prisma.deliveryZone.findFirst({
226
- where: {
227
- stateId: zone.stateId,
228
- brandId: zone.brandId,
229
- name: input.name,
230
- deletedAt: null,
231
- id: { not: zoneId },
232
- },
233
- });
234
- if (existing) {
235
- return c.json({ error: { code: 'ZONE_EXISTS', message: 'Zone with this name already exists in this state' } }, 400);
236
- }
237
- }
238
- // Build update data
239
- const updateData = {};
240
- if (input.name !== undefined)
241
- updateData.name = input.name;
242
- if (input.deliveryCost !== undefined)
243
- updateData.deliveryCost = input.deliveryCost;
244
- if (input.freeShippingThreshold !== undefined)
245
- updateData.freeShippingThreshold = input.freeShippingThreshold;
246
- if (input.allowOnline !== undefined)
247
- updateData.allowOnline = input.allowOnline;
248
- if (input.estimatedDays !== undefined)
249
- updateData.estimatedDays = input.estimatedDays;
250
- if (input.isActive !== undefined)
251
- updateData.isActive = input.isActive;
252
- // Handle waybillOnly and allowCOD together
253
- if (input.waybillOnly !== undefined) {
254
- updateData.waybillOnly = input.waybillOnly;
255
- if (input.waybillOnly) {
256
- updateData.allowCOD = false;
257
- }
258
- else if (input.allowCOD !== undefined) {
259
- updateData.allowCOD = input.allowCOD;
260
- }
261
- }
262
- else if (input.allowCOD !== undefined) {
263
- updateData.allowCOD = input.allowCOD;
264
- }
265
- const updated = await prisma.deliveryZone.update({
266
- where: { id: zoneId },
267
- data: updateData,
268
- include: {
269
- state: true,
270
- brand: true,
271
- },
272
- });
273
- return c.json(formatDeliveryZoneResponse(updated));
274
- }
275
- catch (error) {
276
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to update delivery zone' } }, 500);
277
- }
278
- })
279
- // Soft delete delivery zone
280
- .delete('/zones/:id', async (c) => {
281
- try {
282
- const zoneId = c.req.param('id');
283
- const prisma = getPrismaClient(c.env.DATABASE_URL);
284
- const zone = await prisma.deliveryZone.findFirst({
285
- where: { id: zoneId, deletedAt: null },
286
- });
287
- if (!zone) {
288
- return c.json({ error: { code: 'ZONE_NOT_FOUND', message: 'Delivery zone not found' } }, 404);
289
- }
290
- await prisma.deliveryZone.update({
291
- where: { id: zoneId },
292
- data: { deletedAt: new Date() },
293
- });
294
- return c.status(204);
295
- }
296
- catch (error) {
297
- return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to delete delivery zone' } }, 500);
298
- }
299
- });
300
- export default app;