mirror of
https://github.com/jcreek/SvelteKitSaasBoilerplate.git
synced 2026-07-13 02:53:50 +00:00
feat(#6): Add a basic product page using the db rather than stripe
This commit is contained in:
@@ -409,6 +409,40 @@ const getUserCredits = async (userId: string) => {
|
||||
return creditData.credits_remaining;
|
||||
};
|
||||
|
||||
type ProductWithPrices = Product & {
|
||||
prices: Price[];
|
||||
actualPrice?: number;
|
||||
};
|
||||
|
||||
const getActiveProductsWithPrices = async (limit = 10, offset = 0) => {
|
||||
const {
|
||||
data: products,
|
||||
error,
|
||||
count
|
||||
} = await supabaseAdmin
|
||||
.from('products')
|
||||
.select('*, prices(*)', { count: 'exact' })
|
||||
.eq('active', true)
|
||||
.order('name', { ascending: true })
|
||||
.range(offset, offset + limit - 1);
|
||||
|
||||
if (error) {
|
||||
throw new Error(`Error fetching products: ${error.message}`);
|
||||
}
|
||||
|
||||
const typedProducts: ProductWithPrices[] = products;
|
||||
|
||||
for (const product of typedProducts) {
|
||||
if (product.prices && product.prices.length > 0) {
|
||||
// Assuming the default price is the first one
|
||||
const defaultPrice = product.prices[0];
|
||||
product.actualPrice = defaultPrice.unit_amount! / 100;
|
||||
}
|
||||
}
|
||||
|
||||
return { products: typedProducts, count }; // Return products and total count
|
||||
};
|
||||
|
||||
export {
|
||||
upsertProductRecord,
|
||||
upsertPriceRecord,
|
||||
@@ -420,5 +454,6 @@ export {
|
||||
hasProductAccess,
|
||||
addCredits,
|
||||
deductCredits,
|
||||
getUserCredits
|
||||
getUserCredits,
|
||||
getActiveProductsWithPrices
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user