@stacksjs/commerce 0.70.55 → 0.70.56
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
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { db } from '@stacksjs/database'
|
|
2
|
-
import { formatDate } from '@stacksjs/orm'
|
|
3
|
-
type ProductUnitJsonResponse = ModelRow<typeof ProductUnit>
|
|
4
|
-
type ProductUnitUpdate = UpdateModelData<typeof ProductUnit>
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Update a product unit
|
|
8
|
-
*
|
|
9
|
-
* @param id The ID of the product unit
|
|
10
|
-
* @param data The product unit data to update
|
|
11
|
-
* @returns The updated product unit record
|
|
12
|
-
*/
|
|
13
|
-
export async function update(id: number, data: ProductUnitUpdate): Promise<ProductUnitJsonResponse> {
|
|
14
|
-
try {
|
|
15
|
-
if (!id)
|
|
16
|
-
throw new Error('Product unit ID is required for update')
|
|
17
|
-
|
|
18
|
-
const result = await db
|
|
19
|
-
.updateTable('product_units')
|
|
20
|
-
.set({
|
|
21
|
-
...data,
|
|
22
|
-
updated_at: formatDate(new Date()),
|
|
23
|
-
})
|
|
24
|
-
.where('id', '=', id)
|
|
25
|
-
.returningAll()
|
|
26
|
-
.executeTakeFirst()
|
|
27
|
-
|
|
28
|
-
if (!result)
|
|
29
|
-
throw new Error('Failed to update product unit')
|
|
30
|
-
|
|
31
|
-
// If this unit is set as default, update all other units of the same type
|
|
32
|
-
const d = data as Record<string, unknown>
|
|
33
|
-
if (d.is_default === true && data.type) {
|
|
34
|
-
await db
|
|
35
|
-
.updateTable('product_units')
|
|
36
|
-
.set({ is_default: false })
|
|
37
|
-
.where('type', '=', data.type)
|
|
38
|
-
.where('id', '!=', id)
|
|
39
|
-
.execute()
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return result as ProductUnitJsonResponse
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
if (error instanceof Error) {
|
|
46
|
-
throw new TypeError(`Failed to update product unit: ${error.message}`)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
throw error
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Update multiple product units at once
|
|
55
|
-
*
|
|
56
|
-
* @param data Array of product unit updates
|
|
57
|
-
* @returns Number of product units updated
|
|
58
|
-
*/
|
|
59
|
-
export async function bulkUpdate(data: ProductUnitUpdate[]): Promise<number> {
|
|
60
|
-
if (!data.length)
|
|
61
|
-
return 0
|
|
62
|
-
|
|
63
|
-
let updatedCount = 0
|
|
64
|
-
|
|
65
|
-
try {
|
|
66
|
-
for (const unit of data) {
|
|
67
|
-
const unitRecord = unit as Record<string, unknown>
|
|
68
|
-
if (!unitRecord.id)
|
|
69
|
-
continue
|
|
70
|
-
|
|
71
|
-
// Support both flat format and { id, data: { ... } } format
|
|
72
|
-
const updateFields = unitRecord.data && typeof unitRecord.data === 'object'
|
|
73
|
-
? unitRecord.data as Record<string, unknown>
|
|
74
|
-
: { ...unitRecord }
|
|
75
|
-
delete (updateFields as Record<string, unknown>).id
|
|
76
|
-
|
|
77
|
-
const result = await db
|
|
78
|
-
.updateTable('product_units')
|
|
79
|
-
.set({
|
|
80
|
-
...updateFields,
|
|
81
|
-
updated_at: formatDate(new Date()),
|
|
82
|
-
})
|
|
83
|
-
.where('id', '=', unitRecord.id)
|
|
84
|
-
.executeTakeFirst()
|
|
85
|
-
|
|
86
|
-
// If this unit is set as default, update all other units of the same type
|
|
87
|
-
const fields = updateFields as Record<string, unknown>
|
|
88
|
-
if (fields.is_default === true && fields.type) {
|
|
89
|
-
await db
|
|
90
|
-
.updateTable('product_units')
|
|
91
|
-
.set({ is_default: false })
|
|
92
|
-
.where('type', '=', fields.type as string)
|
|
93
|
-
.where('id', '!=', unitRecord.id)
|
|
94
|
-
.execute()
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (Number(result.numUpdatedRows) > 0)
|
|
98
|
-
updatedCount++
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return updatedCount
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
if (error instanceof Error) {
|
|
105
|
-
throw new TypeError(`Failed to update product units in bulk: ${error.message}`)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
throw error
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Update the default status of a product unit
|
|
114
|
-
*
|
|
115
|
-
* @param id The ID of the product unit
|
|
116
|
-
* @param isDefault The new default status value
|
|
117
|
-
* @returns True if the status was updated successfully
|
|
118
|
-
*/
|
|
119
|
-
export async function updateDefaultStatus(id: number, isDefault: boolean): Promise<boolean> {
|
|
120
|
-
try {
|
|
121
|
-
// First get the unit type to update other units if needed
|
|
122
|
-
const unit = await db
|
|
123
|
-
.selectFrom('product_units')
|
|
124
|
-
.select('type' as any)
|
|
125
|
-
.where('id', '=', id)
|
|
126
|
-
.executeTakeFirst() as { type: string } | undefined
|
|
127
|
-
|
|
128
|
-
if (!unit)
|
|
129
|
-
return false
|
|
130
|
-
|
|
131
|
-
const result = await db
|
|
132
|
-
.updateTable('product_units')
|
|
133
|
-
.set({
|
|
134
|
-
is_default: isDefault,
|
|
135
|
-
updated_at: formatDate(new Date()),
|
|
136
|
-
})
|
|
137
|
-
.where('id', '=', id)
|
|
138
|
-
.executeTakeFirst()
|
|
139
|
-
|
|
140
|
-
// If setting this unit as default, update all other units of the same type
|
|
141
|
-
if (isDefault && unit.type) {
|
|
142
|
-
await db
|
|
143
|
-
.updateTable('product_units')
|
|
144
|
-
.set({ is_default: false })
|
|
145
|
-
.where('type', '=', unit.type)
|
|
146
|
-
.where('id', '!=', id)
|
|
147
|
-
.execute()
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return Number(result.numUpdatedRows) > 0
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
if (error instanceof Error) {
|
|
154
|
-
throw new TypeError(`Failed to update product unit default status: ${error.message}`)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
throw error
|
|
158
|
-
}
|
|
159
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { db } from '@stacksjs/database'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Delete a product variant by ID
|
|
5
|
-
*
|
|
6
|
-
* @param id The ID of the product variant to delete
|
|
7
|
-
* @returns True if the product variant was deleted, false otherwise
|
|
8
|
-
*/
|
|
9
|
-
export async function destroy(id: number): Promise<boolean> {
|
|
10
|
-
try {
|
|
11
|
-
// Perform the delete operation
|
|
12
|
-
const result = await db
|
|
13
|
-
.deleteFrom('product_variants')
|
|
14
|
-
.where('id', '=', id)
|
|
15
|
-
.executeTakeFirst()
|
|
16
|
-
|
|
17
|
-
// Return true if any row was affected (deleted)
|
|
18
|
-
return Number(result.numDeletedRows) > 0
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
if (error instanceof Error) {
|
|
22
|
-
throw new TypeError(`Failed to delete product variant: ${error.message}`)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
throw error
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Delete multiple product variants by ID
|
|
31
|
-
*
|
|
32
|
-
* @param ids Array of product variant IDs to delete
|
|
33
|
-
* @returns Number of product variants deleted
|
|
34
|
-
*/
|
|
35
|
-
export async function bulkDestroy(ids: number[]): Promise<number> {
|
|
36
|
-
if (!ids.length)
|
|
37
|
-
return 0
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
// Perform the delete operation
|
|
41
|
-
const result = await db
|
|
42
|
-
.deleteFrom('product_variants')
|
|
43
|
-
.where('id', 'in', ids)
|
|
44
|
-
.executeTakeFirst()
|
|
45
|
-
|
|
46
|
-
// Return the number of deleted rows
|
|
47
|
-
return Number(result.numDeletedRows)
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
if (error instanceof Error) {
|
|
51
|
-
throw new TypeError(`Failed to delete product variants: ${error.message}`)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
throw error
|
|
55
|
-
}
|
|
56
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
type ProductVariantJsonResponse = ModelRow<typeof ProductVariant>
|
|
2
|
-
import { db } from '@stacksjs/database'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Fetch a product variant by ID
|
|
6
|
-
*/
|
|
7
|
-
export async function fetchById(id: number): Promise<ProductVariantJsonResponse | undefined> {
|
|
8
|
-
return await db
|
|
9
|
-
.selectFrom('product_variants')
|
|
10
|
-
.where('id', '=', id)
|
|
11
|
-
.selectAll()
|
|
12
|
-
.executeTakeFirst() as ProductVariantJsonResponse | undefined
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Fetch all product variants
|
|
17
|
-
*/
|
|
18
|
-
export async function fetchAll(): Promise<ProductVariantJsonResponse[]> {
|
|
19
|
-
return await db.selectFrom('product_variants').selectAll().execute() as ProductVariantJsonResponse[]
|
|
20
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
bulkDestroy,
|
|
3
|
-
destroy,
|
|
4
|
-
} from './destroy'
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
fetchAll,
|
|
8
|
-
fetchById,
|
|
9
|
-
} from './fetch'
|
|
10
|
-
|
|
11
|
-
export {
|
|
12
|
-
bulkStore,
|
|
13
|
-
formatVariantOptions,
|
|
14
|
-
generateVariantCombinations,
|
|
15
|
-
store,
|
|
16
|
-
} from './store'
|
|
17
|
-
|
|
18
|
-
export {
|
|
19
|
-
bulkUpdate,
|
|
20
|
-
update,
|
|
21
|
-
} from './update'
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
type ProductVariantJsonResponse = ModelRow<typeof ProductVariant>
|
|
2
|
-
type NewProductVariant = NewModelData<typeof ProductVariant>
|
|
3
|
-
import { randomUUIDv7 } from 'bun'
|
|
4
|
-
import { db } from '@stacksjs/database'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Create a new product variant
|
|
8
|
-
*
|
|
9
|
-
* @param data The product variant data to store
|
|
10
|
-
* @returns The newly created product variant record
|
|
11
|
-
*/
|
|
12
|
-
export async function store(data: NewProductVariant): Promise<ProductVariantJsonResponse> {
|
|
13
|
-
try {
|
|
14
|
-
const variantData = {
|
|
15
|
-
...data,
|
|
16
|
-
uuid: randomUUIDv7(),
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const result = await db
|
|
20
|
-
.insertInto('product_variants')
|
|
21
|
-
.values(variantData)
|
|
22
|
-
.returningAll()
|
|
23
|
-
.executeTakeFirst()
|
|
24
|
-
|
|
25
|
-
if (!result)
|
|
26
|
-
throw new Error('Failed to create product variant')
|
|
27
|
-
|
|
28
|
-
return result as ProductVariantJsonResponse
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
if (error instanceof Error) {
|
|
32
|
-
throw new TypeError(`Failed to create product variant: ${error.message}`)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
throw error
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Create multiple product variants at once
|
|
41
|
-
*
|
|
42
|
-
* @param data Array of product variant data to store
|
|
43
|
-
* @returns Number of product variants created
|
|
44
|
-
*/
|
|
45
|
-
export async function bulkStore(data: NewProductVariant[]): Promise<number> {
|
|
46
|
-
if (!data.length)
|
|
47
|
-
return 0
|
|
48
|
-
|
|
49
|
-
let createdCount = 0
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
for (const variant of data) {
|
|
53
|
-
const variantData = {
|
|
54
|
-
...variant,
|
|
55
|
-
uuid: randomUUIDv7(),
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
await db
|
|
59
|
-
.insertInto('product_variants')
|
|
60
|
-
.values(variantData)
|
|
61
|
-
.execute()
|
|
62
|
-
|
|
63
|
-
createdCount++
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return createdCount
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
if (error instanceof Error) {
|
|
70
|
-
throw new TypeError(`Failed to create product variants in bulk: ${error.message}`)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
throw error
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Generate product variant options from raw input
|
|
79
|
-
*
|
|
80
|
-
* @param rawOptions String array of options
|
|
81
|
-
* @returns Formatted JSON string of options
|
|
82
|
-
*/
|
|
83
|
-
export function formatVariantOptions(rawOptions: string[]): string {
|
|
84
|
-
if (!rawOptions || !rawOptions.length)
|
|
85
|
-
return JSON.stringify([])
|
|
86
|
-
|
|
87
|
-
// Clean and normalize the options
|
|
88
|
-
const cleanedOptions = rawOptions.map((option: any) => option.trim()).filter(Boolean)
|
|
89
|
-
|
|
90
|
-
return JSON.stringify(cleanedOptions)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Create a set of common variant combinations from different option types
|
|
95
|
-
*
|
|
96
|
-
* @param optionSets Object containing option types and their values
|
|
97
|
-
* @returns Array of variant combinations
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* // Generate combinations for a t-shirt product
|
|
101
|
-
* const options = {
|
|
102
|
-
* size: ['S', 'M', 'L'],
|
|
103
|
-
* color: ['Red', 'Blue']
|
|
104
|
-
* }
|
|
105
|
-
* // Returns: [
|
|
106
|
-
* // { size: 'S', color: 'Red' },
|
|
107
|
-
* // { size: 'S', color: 'Blue' },
|
|
108
|
-
* // { size: 'M', color: 'Red' },
|
|
109
|
-
* // ...
|
|
110
|
-
* // ]
|
|
111
|
-
*/
|
|
112
|
-
export function generateVariantCombinations(optionSets: Record<string, string[]>): Record<string, string>[] {
|
|
113
|
-
const keys = Object.keys(optionSets)
|
|
114
|
-
|
|
115
|
-
if (!keys.length)
|
|
116
|
-
return []
|
|
117
|
-
|
|
118
|
-
// Helper function to create combinations recursively
|
|
119
|
-
function createCombinations(currentIndex: number, currentCombination: Record<string, string>): Record<string, string>[] {
|
|
120
|
-
if (currentIndex === keys.length)
|
|
121
|
-
return [currentCombination]
|
|
122
|
-
|
|
123
|
-
const currentKey = keys[currentIndex]
|
|
124
|
-
const currentOptions = optionSets[currentKey]
|
|
125
|
-
const combinations: Record<string, string>[] = []
|
|
126
|
-
|
|
127
|
-
for (const option of currentOptions) {
|
|
128
|
-
const newCombination = { ...currentCombination, [currentKey]: option }
|
|
129
|
-
combinations.push(...createCombinations(currentIndex + 1, newCombination))
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return combinations
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return createCombinations(0, {})
|
|
136
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { db } from '@stacksjs/database'
|
|
2
|
-
import { formatDate } from '@stacksjs/orm'
|
|
3
|
-
type ProductVariantJsonResponse = ModelRow<typeof ProductVariant>
|
|
4
|
-
type ProductVariantUpdate = UpdateModelData<typeof ProductVariant>
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Update a product variant
|
|
8
|
-
*
|
|
9
|
-
* @param id The ID of the product variant to update
|
|
10
|
-
* @param data The product variant data to update
|
|
11
|
-
* @returns The updated product variant record
|
|
12
|
-
*/
|
|
13
|
-
export async function update(id: number, data: Omit<ProductVariantUpdate, 'id'>): Promise<ProductVariantJsonResponse> {
|
|
14
|
-
try {
|
|
15
|
-
const result = await db
|
|
16
|
-
.updateTable('product_variants')
|
|
17
|
-
.set({
|
|
18
|
-
...data,
|
|
19
|
-
updated_at: formatDate(new Date()),
|
|
20
|
-
})
|
|
21
|
-
.where('id', '=', id)
|
|
22
|
-
.returningAll()
|
|
23
|
-
.executeTakeFirst()
|
|
24
|
-
|
|
25
|
-
if (!result)
|
|
26
|
-
throw new Error('Failed to update product variant')
|
|
27
|
-
|
|
28
|
-
return result as ProductVariantJsonResponse
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
if (error instanceof Error)
|
|
32
|
-
throw new TypeError(`Failed to update product variant: ${error.message}`)
|
|
33
|
-
|
|
34
|
-
throw error
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Update multiple product variants at once
|
|
40
|
-
*
|
|
41
|
-
* @param data Array of objects containing variant ID and update data
|
|
42
|
-
* @returns Number of product variants updated
|
|
43
|
-
*/
|
|
44
|
-
export async function bulkUpdate(data: ProductVariantUpdate[]): Promise<number> {
|
|
45
|
-
if (!data.length)
|
|
46
|
-
return 0
|
|
47
|
-
|
|
48
|
-
let updatedCount = 0
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
for (const variant of data) {
|
|
52
|
-
if (!(variant as Record<string, unknown>).id)
|
|
53
|
-
continue
|
|
54
|
-
|
|
55
|
-
const result = await db
|
|
56
|
-
.updateTable('product_variants')
|
|
57
|
-
.set({
|
|
58
|
-
...variant,
|
|
59
|
-
updated_at: formatDate(new Date()),
|
|
60
|
-
})
|
|
61
|
-
.where('id', '=', (variant as Record<string, unknown>).id)
|
|
62
|
-
.executeTakeFirst()
|
|
63
|
-
|
|
64
|
-
if (Number(result.numUpdatedRows) > 0)
|
|
65
|
-
updatedCount++
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return updatedCount
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
if (error instanceof Error)
|
|
72
|
-
throw new TypeError(`Failed to update product variants in bulk: ${error.message}`)
|
|
73
|
-
|
|
74
|
-
throw error
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Update the status of a product variant
|
|
80
|
-
*
|
|
81
|
-
* @param id The ID of the product variant
|
|
82
|
-
* @param status The new status value
|
|
83
|
-
* @returns True if the status was updated successfully
|
|
84
|
-
*/
|
|
85
|
-
export async function updateStatus(id: number, status: string): Promise<boolean> {
|
|
86
|
-
try {
|
|
87
|
-
const result = await db
|
|
88
|
-
.updateTable('product_variants')
|
|
89
|
-
.set({
|
|
90
|
-
status,
|
|
91
|
-
updated_at: formatDate(new Date()),
|
|
92
|
-
})
|
|
93
|
-
.where('id', '=', id)
|
|
94
|
-
.executeTakeFirst()
|
|
95
|
-
|
|
96
|
-
return Number(result.numUpdatedRows) > 0
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
if (error instanceof Error)
|
|
100
|
-
throw new TypeError(`Failed to update product variant status: ${error.message}`)
|
|
101
|
-
|
|
102
|
-
throw error
|
|
103
|
-
}
|
|
104
|
-
}
|
package/src/receipts/destroy.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { db } from '@stacksjs/database'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Delete a print log by ID
|
|
5
|
-
*
|
|
6
|
-
* @param id The ID of the print log to delete
|
|
7
|
-
* @returns True if the print log was deleted, false otherwise
|
|
8
|
-
*/
|
|
9
|
-
export async function destroy(id: number): Promise<boolean> {
|
|
10
|
-
try {
|
|
11
|
-
const result = await db
|
|
12
|
-
.deleteFrom('receipts')
|
|
13
|
-
.where('id', '=', id)
|
|
14
|
-
.executeTakeFirst()
|
|
15
|
-
|
|
16
|
-
return Number(result.numDeletedRows) > 0
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
if (error instanceof Error) {
|
|
20
|
-
throw new TypeError(`Failed to delete print log: ${error.message}`)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
throw error
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Delete multiple print logs by ID
|
|
29
|
-
*
|
|
30
|
-
* @param ids Array of print log IDs to delete
|
|
31
|
-
* @returns Number of print logs deleted
|
|
32
|
-
*/
|
|
33
|
-
export async function bulkDestroy(ids: number[]): Promise<number> {
|
|
34
|
-
if (!ids.length)
|
|
35
|
-
return 0
|
|
36
|
-
|
|
37
|
-
try {
|
|
38
|
-
// Perform the delete operation
|
|
39
|
-
const result = await db
|
|
40
|
-
.deleteFrom('receipts')
|
|
41
|
-
.where('id', 'in', ids)
|
|
42
|
-
.executeTakeFirst()
|
|
43
|
-
|
|
44
|
-
// Return the number of deleted rows
|
|
45
|
-
return Number(result.numDeletedRows)
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
if (error instanceof Error) {
|
|
49
|
-
throw new TypeError(`Failed to delete receipts: ${error.message}`)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
throw error
|
|
53
|
-
}
|
|
54
|
-
}
|
package/src/receipts/export.ts
DELETED
|
File without changes
|