+ Credits Management for User: {user?.id}
+ Credits Remaining: {$credits}
+ {#if errorMessage}
+ {errorMessage}
+ {/if}
+
+
+
+
+
+
diff --git a/src/routes/test/test-credits/+server.ts b/src/routes/test/test-credits/+server.ts
new file mode 100644
index 0000000..5949f67
--- /dev/null
+++ b/src/routes/test/test-credits/+server.ts
@@ -0,0 +1,29 @@
+import { json } from '@sveltejs/kit';
+import { addCredits, deductCredits, getUserCredits } from '$lib/utils/supabase/admin';
+
+export const POST = async ({ request }) => {
+ const { action, userId, credits, description } = await request.json();
+
+ if (!userId) {
+ return json({ success: false, error: 'User ID is required' }, { status: 400 });
+ }
+
+ try {
+ if (action === 'addCredits') {
+ await addCredits(userId, credits, description);
+ const updatedCredits = await getUserCredits(userId);
+ return json({ success: true, credits: updatedCredits });
+ } else if (action === 'deductCredits') {
+ await deductCredits(userId, credits, description);
+ const updatedCredits = await getUserCredits(userId);
+ return json({ success: true, credits: updatedCredits });
+ } else if (action === 'getUserCredits') {
+ const fetchedCredits = await getUserCredits(userId);
+ return json({ success: true, credits: fetchedCredits });
+ } else {
+ return json({ success: false, error: 'Invalid action' }, { status: 400 });
+ }
+ } catch (error) {
+ return json({ success: false, error: error.message }, { status: 500 });
+ }
+};
diff --git a/supabase/migrations/20240929120431_add_credits.sql b/supabase/migrations/20240929120431_add_credits.sql
new file mode 100644
index 0000000..44680d4
--- /dev/null
+++ b/supabase/migrations/20240929120431_add_credits.sql
@@ -0,0 +1,35 @@
+create table user_credits (
+ user_id uuid references auth.users not null primary key,
+ credits_remaining integer not null default 0,
+ last_updated timestamp with time zone not null default now()
+);
+
+alter table user_credits enable row level security;
+
+create policy "Can view own credits." on user_credits
+ for select using (auth.uid() = user_id);
+
+-- Uncomment and modify the update policy if allowing users to modify their own credits
+-- create policy "Can update own credits." on user_credits
+-- for update using (auth.uid() = user_id);
+
+create table credit_transactions (
+ id uuid default uuid_generate_v4() primary key,
+ user_id uuid references auth.users not null,
+ credits_change integer not null,
+ description text,
+ created_at timestamp with time zone not null default now()
+);
+
+alter table credit_transactions enable row level security;
+
+create policy "Can view own transactions." on credit_transactions
+ for select using (auth.uid() = user_id);
+
+-- Adding indexing to improve query performance
+create index on user_credits (user_id);
+create index on credit_transactions (user_id);
+
+-- Adding a check constraint to enforce data integrity
+alter table credit_transactions
+add constraint check_credits_change_nonzero check (credits_change <> 0);