Spaces:
Running
Running
| -- Create a table for public profiles | |
| create table if not exists public.users ( | |
| id uuid references auth.users on delete cascade not null primary key, | |
| email text, | |
| full_name text, | |
| avatar_url text, | |
| credits integer default 5, | |
| created_at timestamp with time zone default timezone('utc'::text, now()) not null | |
| ); | |
| -- Set up Row Level Security (RLS) | |
| alter table public.users enable row level security; | |
| create policy "Public profiles are viewable by everyone." on public.users | |
| for select using (true); | |
| create policy "Users can insert their own profile." on public.users | |
| for insert with check (auth.uid() = id); | |
| create policy "Users can update own profile." on public.users | |
| for update using (auth.uid() = id); | |
| -- Create a function to handle new user signup | |
| create or replace function public.handle_new_user() | |
| returns trigger as $$ | |
| begin | |
| insert into public.users (id, email, full_name, avatar_url, credits) | |
| values ( | |
| new.id, | |
| new.email, | |
| new.raw_user_meta_data->>'full_name', | |
| new.raw_user_meta_data->>'avatar_url', | |
| 5 -- Default credits | |
| ); | |
| return new; | |
| end; | |
| $$ language plpgsql security definer; | |
| -- Create a trigger to call the function on new user creation | |
| create or replace trigger on_auth_user_created | |
| after insert on auth.users | |
| for each row execute procedure public.handle_new_user(); | |