@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.
- package/package.json +10 -7
- package/src/carts/destroy.ts +0 -54
- package/src/carts/fetch.ts +0 -20
- package/src/carts/index.ts +0 -13
- package/src/carts/store.ts +0 -75
- package/src/carts/update.ts +0 -78
- package/src/coupons/destroy.ts +0 -49
- package/src/coupons/fetch.ts +0 -510
- package/src/coupons/index.ts +0 -30
- package/src/coupons/store.ts +0 -46
- package/src/coupons/update.ts +0 -147
- package/src/customers/destroy.ts +0 -62
- package/src/customers/fetch.ts +0 -20
- package/src/customers/index.ts +0 -17
- package/src/customers/store.ts +0 -45
- package/src/customers/update.ts +0 -44
- package/src/devices/destroy.ts +0 -54
- package/src/devices/export.ts +0 -98
- package/src/devices/fetch.ts +0 -125
- package/src/devices/index.ts +0 -31
- package/src/devices/store.ts +0 -82
- package/src/devices/update.ts +0 -125
- package/src/errors/destroy.ts +0 -54
- package/src/errors/fetch.ts +0 -197
- package/src/errors/index.ts +0 -28
- package/src/errors/update.ts +0 -116
- package/src/gift-cards/destroy.ts +0 -87
- package/src/gift-cards/fetch.ts +0 -431
- package/src/gift-cards/index.ts +0 -26
- package/src/gift-cards/store.ts +0 -56
- package/src/gift-cards/update.ts +0 -102
- package/src/index.ts +0 -78
- package/src/orders/destroy.ts +0 -111
- package/src/orders/events.ts +0 -121
- package/src/orders/export.ts +0 -158
- package/src/orders/fetch.ts +0 -379
- package/src/orders/guards.ts +0 -261
- package/src/orders/index.ts +0 -91
- package/src/orders/place-order.ts +0 -274
- package/src/orders/store.ts +0 -51
- package/src/orders/totals.ts +0 -190
- package/src/orders/update.ts +0 -164
- package/src/orders/webhook.ts +0 -312
- package/src/payments/destroy.ts +0 -56
- package/src/payments/fetch.ts +0 -288
- package/src/payments/index.ts +0 -16
- package/src/payments/store.ts +0 -63
- package/src/payments/update.ts +0 -52
- package/src/product.ts +0 -0
- package/src/products/categories/destroy.ts +0 -103
- package/src/products/categories/fetch.ts +0 -285
- package/src/products/categories/index.ts +0 -36
- package/src/products/categories/store.ts +0 -87
- package/src/products/categories/update.ts +0 -251
- package/src/products/index.ts +0 -35
- package/src/products/items/destroy.ts +0 -54
- package/src/products/items/fetch.ts +0 -282
- package/src/products/items/index.ts +0 -26
- package/src/products/items/store.ts +0 -84
- package/src/products/items/update.ts +0 -324
- package/src/products/manufacturers/destroy.ts +0 -56
- package/src/products/manufacturers/fetch.ts +0 -117
- package/src/products/manufacturers/index.ts +0 -24
- package/src/products/manufacturers/store.ts +0 -82
- package/src/products/manufacturers/update.ts +0 -113
- package/src/products/reviews/destroy.ts +0 -56
- package/src/products/reviews/fetch.ts +0 -63
- package/src/products/reviews/index.ts +0 -25
- package/src/products/reviews/store.ts +0 -46
- package/src/products/reviews/update.ts +0 -82
- package/src/products/units/destroy.ts +0 -56
- package/src/products/units/fetch.ts +0 -20
- package/src/products/units/index.ts +0 -13
- package/src/products/units/store.ts +0 -162
- package/src/products/units/update.ts +0 -159
- package/src/products/variants/destroy.ts +0 -56
- package/src/products/variants/fetch.ts +0 -20
- package/src/products/variants/index.ts +0 -21
- package/src/products/variants/store.ts +0 -136
- package/src/products/variants/update.ts +0 -104
- package/src/receipts/destroy.ts +0 -54
- package/src/receipts/export.ts +0 -0
- package/src/receipts/fetch.ts +0 -222
- package/src/receipts/index.ts +0 -24
- package/src/receipts/printer.ts +0 -69
- package/src/receipts/store.ts +0 -69
- package/src/receipts/update.ts +0 -124
- package/src/shippings/delivery-routes/destroy.ts +0 -54
- package/src/shippings/delivery-routes/fetch.ts +0 -42
- package/src/shippings/delivery-routes/index.ts +0 -26
- package/src/shippings/delivery-routes/store.ts +0 -69
- package/src/shippings/delivery-routes/update.ts +0 -120
- package/src/shippings/digital-deliveries/destroy.ts +0 -111
- package/src/shippings/digital-deliveries/fetch.ts +0 -20
- package/src/shippings/digital-deliveries/index.ts +0 -26
- package/src/shippings/digital-deliveries/store.ts +0 -76
- package/src/shippings/digital-deliveries/update.ts +0 -129
- package/src/shippings/drivers/destroy.ts +0 -78
- package/src/shippings/drivers/fetch.ts +0 -20
- package/src/shippings/drivers/index.ts +0 -24
- package/src/shippings/drivers/store.ts +0 -69
- package/src/shippings/drivers/update.ts +0 -117
- package/src/shippings/index.ts +0 -39
- package/src/shippings/license-keys/destroy.ts +0 -111
- package/src/shippings/license-keys/fetch.ts +0 -20
- package/src/shippings/license-keys/index.ts +0 -26
- package/src/shippings/license-keys/store.ts +0 -77
- package/src/shippings/license-keys/update.ts +0 -117
- package/src/shippings/shipping-methods/destroy.ts +0 -111
- package/src/shippings/shipping-methods/fetch.ts +0 -62
- package/src/shippings/shipping-methods/index.ts +0 -28
- package/src/shippings/shipping-methods/store.ts +0 -123
- package/src/shippings/shipping-methods/update.ts +0 -120
- package/src/shippings/shipping-rates/destroy.ts +0 -102
- package/src/shippings/shipping-rates/fetch.ts +0 -320
- package/src/shippings/shipping-rates/index.ts +0 -36
- package/src/shippings/shipping-rates/store.ts +0 -102
- package/src/shippings/shipping-rates/update.ts +0 -139
- package/src/shippings/shipping-zones/destroy.ts +0 -111
- package/src/shippings/shipping-zones/fetch.ts +0 -96
- package/src/shippings/shipping-zones/index.ts +0 -26
- package/src/shippings/shipping-zones/store.ts +0 -74
- package/src/shippings/shipping-zones/update.ts +0 -156
- package/src/tax/destroy.ts +0 -54
- package/src/tax/fetch.ts +0 -20
- package/src/tax/index.ts +0 -24
- package/src/tax/store.ts +0 -69
- package/src/tax/update.ts +0 -119
- package/src/tests/coupons.test.ts +0 -90
- package/src/tests/customers.test.ts +0 -39
- package/src/tests/device.test.ts +0 -111
- package/src/tests/digitals.test.ts +0 -31
- package/src/tests/drivers.test.ts +0 -25
- package/src/tests/gift-cards.test.ts +0 -36
- package/src/tests/license.test.ts +0 -31
- package/src/tests/manufacturers.test.ts +0 -80
- package/src/tests/orders.test.ts +0 -25
- package/src/tests/payments.test.ts +0 -75
- package/src/tests/rates.test.ts +0 -367
- package/src/tests/receipts.test.ts +0 -287
- package/src/tests/restaurant.test.ts +0 -522
- package/src/tests/reviews.test.ts +0 -165
- package/src/tests/routes.test.ts +0 -51
- package/src/tests/setup.ts +0 -149
- package/src/tests/shipping.test.ts +0 -88
- package/src/tests/tax.test.ts +0 -25
- package/src/tests/units.test.ts +0 -110
- package/src/tests/variants.test.ts +0 -133
- package/src/tests/waitlist.test.ts +0 -303
- package/src/tests/zones.test.ts +0 -86
- package/src/types.ts +0 -312
- package/src/utils/typed-stats.ts +0 -67
- package/src/waitlists/index.ts +0 -19
- package/src/waitlists/products/destroy.ts +0 -65
- package/src/waitlists/products/export.ts +0 -113
- package/src/waitlists/products/fetch.ts +0 -362
- package/src/waitlists/products/index.ts +0 -33
- package/src/waitlists/products/store.ts +0 -112
- package/src/waitlists/products/update.ts +0 -125
- package/src/waitlists/restaurant/destroy.ts +0 -65
- package/src/waitlists/restaurant/export.ts +0 -107
- package/src/waitlists/restaurant/fetch.ts +0 -538
- package/src/waitlists/restaurant/index.ts +0 -43
- package/src/waitlists/restaurant/store.ts +0 -109
- package/src/waitlists/restaurant/update.ts +0 -198
- /package/dist/{src/coupons → coupons}/destroy.d.ts +0 -0
- /package/dist/{src/coupons → coupons}/fetch.d.ts +0 -0
- /package/dist/{src/coupons → coupons}/index.d.ts +0 -0
- /package/dist/{src/coupons → coupons}/store.d.ts +0 -0
- /package/dist/{src/coupons → coupons}/update.d.ts +0 -0
- /package/dist/{src/customers → customers}/destroy.d.ts +0 -0
- /package/dist/{src/customers → customers}/fetch.d.ts +0 -0
- /package/dist/{src/customers → customers}/index.d.ts +0 -0
- /package/dist/{src/customers → customers}/store.d.ts +0 -0
- /package/dist/{src/customers → customers}/update.d.ts +0 -0
- /package/dist/{src/devices → devices}/destroy.d.ts +0 -0
- /package/dist/{src/devices → devices}/export.d.ts +0 -0
- /package/dist/{src/devices → devices}/fetch.d.ts +0 -0
- /package/dist/{src/devices → devices}/index.d.ts +0 -0
- /package/dist/{src/devices → devices}/store.d.ts +0 -0
- /package/dist/{src/devices → devices}/update.d.ts +0 -0
- /package/dist/{src/errors → errors}/destroy.d.ts +0 -0
- /package/dist/{src/errors → errors}/fetch.d.ts +0 -0
- /package/dist/{src/errors → errors}/index.d.ts +0 -0
- /package/dist/{src/errors → errors}/update.d.ts +0 -0
- /package/dist/{src/gift-cards → gift-cards}/destroy.d.ts +0 -0
- /package/dist/{src/gift-cards → gift-cards}/fetch.d.ts +0 -0
- /package/dist/{src/gift-cards → gift-cards}/index.d.ts +0 -0
- /package/dist/{src/gift-cards → gift-cards}/store.d.ts +0 -0
- /package/dist/{src/gift-cards → gift-cards}/update.d.ts +0 -0
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/orders → orders}/destroy.d.ts +0 -0
- /package/dist/{src/orders → orders}/events.d.ts +0 -0
- /package/dist/{src/orders → orders}/export.d.ts +0 -0
- /package/dist/{src/orders → orders}/fetch.d.ts +0 -0
- /package/dist/{src/orders → orders}/guards.d.ts +0 -0
- /package/dist/{src/orders → orders}/index.d.ts +0 -0
- /package/dist/{src/orders → orders}/place-order.d.ts +0 -0
- /package/dist/{src/orders → orders}/store.d.ts +0 -0
- /package/dist/{src/orders → orders}/totals.d.ts +0 -0
- /package/dist/{src/orders → orders}/update.d.ts +0 -0
- /package/dist/{src/orders → orders}/webhook.d.ts +0 -0
- /package/dist/{src/payments → payments}/destroy.d.ts +0 -0
- /package/dist/{src/payments → payments}/fetch.d.ts +0 -0
- /package/dist/{src/payments → payments}/index.d.ts +0 -0
- /package/dist/{src/payments → payments}/store.d.ts +0 -0
- /package/dist/{src/payments → payments}/update.d.ts +0 -0
- /package/dist/{src/products → products}/categories/destroy.d.ts +0 -0
- /package/dist/{src/products → products}/categories/fetch.d.ts +0 -0
- /package/dist/{src/products → products}/categories/index.d.ts +0 -0
- /package/dist/{src/products → products}/categories/store.d.ts +0 -0
- /package/dist/{src/products → products}/categories/update.d.ts +0 -0
- /package/dist/{src/products → products}/index.d.ts +0 -0
- /package/dist/{src/products → products}/items/destroy.d.ts +0 -0
- /package/dist/{src/products → products}/items/fetch.d.ts +0 -0
- /package/dist/{src/products → products}/items/index.d.ts +0 -0
- /package/dist/{src/products → products}/items/store.d.ts +0 -0
- /package/dist/{src/products → products}/items/update.d.ts +0 -0
- /package/dist/{src/products → products}/manufacturers/destroy.d.ts +0 -0
- /package/dist/{src/products → products}/manufacturers/fetch.d.ts +0 -0
- /package/dist/{src/products → products}/manufacturers/index.d.ts +0 -0
- /package/dist/{src/products → products}/manufacturers/store.d.ts +0 -0
- /package/dist/{src/products → products}/manufacturers/update.d.ts +0 -0
- /package/dist/{src/products → products}/reviews/destroy.d.ts +0 -0
- /package/dist/{src/products → products}/reviews/fetch.d.ts +0 -0
- /package/dist/{src/products → products}/reviews/index.d.ts +0 -0
- /package/dist/{src/products → products}/reviews/store.d.ts +0 -0
- /package/dist/{src/products → products}/reviews/update.d.ts +0 -0
- /package/dist/{src/products → products}/units/destroy.d.ts +0 -0
- /package/dist/{src/products → products}/units/fetch.d.ts +0 -0
- /package/dist/{src/products → products}/units/index.d.ts +0 -0
- /package/dist/{src/products → products}/units/store.d.ts +0 -0
- /package/dist/{src/products → products}/units/update.d.ts +0 -0
- /package/dist/{src/products → products}/variants/destroy.d.ts +0 -0
- /package/dist/{src/products → products}/variants/fetch.d.ts +0 -0
- /package/dist/{src/products → products}/variants/index.d.ts +0 -0
- /package/dist/{src/products → products}/variants/store.d.ts +0 -0
- /package/dist/{src/products → products}/variants/update.d.ts +0 -0
- /package/dist/{src/receipts → receipts}/destroy.d.ts +0 -0
- /package/dist/{src/receipts → receipts}/fetch.d.ts +0 -0
- /package/dist/{src/receipts → receipts}/index.d.ts +0 -0
- /package/dist/{src/receipts → receipts}/store.d.ts +0 -0
- /package/dist/{src/receipts → receipts}/update.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/delivery-routes/destroy.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/delivery-routes/fetch.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/delivery-routes/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/delivery-routes/store.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/delivery-routes/update.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/digital-deliveries/destroy.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/digital-deliveries/fetch.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/digital-deliveries/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/digital-deliveries/store.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/digital-deliveries/update.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/drivers/destroy.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/drivers/fetch.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/drivers/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/drivers/store.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/drivers/update.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/license-keys/destroy.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/license-keys/fetch.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/license-keys/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/license-keys/store.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/license-keys/update.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-methods/destroy.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-methods/fetch.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-methods/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-methods/store.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-methods/update.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-rates/destroy.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-rates/fetch.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-rates/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-rates/store.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-rates/update.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-zones/destroy.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-zones/fetch.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-zones/index.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-zones/store.d.ts +0 -0
- /package/dist/{src/shippings → shippings}/shipping-zones/update.d.ts +0 -0
- /package/dist/{src/tax → tax}/destroy.d.ts +0 -0
- /package/dist/{src/tax → tax}/fetch.d.ts +0 -0
- /package/dist/{src/tax → tax}/index.d.ts +0 -0
- /package/dist/{src/tax → tax}/store.d.ts +0 -0
- /package/dist/{src/tax → tax}/update.d.ts +0 -0
- /package/dist/{src/types.d.ts → types.d.ts} +0 -0
- /package/dist/{src/utils → utils}/typed-stats.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/index.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/products/destroy.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/products/fetch.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/products/index.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/products/store.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/products/update.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/restaurant/destroy.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/restaurant/fetch.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/restaurant/index.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/restaurant/store.d.ts +0 -0
- /package/dist/{src/waitlists → waitlists}/restaurant/update.d.ts +0 -0
package/src/devices/store.ts
DELETED
|
@@ -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
|
-
}
|
package/src/devices/update.ts
DELETED
|
@@ -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
|
-
}
|
package/src/errors/destroy.ts
DELETED
|
@@ -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
|
-
}
|
package/src/errors/fetch.ts
DELETED
|
@@ -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
|
-
}
|
package/src/errors/index.ts
DELETED
|
@@ -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'
|
package/src/errors/update.ts
DELETED
|
@@ -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
|
-
}
|