40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { SupabaseClient } from '@supabase/supabase-js';
|
|
import { cache } from 'react';
|
|
|
|
export const getUser = cache(async (supabase: SupabaseClient) => {
|
|
const {
|
|
data: { user }
|
|
} = await supabase.auth.getUser();
|
|
return user;
|
|
});
|
|
|
|
export const getSubscription = cache(async (supabase: SupabaseClient) => {
|
|
const { data: subscription, error } = await supabase
|
|
.from('subscriptions')
|
|
.select('*, prices(*, products(*))')
|
|
.in('status', ['trialing', 'active'])
|
|
.maybeSingle();
|
|
|
|
return subscription;
|
|
});
|
|
|
|
export const getProducts = cache(async (supabase: SupabaseClient) => {
|
|
const { data: products, error } = await supabase
|
|
.from('products')
|
|
.select('*, prices(*)')
|
|
.eq('active', true)
|
|
.eq('prices.active', true)
|
|
.order('metadata->index')
|
|
.order('unit_amount', { referencedTable: 'prices' });
|
|
|
|
return products;
|
|
});
|
|
|
|
export const getUserDetails = cache(async (supabase: SupabaseClient) => {
|
|
const { data: userDetails } = await supabase
|
|
.from('users')
|
|
.select('*')
|
|
.single();
|
|
return userDetails;
|
|
});
|