@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,82 +0,0 @@
1
- type PrintDeviceJsonResponse = ModelRow<typeof PrintDevice>
2
- type NewPrintDevice = NewModelData<typeof PrintDevice>
3
- import { randomUUIDv7 } from 'bun'
4
- import { db } from '@stacksjs/database'
5
-
6
- /**
7
- * Create a new print device
8
- *
9
- * @param data Print device data to store
10
- * @returns The newly created print device record
11
- */
12
- export async function store(data: NewPrintDevice): Promise<PrintDeviceJsonResponse | undefined> {
13
- try {
14
- // Prepare print device data
15
- const deviceData = {
16
- ...data,
17
- uuid: randomUUIDv7(),
18
- }
19
-
20
- // Insert the print device
21
- const result = await db
22
- .insertInto('print_devices')
23
- .values(deviceData as NewPrintDevice)
24
- .executeTakeFirst()
25
-
26
- const deviceId = Number(result.insertId) || Number(result.numInsertedOrUpdatedRows)
27
-
28
- // Retrieve the newly created print device
29
- const printDevice = await db
30
- .selectFrom('print_devices')
31
- .where('id', '=', deviceId)
32
- .selectAll()
33
- .executeTakeFirst()
34
-
35
- return printDevice as PrintDeviceJsonResponse | undefined
36
- }
37
- catch (error) {
38
- if (error instanceof Error) {
39
- throw new TypeError(`Failed to create print device: ${error.message}`)
40
- }
41
-
42
- throw error
43
- }
44
- }
45
-
46
- /**
47
- * Create multiple print devices at once
48
- *
49
- * @param data Array of print device data to store
50
- * @returns Number of print devices created
51
- */
52
- export async function bulkStore(data: NewPrintDevice[]): Promise<number> {
53
- if (!data.length)
54
- return 0
55
-
56
- let createdCount = 0
57
-
58
- try {
59
- for (const device of data) {
60
- const deviceData = {
61
- ...device,
62
- uuid: randomUUIDv7(),
63
- }
64
-
65
- await db
66
- .insertInto('print_devices')
67
- .values(deviceData as NewPrintDevice)
68
- .execute()
69
-
70
- createdCount++
71
- }
72
-
73
- return createdCount
74
- }
75
- catch (error) {
76
- if (error instanceof Error) {
77
- throw new TypeError(`Failed to create print devices in bulk: ${error.message}`)
78
- }
79
-
80
- throw error
81
- }
82
- }
@@ -1,125 +0,0 @@
1
- import { db } from '@stacksjs/database'
2
- import { formatDate } from '@stacksjs/orm'
3
- type PrintDeviceJsonResponse = ModelRow<typeof PrintDevice>
4
- type PrintDeviceUpdate = UpdateModelData<typeof PrintDevice>
5
- import { fetchById } from './fetch'
6
-
7
- /**
8
- * Update a print device by ID
9
- *
10
- * @param id The ID of the print device to update
11
- * @param data The updated print device data
12
- * @returns The updated print device record
13
- */
14
- export async function update(id: number, data: Omit<PrintDeviceUpdate, 'id'>): Promise<PrintDeviceJsonResponse | undefined> {
15
- // Check if print device exists
16
- const existingDevice = await fetchById(id)
17
-
18
- if (!existingDevice) {
19
- throw new Error(`Print device with ID ${id} not found`)
20
- }
21
-
22
- try {
23
- // Update the print device
24
- await db
25
- .updateTable('print_devices')
26
- .set({
27
- ...data,
28
- updated_at: formatDate(new Date()),
29
- })
30
- .where('id', '=', id)
31
- .execute()
32
-
33
- // Fetch and return the updated print device
34
- return await fetchById(id)
35
- }
36
- catch (error) {
37
- if (error instanceof Error) {
38
- throw new TypeError(`Failed to update print device: ${error.message}`)
39
- }
40
-
41
- throw error
42
- }
43
- }
44
-
45
- /**
46
- * Update a print device's status
47
- *
48
- * @param id The ID of the print device
49
- * @param status The new status
50
- * @returns The updated print device with the new status
51
- */
52
- export async function updateStatus(
53
- id: number,
54
- status: 'online' | 'offline' | 'warning',
55
- ): Promise<PrintDeviceJsonResponse | undefined> {
56
- // Check if print device exists
57
- const printDevice = await fetchById(id)
58
-
59
- if (!printDevice) {
60
- throw new Error(`Print device with ID ${id} not found`)
61
- }
62
-
63
- try {
64
- // Update the print device status
65
- await db
66
- .updateTable('print_devices')
67
- .set({
68
- status,
69
- updated_at: formatDate(new Date()),
70
- })
71
- .where('id', '=', id)
72
- .execute()
73
-
74
- // Fetch the updated print device
75
- return await fetchById(id)
76
- }
77
- catch (error) {
78
- if (error instanceof Error) {
79
- throw new TypeError(`Failed to update print device status: ${error.message}`)
80
- }
81
-
82
- throw error
83
- }
84
- }
85
-
86
- /**
87
- * Update print count for a print device
88
- *
89
- * @param id The ID of the print device
90
- * @param printCount The updated print count value
91
- * @returns The updated print device
92
- */
93
- export async function updatePrintCount(
94
- id: number,
95
- printCount?: number,
96
- ): Promise<PrintDeviceJsonResponse | undefined> {
97
- // Check if print device exists
98
- const printDevice = await fetchById(id)
99
-
100
- if (!printDevice) {
101
- throw new Error(`Print device with ID ${id} not found`)
102
- }
103
-
104
- try {
105
- // Update the print device
106
- await db
107
- .updateTable('print_devices')
108
- .set({
109
- print_count: printCount,
110
- updated_at: formatDate(new Date()),
111
- })
112
- .where('id', '=', id)
113
- .execute()
114
-
115
- // Fetch the updated print device
116
- return await fetchById(id)
117
- }
118
- catch (error) {
119
- if (error instanceof Error) {
120
- throw new TypeError(`Failed to update print count: ${error.message}`)
121
- }
122
-
123
- throw error
124
- }
125
- }
@@ -1,54 +0,0 @@
1
- import { db } from '@stacksjs/database'
2
- import { log } from '@stacksjs/logging'
3
-
4
- /**
5
- * Delete a single error by ID
6
- */
7
- export async function destroy(id: number): Promise<boolean> {
8
- try {
9
- await db
10
- .deleteFrom('errors')
11
- .where('id', '=', id)
12
- .execute()
13
- return true
14
- }
15
- catch (error) {
16
- log.error('[commerce/errors] destroy failed', { id, error })
17
- return false
18
- }
19
- }
20
-
21
- /**
22
- * Delete multiple errors by IDs
23
- */
24
- export async function bulkDestroy(ids: number[]): Promise<boolean> {
25
- try {
26
- await db
27
- .deleteFrom('errors')
28
- .where('id', 'in', ids)
29
- .execute()
30
- return true
31
- }
32
- catch (error) {
33
- log.error('[commerce/errors] bulkDestroy failed', { count: ids.length, error })
34
- return false
35
- }
36
- }
37
-
38
- /**
39
- * Delete all errors in a group (by type and message)
40
- */
41
- export async function destroyGroup(type: string, message: string): Promise<boolean> {
42
- try {
43
- await db
44
- .deleteFrom('errors')
45
- .where('type', '=', type)
46
- .where('message', '=', message)
47
- .execute()
48
- return true
49
- }
50
- catch (error) {
51
- log.error('[commerce/errors] destroyGroup failed', { type, message, error })
52
- return false
53
- }
54
- }
@@ -1,197 +0,0 @@
1
- import { db } from '@stacksjs/database'
2
-
3
- export interface ErrorRecord {
4
- id: number
5
- type: string
6
- message: string
7
- stack: string | null
8
- status: number | null
9
- additional_info: string | null
10
- created_at: string
11
- updated_at: string | null
12
- }
13
-
14
- export interface GroupedError {
15
- id: number
16
- type: string
17
- message: string
18
- stack: string | null
19
- status: string
20
- count: number
21
- first_seen: string
22
- last_seen: string
23
- error_ids: number[]
24
- }
25
-
26
- export interface ErrorStats {
27
- total: number
28
- unresolved: number
29
- resolved: number
30
- ignored: number
31
- last_24h: number
32
- trend: number
33
- }
34
-
35
- /**
36
- * Fetch a single error by ID
37
- */
38
- export async function fetchById(id: number): Promise<ErrorRecord | undefined> {
39
- return await db
40
- .selectFrom('errors')
41
- .where('id', '=', id)
42
- .selectAll()
43
- .executeTakeFirst() as unknown as ErrorRecord | undefined
44
- }
45
-
46
- /**
47
- * Fetch all errors (raw, ungrouped)
48
- */
49
- export async function fetchAll(): Promise<ErrorRecord[]> {
50
- return await db
51
- .selectFrom('errors')
52
- .selectAll()
53
- .orderBy('created_at', 'desc')
54
- .execute() as unknown as ErrorRecord[]
55
- }
56
-
57
- /**
58
- * Fetch errors grouped by type and message (Sentry-like behavior)
59
- * Same errors are aggregated instead of creating duplicate entries
60
- */
61
- export async function fetchGrouped(): Promise<GroupedError[]> {
62
- const errors = await db
63
- .selectFrom('errors')
64
- .selectAll()
65
- .orderBy('created_at', 'desc')
66
- .execute() as unknown as ErrorRecord[]
67
-
68
- // Group errors by type + message combination
69
- const groupMap = new Map<string, {
70
- errors: ErrorRecord[]
71
- firstSeen: Date
72
- lastSeen: Date
73
- }>()
74
-
75
- for (const error of errors) {
76
- const key = `${error.type}:${error.message}`
77
-
78
- if (!groupMap.has(key)) {
79
- groupMap.set(key, {
80
- errors: [],
81
- firstSeen: new Date(error.created_at),
82
- lastSeen: new Date(error.created_at),
83
- })
84
- }
85
-
86
- const group = groupMap.get(key)!
87
- group.errors.push(error)
88
-
89
- const errorDate = new Date(error.created_at)
90
- if (errorDate < group.firstSeen)
91
- group.firstSeen = errorDate
92
- if (errorDate > group.lastSeen)
93
- group.lastSeen = errorDate
94
- }
95
-
96
- // Convert to grouped error format
97
- const groupedErrors: GroupedError[] = []
98
-
99
- for (const [_, group] of groupMap) {
100
- const representative = group.errors[0]
101
- // Determine status - use latest non-null status or default to 'unresolved'
102
- const latestStatus = group.errors.find(e => e.status !== null)?.status
103
- let statusLabel = 'unresolved'
104
- if (latestStatus === 1)
105
- statusLabel = 'resolved'
106
- else if (latestStatus === 2)
107
- statusLabel = 'ignored'
108
-
109
- groupedErrors.push({
110
- id: representative.id,
111
- type: representative.type,
112
- message: representative.message,
113
- stack: representative.stack,
114
- status: statusLabel,
115
- count: group.errors.length,
116
- first_seen: group.firstSeen.toISOString(),
117
- last_seen: group.lastSeen.toISOString(),
118
- error_ids: group.errors.map(e => e.id),
119
- })
120
- }
121
-
122
- // Sort by last_seen descending
123
- groupedErrors.sort((a, b) => new Date(b.last_seen).getTime() - new Date(a.last_seen).getTime())
124
-
125
- return groupedErrors
126
- }
127
-
128
- /**
129
- * Fetch errors for a specific group (by type and message)
130
- */
131
- export async function fetchByGroup(type: string, message: string): Promise<ErrorRecord[]> {
132
- return await db
133
- .selectFrom('errors')
134
- .where('type', '=', type)
135
- .where('message', '=', message)
136
- .selectAll()
137
- .orderBy('created_at', 'desc')
138
- .execute() as unknown as ErrorRecord[]
139
- }
140
-
141
- /**
142
- * Fetch error statistics
143
- */
144
- export async function fetchStats(): Promise<ErrorStats> {
145
- const errors = await fetchAll()
146
- const now = new Date()
147
- const yesterday = new Date(now.getTime() - 24 * 60 * 60 * 1000)
148
- const twoDaysAgo = new Date(now.getTime() - 48 * 60 * 60 * 1000)
149
-
150
- const last24h = errors.filter(e => new Date(e.created_at) >= yesterday).length
151
- const previous24h = errors.filter(e => {
152
- const date = new Date(e.created_at)
153
- return date >= twoDaysAgo && date < yesterday
154
- }).length
155
-
156
- // Calculate trend (percentage change)
157
- const trend = previous24h === 0
158
- ? (last24h > 0 ? 100 : 0)
159
- : Math.round(((last24h - previous24h) / previous24h) * 100)
160
-
161
- return {
162
- total: errors.length,
163
- unresolved: errors.filter(e => e.status === null || e.status === 0).length,
164
- resolved: errors.filter(e => e.status === 1).length,
165
- ignored: errors.filter(e => e.status === 2).length,
166
- last_24h: last24h,
167
- trend,
168
- }
169
- }
170
-
171
- /**
172
- * Fetch error timeline (hourly counts for the last 24 hours)
173
- */
174
- export async function fetchTimeline(): Promise<{ hour: string, count: number }[]> {
175
- const errors = await fetchAll()
176
- const now = new Date()
177
- const timeline: { hour: string, count: number }[] = []
178
-
179
- // Create hourly buckets for last 24 hours
180
- for (let i = 23; i >= 0; i--) {
181
- const hourStart = new Date(now.getTime() - i * 60 * 60 * 1000)
182
- hourStart.setMinutes(0, 0, 0)
183
- const hourEnd = new Date(hourStart.getTime() + 60 * 60 * 1000)
184
-
185
- const count = errors.filter(e => {
186
- const date = new Date(e.created_at)
187
- return date >= hourStart && date < hourEnd
188
- }).length
189
-
190
- timeline.push({
191
- hour: hourStart.toISOString(),
192
- count,
193
- })
194
- }
195
-
196
- return timeline
197
- }
@@ -1,28 +0,0 @@
1
- export {
2
- bulkDestroy,
3
- destroy,
4
- destroyGroup,
5
- } from './destroy'
6
-
7
- export {
8
- fetchAll,
9
- fetchByGroup,
10
- fetchById,
11
- fetchGrouped,
12
- fetchStats,
13
- fetchTimeline,
14
- } from './fetch'
15
-
16
- export type {
17
- ErrorRecord,
18
- ErrorStats,
19
- GroupedError,
20
- } from './fetch'
21
-
22
- export {
23
- bulkUpdateStatus,
24
- ignoreGroup,
25
- resolveGroup,
26
- unresolveGroup,
27
- update,
28
- } from './update'
@@ -1,116 +0,0 @@
1
- import { db } from '@stacksjs/database'
2
- import { sql } from '@stacksjs/database'
3
- import { log } from '@stacksjs/logging'
4
-
5
- export interface UpdateErrorData {
6
- status?: number
7
- additional_info?: string
8
- }
9
-
10
- /**
11
- * Update a single error by ID
12
- */
13
- export async function update(id: number, data: UpdateErrorData): Promise<boolean> {
14
- try {
15
- await db
16
- .updateTable('errors')
17
- .set({
18
- ...data,
19
- updated_at: sql.raw('CURRENT_TIMESTAMP'),
20
- })
21
- .where('id', '=', id)
22
- .execute()
23
- return true
24
- }
25
- catch (error) {
26
- log.error('[commerce/errors] update failed', { id, error })
27
- return false
28
- }
29
- }
30
-
31
- /**
32
- * Update multiple errors by IDs (for bulk status updates on grouped errors)
33
- */
34
- export async function bulkUpdateStatus(ids: number[], status: number): Promise<boolean> {
35
- try {
36
- await db
37
- .updateTable('errors')
38
- .set({
39
- status,
40
- updated_at: sql.raw('CURRENT_TIMESTAMP'),
41
- })
42
- .where('id', 'in', ids)
43
- .execute()
44
- return true
45
- }
46
- catch (error) {
47
- log.error('[commerce/errors] bulkUpdateStatus failed', { count: ids.length, status, error })
48
- return false
49
- }
50
- }
51
-
52
- /**
53
- * Resolve a grouped error (sets status = 1 for all errors in the group)
54
- */
55
- export async function resolveGroup(type: string, message: string): Promise<boolean> {
56
- try {
57
- await db
58
- .updateTable('errors')
59
- .set({
60
- status: 1,
61
- updated_at: sql.raw('CURRENT_TIMESTAMP'),
62
- })
63
- .where('type', '=', type)
64
- .where('message', '=', message)
65
- .execute()
66
- return true
67
- }
68
- catch (error) {
69
- log.error('[commerce/errors] resolveGroup failed', { type, message, error })
70
- return false
71
- }
72
- }
73
-
74
- /**
75
- * Ignore a grouped error (sets status = 2 for all errors in the group)
76
- */
77
- export async function ignoreGroup(type: string, message: string): Promise<boolean> {
78
- try {
79
- await db
80
- .updateTable('errors')
81
- .set({
82
- status: 2,
83
- updated_at: sql.raw('CURRENT_TIMESTAMP'),
84
- })
85
- .where('type', '=', type)
86
- .where('message', '=', message)
87
- .execute()
88
- return true
89
- }
90
- catch (error) {
91
- log.error('[commerce/errors] ignoreGroup failed', { type, message, error })
92
- return false
93
- }
94
- }
95
-
96
- /**
97
- * Unresolve a grouped error (sets status = 0 for all errors in the group)
98
- */
99
- export async function unresolveGroup(type: string, message: string): Promise<boolean> {
100
- try {
101
- await db
102
- .updateTable('errors')
103
- .set({
104
- status: 0,
105
- updated_at: sql.raw('CURRENT_TIMESTAMP'),
106
- })
107
- .where('type', '=', type)
108
- .where('message', '=', message)
109
- .execute()
110
- return true
111
- }
112
- catch (error) {
113
- log.error('[commerce/errors] unresolveGroup failed', { type, message, error })
114
- return false
115
- }
116
- }
@@ -1,87 +0,0 @@
1
- import { db } from '@stacksjs/database'
2
- import { formatDate } from '@stacksjs/orm'
3
- import { fetchById } from './fetch'
4
-
5
- /**
6
- * Delete a gift card by ID
7
- * @param id The ID of the gift card to delete
8
- * @returns A boolean indicating whether the deletion was successful
9
- */
10
- export async function destroy(id: number): Promise<boolean> {
11
- // First check if the gift card exists
12
- const giftCard = await fetchById(id)
13
-
14
- if (!giftCard) {
15
- throw new Error(`Gift card with ID ${id} not found`)
16
- }
17
-
18
- // Delete the gift card
19
- const result = await db
20
- .deleteFrom('gift_cards')
21
- .where('id', '=', id)
22
- .executeTakeFirst()
23
-
24
- return !!result
25
- }
26
-
27
- /**
28
- * Bulk delete multiple gift cards
29
- * @param ids Array of gift card IDs to delete
30
- * @returns Number of gift cards successfully deleted
31
- */
32
- export async function bulkDestroy(ids: number[]): Promise<number> {
33
- if (!ids.length) {
34
- return 0
35
- }
36
-
37
- // Delete all gift cards in the array
38
- const result = await db
39
- .deleteFrom('gift_cards')
40
- .where('id', 'in', ids)
41
- .executeTakeFirst()
42
-
43
- return Number(result?.numDeletedRows) || 0
44
- }
45
-
46
- /**
47
- * Delete expired gift cards
48
- * @returns Number of gift cards deleted
49
- */
50
- export async function destroyExpired(): Promise<number> {
51
- const currentDate = new Date().toISOString().split('T')[0]
52
-
53
- // Delete expired gift cards
54
- const result = await db
55
- .deleteFrom('gift_cards')
56
- .where('expiry_date', '<', currentDate)
57
- .executeTakeFirst()
58
-
59
- return Number(result?.numDeletedRows) || 0
60
- }
61
-
62
- /**
63
- * Deactivate a gift card (set is_active to false)
64
- * @param id The ID of the gift card to deactivate
65
- * @returns A boolean indicating whether the deactivation was successful
66
- */
67
- export async function deactivate(id: number): Promise<boolean> {
68
- // First check if the gift card exists
69
- const giftCard = await fetchById(id)
70
-
71
- if (!giftCard) {
72
- throw new Error(`Gift card with ID ${id} not found`)
73
- }
74
-
75
- // Update the gift card status
76
- const result = await db
77
- .updateTable('gift_cards')
78
- .set({
79
- is_active: false,
80
- status: 'DEACTIVATED',
81
- updated_at: formatDate(new Date()),
82
- })
83
- .where('id', '=', id)
84
- .executeTakeFirst()
85
-
86
- return !!result
87
- }