@stacksjs/commerce 0.70.55 → 0.70.57

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 (297) hide show
  1. package/package.json +10 -7
  2. package/src/carts/destroy.ts +0 -54
  3. package/src/carts/fetch.ts +0 -20
  4. package/src/carts/index.ts +0 -13
  5. package/src/carts/store.ts +0 -75
  6. package/src/carts/update.ts +0 -78
  7. package/src/coupons/destroy.ts +0 -49
  8. package/src/coupons/fetch.ts +0 -510
  9. package/src/coupons/index.ts +0 -30
  10. package/src/coupons/store.ts +0 -46
  11. package/src/coupons/update.ts +0 -147
  12. package/src/customers/destroy.ts +0 -62
  13. package/src/customers/fetch.ts +0 -20
  14. package/src/customers/index.ts +0 -17
  15. package/src/customers/store.ts +0 -45
  16. package/src/customers/update.ts +0 -44
  17. package/src/devices/destroy.ts +0 -54
  18. package/src/devices/export.ts +0 -98
  19. package/src/devices/fetch.ts +0 -125
  20. package/src/devices/index.ts +0 -31
  21. package/src/devices/store.ts +0 -82
  22. package/src/devices/update.ts +0 -125
  23. package/src/errors/destroy.ts +0 -54
  24. package/src/errors/fetch.ts +0 -197
  25. package/src/errors/index.ts +0 -28
  26. package/src/errors/update.ts +0 -116
  27. package/src/gift-cards/destroy.ts +0 -87
  28. package/src/gift-cards/fetch.ts +0 -431
  29. package/src/gift-cards/index.ts +0 -26
  30. package/src/gift-cards/store.ts +0 -56
  31. package/src/gift-cards/update.ts +0 -102
  32. package/src/index.ts +0 -78
  33. package/src/orders/destroy.ts +0 -111
  34. package/src/orders/events.ts +0 -121
  35. package/src/orders/export.ts +0 -158
  36. package/src/orders/fetch.ts +0 -379
  37. package/src/orders/guards.ts +0 -261
  38. package/src/orders/index.ts +0 -91
  39. package/src/orders/place-order.ts +0 -274
  40. package/src/orders/store.ts +0 -51
  41. package/src/orders/totals.ts +0 -190
  42. package/src/orders/update.ts +0 -164
  43. package/src/orders/webhook.ts +0 -312
  44. package/src/payments/destroy.ts +0 -56
  45. package/src/payments/fetch.ts +0 -288
  46. package/src/payments/index.ts +0 -16
  47. package/src/payments/store.ts +0 -63
  48. package/src/payments/update.ts +0 -52
  49. package/src/product.ts +0 -0
  50. package/src/products/categories/destroy.ts +0 -103
  51. package/src/products/categories/fetch.ts +0 -285
  52. package/src/products/categories/index.ts +0 -36
  53. package/src/products/categories/store.ts +0 -87
  54. package/src/products/categories/update.ts +0 -251
  55. package/src/products/index.ts +0 -35
  56. package/src/products/items/destroy.ts +0 -54
  57. package/src/products/items/fetch.ts +0 -282
  58. package/src/products/items/index.ts +0 -26
  59. package/src/products/items/store.ts +0 -84
  60. package/src/products/items/update.ts +0 -324
  61. package/src/products/manufacturers/destroy.ts +0 -56
  62. package/src/products/manufacturers/fetch.ts +0 -117
  63. package/src/products/manufacturers/index.ts +0 -24
  64. package/src/products/manufacturers/store.ts +0 -82
  65. package/src/products/manufacturers/update.ts +0 -113
  66. package/src/products/reviews/destroy.ts +0 -56
  67. package/src/products/reviews/fetch.ts +0 -63
  68. package/src/products/reviews/index.ts +0 -25
  69. package/src/products/reviews/store.ts +0 -46
  70. package/src/products/reviews/update.ts +0 -82
  71. package/src/products/units/destroy.ts +0 -56
  72. package/src/products/units/fetch.ts +0 -20
  73. package/src/products/units/index.ts +0 -13
  74. package/src/products/units/store.ts +0 -162
  75. package/src/products/units/update.ts +0 -159
  76. package/src/products/variants/destroy.ts +0 -56
  77. package/src/products/variants/fetch.ts +0 -20
  78. package/src/products/variants/index.ts +0 -21
  79. package/src/products/variants/store.ts +0 -136
  80. package/src/products/variants/update.ts +0 -104
  81. package/src/receipts/destroy.ts +0 -54
  82. package/src/receipts/export.ts +0 -0
  83. package/src/receipts/fetch.ts +0 -222
  84. package/src/receipts/index.ts +0 -24
  85. package/src/receipts/printer.ts +0 -69
  86. package/src/receipts/store.ts +0 -69
  87. package/src/receipts/update.ts +0 -124
  88. package/src/shippings/delivery-routes/destroy.ts +0 -54
  89. package/src/shippings/delivery-routes/fetch.ts +0 -42
  90. package/src/shippings/delivery-routes/index.ts +0 -26
  91. package/src/shippings/delivery-routes/store.ts +0 -69
  92. package/src/shippings/delivery-routes/update.ts +0 -120
  93. package/src/shippings/digital-deliveries/destroy.ts +0 -111
  94. package/src/shippings/digital-deliveries/fetch.ts +0 -20
  95. package/src/shippings/digital-deliveries/index.ts +0 -26
  96. package/src/shippings/digital-deliveries/store.ts +0 -76
  97. package/src/shippings/digital-deliveries/update.ts +0 -129
  98. package/src/shippings/drivers/destroy.ts +0 -78
  99. package/src/shippings/drivers/fetch.ts +0 -20
  100. package/src/shippings/drivers/index.ts +0 -24
  101. package/src/shippings/drivers/store.ts +0 -69
  102. package/src/shippings/drivers/update.ts +0 -117
  103. package/src/shippings/index.ts +0 -39
  104. package/src/shippings/license-keys/destroy.ts +0 -111
  105. package/src/shippings/license-keys/fetch.ts +0 -20
  106. package/src/shippings/license-keys/index.ts +0 -26
  107. package/src/shippings/license-keys/store.ts +0 -77
  108. package/src/shippings/license-keys/update.ts +0 -117
  109. package/src/shippings/shipping-methods/destroy.ts +0 -111
  110. package/src/shippings/shipping-methods/fetch.ts +0 -62
  111. package/src/shippings/shipping-methods/index.ts +0 -28
  112. package/src/shippings/shipping-methods/store.ts +0 -123
  113. package/src/shippings/shipping-methods/update.ts +0 -120
  114. package/src/shippings/shipping-rates/destroy.ts +0 -102
  115. package/src/shippings/shipping-rates/fetch.ts +0 -320
  116. package/src/shippings/shipping-rates/index.ts +0 -36
  117. package/src/shippings/shipping-rates/store.ts +0 -102
  118. package/src/shippings/shipping-rates/update.ts +0 -139
  119. package/src/shippings/shipping-zones/destroy.ts +0 -111
  120. package/src/shippings/shipping-zones/fetch.ts +0 -96
  121. package/src/shippings/shipping-zones/index.ts +0 -26
  122. package/src/shippings/shipping-zones/store.ts +0 -74
  123. package/src/shippings/shipping-zones/update.ts +0 -156
  124. package/src/tax/destroy.ts +0 -54
  125. package/src/tax/fetch.ts +0 -20
  126. package/src/tax/index.ts +0 -24
  127. package/src/tax/store.ts +0 -69
  128. package/src/tax/update.ts +0 -119
  129. package/src/tests/coupons.test.ts +0 -90
  130. package/src/tests/customers.test.ts +0 -39
  131. package/src/tests/device.test.ts +0 -111
  132. package/src/tests/digitals.test.ts +0 -31
  133. package/src/tests/drivers.test.ts +0 -25
  134. package/src/tests/gift-cards.test.ts +0 -36
  135. package/src/tests/license.test.ts +0 -31
  136. package/src/tests/manufacturers.test.ts +0 -80
  137. package/src/tests/orders.test.ts +0 -25
  138. package/src/tests/payments.test.ts +0 -75
  139. package/src/tests/rates.test.ts +0 -367
  140. package/src/tests/receipts.test.ts +0 -287
  141. package/src/tests/restaurant.test.ts +0 -522
  142. package/src/tests/reviews.test.ts +0 -165
  143. package/src/tests/routes.test.ts +0 -51
  144. package/src/tests/setup.ts +0 -149
  145. package/src/tests/shipping.test.ts +0 -88
  146. package/src/tests/tax.test.ts +0 -25
  147. package/src/tests/units.test.ts +0 -110
  148. package/src/tests/variants.test.ts +0 -133
  149. package/src/tests/waitlist.test.ts +0 -303
  150. package/src/tests/zones.test.ts +0 -86
  151. package/src/types.ts +0 -312
  152. package/src/utils/typed-stats.ts +0 -67
  153. package/src/waitlists/index.ts +0 -19
  154. package/src/waitlists/products/destroy.ts +0 -65
  155. package/src/waitlists/products/export.ts +0 -113
  156. package/src/waitlists/products/fetch.ts +0 -362
  157. package/src/waitlists/products/index.ts +0 -33
  158. package/src/waitlists/products/store.ts +0 -112
  159. package/src/waitlists/products/update.ts +0 -125
  160. package/src/waitlists/restaurant/destroy.ts +0 -65
  161. package/src/waitlists/restaurant/export.ts +0 -107
  162. package/src/waitlists/restaurant/fetch.ts +0 -538
  163. package/src/waitlists/restaurant/index.ts +0 -43
  164. package/src/waitlists/restaurant/store.ts +0 -109
  165. package/src/waitlists/restaurant/update.ts +0 -198
  166. /package/dist/{src/coupons → coupons}/destroy.d.ts +0 -0
  167. /package/dist/{src/coupons → coupons}/fetch.d.ts +0 -0
  168. /package/dist/{src/coupons → coupons}/index.d.ts +0 -0
  169. /package/dist/{src/coupons → coupons}/store.d.ts +0 -0
  170. /package/dist/{src/coupons → coupons}/update.d.ts +0 -0
  171. /package/dist/{src/customers → customers}/destroy.d.ts +0 -0
  172. /package/dist/{src/customers → customers}/fetch.d.ts +0 -0
  173. /package/dist/{src/customers → customers}/index.d.ts +0 -0
  174. /package/dist/{src/customers → customers}/store.d.ts +0 -0
  175. /package/dist/{src/customers → customers}/update.d.ts +0 -0
  176. /package/dist/{src/devices → devices}/destroy.d.ts +0 -0
  177. /package/dist/{src/devices → devices}/export.d.ts +0 -0
  178. /package/dist/{src/devices → devices}/fetch.d.ts +0 -0
  179. /package/dist/{src/devices → devices}/index.d.ts +0 -0
  180. /package/dist/{src/devices → devices}/store.d.ts +0 -0
  181. /package/dist/{src/devices → devices}/update.d.ts +0 -0
  182. /package/dist/{src/errors → errors}/destroy.d.ts +0 -0
  183. /package/dist/{src/errors → errors}/fetch.d.ts +0 -0
  184. /package/dist/{src/errors → errors}/index.d.ts +0 -0
  185. /package/dist/{src/errors → errors}/update.d.ts +0 -0
  186. /package/dist/{src/gift-cards → gift-cards}/destroy.d.ts +0 -0
  187. /package/dist/{src/gift-cards → gift-cards}/fetch.d.ts +0 -0
  188. /package/dist/{src/gift-cards → gift-cards}/index.d.ts +0 -0
  189. /package/dist/{src/gift-cards → gift-cards}/store.d.ts +0 -0
  190. /package/dist/{src/gift-cards → gift-cards}/update.d.ts +0 -0
  191. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  192. /package/dist/{src/orders → orders}/destroy.d.ts +0 -0
  193. /package/dist/{src/orders → orders}/events.d.ts +0 -0
  194. /package/dist/{src/orders → orders}/export.d.ts +0 -0
  195. /package/dist/{src/orders → orders}/fetch.d.ts +0 -0
  196. /package/dist/{src/orders → orders}/guards.d.ts +0 -0
  197. /package/dist/{src/orders → orders}/index.d.ts +0 -0
  198. /package/dist/{src/orders → orders}/place-order.d.ts +0 -0
  199. /package/dist/{src/orders → orders}/store.d.ts +0 -0
  200. /package/dist/{src/orders → orders}/totals.d.ts +0 -0
  201. /package/dist/{src/orders → orders}/update.d.ts +0 -0
  202. /package/dist/{src/orders → orders}/webhook.d.ts +0 -0
  203. /package/dist/{src/payments → payments}/destroy.d.ts +0 -0
  204. /package/dist/{src/payments → payments}/fetch.d.ts +0 -0
  205. /package/dist/{src/payments → payments}/index.d.ts +0 -0
  206. /package/dist/{src/payments → payments}/store.d.ts +0 -0
  207. /package/dist/{src/payments → payments}/update.d.ts +0 -0
  208. /package/dist/{src/products → products}/categories/destroy.d.ts +0 -0
  209. /package/dist/{src/products → products}/categories/fetch.d.ts +0 -0
  210. /package/dist/{src/products → products}/categories/index.d.ts +0 -0
  211. /package/dist/{src/products → products}/categories/store.d.ts +0 -0
  212. /package/dist/{src/products → products}/categories/update.d.ts +0 -0
  213. /package/dist/{src/products → products}/index.d.ts +0 -0
  214. /package/dist/{src/products → products}/items/destroy.d.ts +0 -0
  215. /package/dist/{src/products → products}/items/fetch.d.ts +0 -0
  216. /package/dist/{src/products → products}/items/index.d.ts +0 -0
  217. /package/dist/{src/products → products}/items/store.d.ts +0 -0
  218. /package/dist/{src/products → products}/items/update.d.ts +0 -0
  219. /package/dist/{src/products → products}/manufacturers/destroy.d.ts +0 -0
  220. /package/dist/{src/products → products}/manufacturers/fetch.d.ts +0 -0
  221. /package/dist/{src/products → products}/manufacturers/index.d.ts +0 -0
  222. /package/dist/{src/products → products}/manufacturers/store.d.ts +0 -0
  223. /package/dist/{src/products → products}/manufacturers/update.d.ts +0 -0
  224. /package/dist/{src/products → products}/reviews/destroy.d.ts +0 -0
  225. /package/dist/{src/products → products}/reviews/fetch.d.ts +0 -0
  226. /package/dist/{src/products → products}/reviews/index.d.ts +0 -0
  227. /package/dist/{src/products → products}/reviews/store.d.ts +0 -0
  228. /package/dist/{src/products → products}/reviews/update.d.ts +0 -0
  229. /package/dist/{src/products → products}/units/destroy.d.ts +0 -0
  230. /package/dist/{src/products → products}/units/fetch.d.ts +0 -0
  231. /package/dist/{src/products → products}/units/index.d.ts +0 -0
  232. /package/dist/{src/products → products}/units/store.d.ts +0 -0
  233. /package/dist/{src/products → products}/units/update.d.ts +0 -0
  234. /package/dist/{src/products → products}/variants/destroy.d.ts +0 -0
  235. /package/dist/{src/products → products}/variants/fetch.d.ts +0 -0
  236. /package/dist/{src/products → products}/variants/index.d.ts +0 -0
  237. /package/dist/{src/products → products}/variants/store.d.ts +0 -0
  238. /package/dist/{src/products → products}/variants/update.d.ts +0 -0
  239. /package/dist/{src/receipts → receipts}/destroy.d.ts +0 -0
  240. /package/dist/{src/receipts → receipts}/fetch.d.ts +0 -0
  241. /package/dist/{src/receipts → receipts}/index.d.ts +0 -0
  242. /package/dist/{src/receipts → receipts}/store.d.ts +0 -0
  243. /package/dist/{src/receipts → receipts}/update.d.ts +0 -0
  244. /package/dist/{src/shippings → shippings}/delivery-routes/destroy.d.ts +0 -0
  245. /package/dist/{src/shippings → shippings}/delivery-routes/fetch.d.ts +0 -0
  246. /package/dist/{src/shippings → shippings}/delivery-routes/index.d.ts +0 -0
  247. /package/dist/{src/shippings → shippings}/delivery-routes/store.d.ts +0 -0
  248. /package/dist/{src/shippings → shippings}/delivery-routes/update.d.ts +0 -0
  249. /package/dist/{src/shippings → shippings}/digital-deliveries/destroy.d.ts +0 -0
  250. /package/dist/{src/shippings → shippings}/digital-deliveries/fetch.d.ts +0 -0
  251. /package/dist/{src/shippings → shippings}/digital-deliveries/index.d.ts +0 -0
  252. /package/dist/{src/shippings → shippings}/digital-deliveries/store.d.ts +0 -0
  253. /package/dist/{src/shippings → shippings}/digital-deliveries/update.d.ts +0 -0
  254. /package/dist/{src/shippings → shippings}/drivers/destroy.d.ts +0 -0
  255. /package/dist/{src/shippings → shippings}/drivers/fetch.d.ts +0 -0
  256. /package/dist/{src/shippings → shippings}/drivers/index.d.ts +0 -0
  257. /package/dist/{src/shippings → shippings}/drivers/store.d.ts +0 -0
  258. /package/dist/{src/shippings → shippings}/drivers/update.d.ts +0 -0
  259. /package/dist/{src/shippings → shippings}/index.d.ts +0 -0
  260. /package/dist/{src/shippings → shippings}/license-keys/destroy.d.ts +0 -0
  261. /package/dist/{src/shippings → shippings}/license-keys/fetch.d.ts +0 -0
  262. /package/dist/{src/shippings → shippings}/license-keys/index.d.ts +0 -0
  263. /package/dist/{src/shippings → shippings}/license-keys/store.d.ts +0 -0
  264. /package/dist/{src/shippings → shippings}/license-keys/update.d.ts +0 -0
  265. /package/dist/{src/shippings → shippings}/shipping-methods/destroy.d.ts +0 -0
  266. /package/dist/{src/shippings → shippings}/shipping-methods/fetch.d.ts +0 -0
  267. /package/dist/{src/shippings → shippings}/shipping-methods/index.d.ts +0 -0
  268. /package/dist/{src/shippings → shippings}/shipping-methods/store.d.ts +0 -0
  269. /package/dist/{src/shippings → shippings}/shipping-methods/update.d.ts +0 -0
  270. /package/dist/{src/shippings → shippings}/shipping-rates/destroy.d.ts +0 -0
  271. /package/dist/{src/shippings → shippings}/shipping-rates/fetch.d.ts +0 -0
  272. /package/dist/{src/shippings → shippings}/shipping-rates/index.d.ts +0 -0
  273. /package/dist/{src/shippings → shippings}/shipping-rates/store.d.ts +0 -0
  274. /package/dist/{src/shippings → shippings}/shipping-rates/update.d.ts +0 -0
  275. /package/dist/{src/shippings → shippings}/shipping-zones/destroy.d.ts +0 -0
  276. /package/dist/{src/shippings → shippings}/shipping-zones/fetch.d.ts +0 -0
  277. /package/dist/{src/shippings → shippings}/shipping-zones/index.d.ts +0 -0
  278. /package/dist/{src/shippings → shippings}/shipping-zones/store.d.ts +0 -0
  279. /package/dist/{src/shippings → shippings}/shipping-zones/update.d.ts +0 -0
  280. /package/dist/{src/tax → tax}/destroy.d.ts +0 -0
  281. /package/dist/{src/tax → tax}/fetch.d.ts +0 -0
  282. /package/dist/{src/tax → tax}/index.d.ts +0 -0
  283. /package/dist/{src/tax → tax}/store.d.ts +0 -0
  284. /package/dist/{src/tax → tax}/update.d.ts +0 -0
  285. /package/dist/{src/types.d.ts → types.d.ts} +0 -0
  286. /package/dist/{src/utils → utils}/typed-stats.d.ts +0 -0
  287. /package/dist/{src/waitlists → waitlists}/index.d.ts +0 -0
  288. /package/dist/{src/waitlists → waitlists}/products/destroy.d.ts +0 -0
  289. /package/dist/{src/waitlists → waitlists}/products/fetch.d.ts +0 -0
  290. /package/dist/{src/waitlists → waitlists}/products/index.d.ts +0 -0
  291. /package/dist/{src/waitlists → waitlists}/products/store.d.ts +0 -0
  292. /package/dist/{src/waitlists → waitlists}/products/update.d.ts +0 -0
  293. /package/dist/{src/waitlists → waitlists}/restaurant/destroy.d.ts +0 -0
  294. /package/dist/{src/waitlists → waitlists}/restaurant/fetch.d.ts +0 -0
  295. /package/dist/{src/waitlists → waitlists}/restaurant/index.d.ts +0 -0
  296. /package/dist/{src/waitlists → waitlists}/restaurant/store.d.ts +0 -0
  297. /package/dist/{src/waitlists → waitlists}/restaurant/update.d.ts +0 -0
@@ -1,112 +0,0 @@
1
- type WaitlistProductJsonResponse = ModelRow<typeof WaitlistProduct>
2
- type NewWaitlistProduct = NewModelData<typeof WaitlistProduct>
3
- import { randomUUIDv7 } from 'bun'
4
- import { db } from '@stacksjs/database'
5
- import { formatDate } from '@stacksjs/orm'
6
-
7
- /**
8
- * Create a new waitlist product entry
9
- *
10
- * @param data Waitlist product data to store
11
- * @returns The newly created waitlist product record
12
- */
13
- export async function store(data: NewWaitlistProduct): Promise<WaitlistProductJsonResponse> {
14
- try {
15
- const d = data as Record<string, unknown>
16
- const waitlistData: Record<string, any> = {
17
- name: data.name,
18
- email: data.email,
19
- phone: data.phone,
20
- quantity: data.quantity ?? d.party_size,
21
- notification_preference: d.notification_preference,
22
- source: data.source,
23
- notes: data.notes,
24
- product_id: data.product_id,
25
- customer_id: data.customer_id,
26
- uuid: randomUUIDv7(),
27
- status: data.status || 'waiting',
28
- }
29
-
30
- if ((data as any).notified_at !== undefined)
31
- waitlistData.notified_at = typeof (data as any).notified_at === 'number' ? formatDate((data as any).notified_at) : (data as any).notified_at
32
-
33
- if ((data as any).purchased_at !== undefined)
34
- waitlistData.purchased_at = typeof (data as any).purchased_at === 'number' ? formatDate((data as any).purchased_at) : (data as any).purchased_at
35
-
36
- if ((data as any).cancelled_at !== undefined)
37
- waitlistData.cancelled_at = typeof (data as any).cancelled_at === 'number' ? formatDate((data as any).cancelled_at) : (data as any).cancelled_at
38
-
39
- const result = await db
40
- .insertInto('waitlist_products')
41
- .values(waitlistData)
42
- .returningAll()
43
- .executeTakeFirst()
44
-
45
- if (!result)
46
- throw new Error('Failed to create waitlist product')
47
-
48
- return result as WaitlistProductJsonResponse
49
- }
50
- catch (error) {
51
- if (error instanceof Error) {
52
- throw new TypeError(`Failed to create waitlist product: ${error.message}`)
53
- }
54
-
55
- throw error
56
- }
57
- }
58
-
59
- /**
60
- * Create multiple waitlist product entries at once
61
- *
62
- * @param data Array of waitlist product data to store
63
- * @returns Number of waitlist products created
64
- */
65
- export async function bulkStore(data: NewWaitlistProduct[]): Promise<number> {
66
- if (!data.length)
67
- return 0
68
-
69
- try {
70
- const waitlistDataArray = data.map((item) => {
71
- const i = item as Record<string, unknown>
72
- const entry: Record<string, any> = {
73
- name: item.name,
74
- email: item.email,
75
- phone: item.phone,
76
- quantity: item.quantity ?? i.party_size,
77
- notification_preference: i.notification_preference,
78
- source: item.source,
79
- notes: item.notes,
80
- product_id: item.product_id,
81
- customer_id: item.customer_id,
82
- uuid: randomUUIDv7(),
83
- status: item.status || 'waiting',
84
- }
85
-
86
- if ((item as any).notified_at !== undefined)
87
- entry.notified_at = typeof (item as any).notified_at === 'number' ? formatDate((item as any).notified_at) : (item as any).notified_at
88
-
89
- if ((item as any).purchased_at !== undefined)
90
- entry.purchased_at = typeof (item as any).purchased_at === 'number' ? formatDate((item as any).purchased_at) : (item as any).purchased_at
91
-
92
- if ((item as any).cancelled_at !== undefined)
93
- entry.cancelled_at = typeof (item as any).cancelled_at === 'number' ? formatDate((item as any).cancelled_at) : (item as any).cancelled_at
94
-
95
- return entry
96
- })
97
-
98
- const result = await db
99
- .insertInto('waitlist_products')
100
- .values(waitlistDataArray)
101
- .executeTakeFirst()
102
-
103
- return Number(result.numInsertedOrUpdatedRows)
104
- }
105
- catch (error) {
106
- if (error instanceof Error) {
107
- throw new TypeError(`Failed to create waitlist products in bulk: ${error.message}`)
108
- }
109
-
110
- throw error
111
- }
112
- }
@@ -1,125 +0,0 @@
1
- import { db } from '@stacksjs/database'
2
- import { formatDate } from '@stacksjs/orm'
3
- type WaitlistProductJsonResponse = ModelRow<typeof WaitlistProduct>
4
- type WaitlistProductUpdate = UpdateModelData<typeof WaitlistProduct>
5
-
6
- /**
7
- * Update a waitlist product
8
- *
9
- * @param id The id of the waitlist product to update
10
- * @param data The waitlist product data to update
11
- * @returns The updated waitlist product record
12
- */
13
- export async function update(id: number, data: WaitlistProductUpdate): Promise<WaitlistProductJsonResponse> {
14
- try {
15
- if (!id)
16
- throw new Error('Waitlist product ID is required for update')
17
-
18
- const d = data as Record<string, unknown>
19
- const result = await db
20
- .updateTable('waitlist_products')
21
- .set({
22
- name: data.name,
23
- email: data.email,
24
- phone: data.phone,
25
- quantity: data.quantity ?? d.party_size,
26
- notification_preference: d.notification_preference,
27
- source: data.source,
28
- notes: data.notes,
29
- status: data.status,
30
- product_id: data.product_id,
31
- customer_id: data.customer_id,
32
- notified_at: d.notified_at,
33
- purchased_at: d.purchased_at,
34
- cancelled_at: d.cancelled_at,
35
- updated_at: formatDate(new Date()),
36
- })
37
- .where('id', '=', id)
38
- .returningAll()
39
- .executeTakeFirst()
40
-
41
- if (!result)
42
- throw new Error('Failed to update waitlist product')
43
-
44
- return result as WaitlistProductJsonResponse
45
- }
46
- catch (error) {
47
- if (error instanceof Error) {
48
- throw new TypeError(`Failed to update waitlist product: ${error.message}`)
49
- }
50
-
51
- throw error
52
- }
53
- }
54
-
55
- /**
56
- * Update a waitlist product's status
57
- *
58
- * @param id The ID of the waitlist product
59
- * @param status The new status
60
- * @returns The updated waitlist product with the new status
61
- */
62
- export async function updateStatus(
63
- id: number,
64
- status: 'waiting' | 'purchased' | 'notified' | 'cancelled',
65
- ): Promise<WaitlistProductJsonResponse> {
66
- try {
67
- const result = await db
68
- .updateTable('waitlist_products')
69
- .set({
70
- status,
71
- updated_at: formatDate(new Date()),
72
- })
73
- .where('id', '=', id)
74
- .returningAll()
75
- .executeTakeFirst()
76
-
77
- if (!result)
78
- throw new Error('Failed to update waitlist product status')
79
-
80
- return result as WaitlistProductJsonResponse
81
- }
82
- catch (error) {
83
- if (error instanceof Error) {
84
- throw new TypeError(`Failed to update waitlist product status: ${error.message}`)
85
- }
86
-
87
- throw error
88
- }
89
- }
90
-
91
- /**
92
- * Update party size for a waitlist product
93
- *
94
- * @param id The ID of the waitlist product
95
- * @param partySize The updated party size
96
- * @returns The updated waitlist product
97
- */
98
- export async function updatePartySize(
99
- id: number,
100
- partySize: number,
101
- ): Promise<WaitlistProductJsonResponse> {
102
- try {
103
- const result = await db
104
- .updateTable('waitlist_products')
105
- .set({
106
- quantity: partySize,
107
- updated_at: formatDate(new Date()),
108
- })
109
- .where('id', '=', id)
110
- .returningAll()
111
- .executeTakeFirst()
112
-
113
- if (!result)
114
- throw new Error('Failed to update party size')
115
-
116
- return result as WaitlistProductJsonResponse
117
- }
118
- catch (error) {
119
- if (error instanceof Error) {
120
- throw new TypeError(`Failed to update party size: ${error.message}`)
121
- }
122
-
123
- throw error
124
- }
125
- }
@@ -1,65 +0,0 @@
1
- type WaitlistRestaurantJsonResponse = ModelRow<typeof WaitlistRestaurant>
2
- import { db } from '@stacksjs/database'
3
-
4
- /**
5
- * Delete a restaurant waitlist entry by ID
6
- *
7
- * @param id The ID of the restaurant waitlist entry to delete
8
- * @returns The deleted restaurant waitlist record
9
- */
10
- export async function destroy(id: number): Promise<WaitlistRestaurantJsonResponse | undefined> {
11
- try {
12
- // First get the restaurant waitlist entry to return it after deletion
13
- const waitlistEntry = await db
14
- .selectFrom('waitlist_restaurants')
15
- .where('id', '=', id)
16
- .selectAll()
17
- .executeTakeFirst()
18
-
19
- if (!waitlistEntry)
20
- return undefined
21
-
22
- // Delete the restaurant waitlist entry
23
- await db
24
- .deleteFrom('waitlist_restaurants')
25
- .where('id', '=', id)
26
- .execute()
27
-
28
- return waitlistEntry as WaitlistRestaurantJsonResponse
29
- }
30
- catch (error) {
31
- if (error instanceof Error) {
32
- throw new TypeError(`Failed to delete restaurant waitlist entry: ${error.message}`)
33
- }
34
-
35
- throw error
36
- }
37
- }
38
-
39
- /**
40
- * Delete multiple restaurant waitlist entries by their IDs
41
- *
42
- * @param ids Array of restaurant waitlist entry IDs to delete
43
- * @returns Number of restaurant waitlist entries deleted
44
- */
45
- export async function bulkDestroy(ids: number[]): Promise<number> {
46
- if (!ids.length)
47
- return 0
48
-
49
- try {
50
- // Delete all restaurant waitlist entries with the given IDs
51
- const result = await db
52
- .deleteFrom('waitlist_restaurants')
53
- .where('id', 'in', ids)
54
- .execute()
55
-
56
- return (result as any).length || 0
57
- }
58
- catch (error) {
59
- if (error instanceof Error) {
60
- throw new TypeError(`Failed to delete restaurant waitlist entries in bulk: ${error.message}`)
61
- }
62
-
63
- throw error
64
- }
65
- }
@@ -1,107 +0,0 @@
1
- type WaitlistRestaurantJsonResponse = ModelRow<typeof WaitlistRestaurant>
2
- import type { SpreadsheetWrapper } from 'ts-spreadsheets'
3
- import { createSpreadsheet } from 'ts-spreadsheets'
4
- import { fetchAll } from './fetch'
5
-
6
- /**
7
- * Represents the structure of an exported restaurant waitlist entry
8
- */
9
- export interface ExportedRestaurantWaitlist {
10
- 'ID': number
11
- 'Name': string
12
- 'Phone': string
13
- 'Party Size': number
14
- 'Table Preference': string
15
- 'Status': string
16
- 'Quoted Wait Time': number
17
- 'Actual Wait Time': number
18
- 'Check In Time': string
19
- 'Created At': string
20
- 'Notes': string
21
- }
22
-
23
- /**
24
- * Export restaurant waitlist entries to a spreadsheet
25
- * @param format The format of the spreadsheet (default is CSV)
26
- * @returns Spreadsheet object ready for download or storage
27
- */
28
- export async function exportRestaurantWaitlist(format: 'csv' | 'excel' = 'csv'): Promise<SpreadsheetWrapper> {
29
- // Fetch all restaurant waitlist entries
30
- const waitlistEntries = await fetchAll()
31
-
32
- // Prepare data for spreadsheet
33
- const spreadsheetData = prepareRestaurantWaitlistForExport(waitlistEntries)
34
-
35
- // Create and return spreadsheet
36
- return createSpreadsheet(spreadsheetData, { type: format })
37
- }
38
-
39
- /**
40
- * Prepare restaurant waitlist data for spreadsheet export
41
- * @param waitlistEntries Array of restaurant waitlist entry objects
42
- * @returns Spreadsheet data structure
43
- */
44
- function prepareRestaurantWaitlistForExport(waitlistEntries: WaitlistRestaurantJsonResponse[]) {
45
- // Define headings
46
- const headings: (keyof ExportedRestaurantWaitlist)[] = [
47
- 'ID',
48
- 'Name',
49
- 'Phone',
50
- 'Party Size',
51
- 'Table Preference',
52
- 'Status',
53
- 'Quoted Wait Time',
54
- 'Actual Wait Time',
55
- 'Check In Time',
56
- 'Created At',
57
- 'Notes',
58
- ]
59
-
60
- // Transform waitlist entries into export format
61
- const data = waitlistEntries.map((entry) => {
62
- return [
63
- entry.id,
64
- entry.name,
65
- entry.phone || 'N/A',
66
- entry.partySize,
67
- entry.tablePreference,
68
- entry.status,
69
- (entry as any).quoted_wait_time || 'N/A',
70
- (entry as any).actual_wait_time || 'N/A',
71
- entry.checkInTime || 'N/A',
72
- entry.created_at,
73
- (entry as any).notes || 'N/A',
74
- ]
75
- })
76
-
77
- return { headings, data }
78
- }
79
-
80
- /**
81
- * Export restaurant waitlist entries and automatically download
82
- * @param format The format of the spreadsheet (default is CSV)
83
- * @param filename Optional filename for the download
84
- * @returns Download response
85
- */
86
- export async function downloadRestaurantWaitlist(format: 'csv' | 'excel' = 'csv', filename?: string): Promise<Response> {
87
- const spreadsheet = await exportRestaurantWaitlist(format)
88
-
89
- // Use default filename if not provided
90
- const defaultFilename = `restaurant_waitlist_export_${new Date().toISOString().split('T')[0]}.${format}`
91
- return spreadsheet.download(filename || defaultFilename)
92
- }
93
-
94
- /**
95
- * Store restaurant waitlist export to disk
96
- * @param format The format of the spreadsheet (default is CSV)
97
- * @param path Optional path to store the file
98
- * @returns Path where the file is stored
99
- */
100
- export async function storeRestaurantWaitlistExport(format: 'csv' | 'excel' = 'csv', path?: string): Promise<void> {
101
- const spreadsheet = await exportRestaurantWaitlist(format)
102
-
103
- // Use default path and filename if not provided
104
- const defaultPath = `restaurant_waitlist_export_${new Date().toISOString().split('T')[0]}.${format}`
105
-
106
- spreadsheet.store(path || defaultPath)
107
- }