38 lines
1.0 KiB
PL/PgSQL
38 lines
1.0 KiB
PL/PgSQL
-- Profiles table (extends Supabase auth.users)
|
|
create table profiles (
|
|
id uuid primary key references auth.users(id) on delete cascade,
|
|
display_name text,
|
|
locale text not null default 'en',
|
|
currency text not null default 'EUR',
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now()
|
|
);
|
|
|
|
alter table profiles enable row level security;
|
|
|
|
create policy "Users can read own profile"
|
|
on profiles for select
|
|
using (id = auth.uid());
|
|
|
|
create policy "Users can update own profile"
|
|
on profiles for update
|
|
using (id = auth.uid())
|
|
with check (id = auth.uid());
|
|
|
|
create policy "Users can insert own profile"
|
|
on profiles for insert
|
|
with check (id = auth.uid());
|
|
|
|
-- Auto-create profile on user signup
|
|
create or replace function handle_new_user()
|
|
returns trigger as $$
|
|
begin
|
|
insert into profiles (id) values (new.id);
|
|
return new;
|
|
end;
|
|
$$ language plpgsql security definer;
|
|
|
|
create trigger on_auth_user_created
|
|
after insert on auth.users
|
|
for each row execute function handle_new_user();
|