Files
Jyotisha/frontend/supabase/migrations/20260715030000_user_profiles_chat_sessions.sql
T
2026-07-15 22:23:17 +08:00

81 lines
2.6 KiB
PL/PgSQL

begin;
alter table public.profiles
add column if not exists name text,
add column if not exists birth_date date,
add column if not exists birth_time time without time zone,
add column if not exists country_code text,
add column if not exists province_code text,
add column if not exists city_code text,
add column if not exists district_code text;
alter table public.profiles enable row level security;
drop policy if exists profiles_update_own on public.profiles;
create policy profiles_update_own
on public.profiles
for update
to authenticated
using ((select auth.uid()) = id)
with check ((select auth.uid()) = id);
revoke update on table public.profiles from anon, authenticated;
grant update (
name,
birth_date,
birth_time,
country_code,
province_code,
city_code,
district_code,
updated_at
) on table public.profiles to authenticated;
create table if not exists public.chat_sessions (
id uuid primary key default gen_random_uuid(),
user_id uuid not null references auth.users(id) on delete cascade,
title text not null default '新对话',
theme text not null default 'general'
check (theme in ('career', 'marriage', 'timing', 'general')),
messages jsonb not null default '[]'::jsonb
check (jsonb_typeof(messages) = 'array'),
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
create index if not exists chat_sessions_user_updated_at_idx
on public.chat_sessions (user_id, updated_at desc);
alter table public.chat_sessions enable row level security;
drop policy if exists chat_sessions_select_own on public.chat_sessions;
create policy chat_sessions_select_own
on public.chat_sessions
for select
to authenticated
using ((select auth.uid()) = user_id);
drop policy if exists chat_sessions_insert_own on public.chat_sessions;
create policy chat_sessions_insert_own
on public.chat_sessions
for insert
to authenticated
with check ((select auth.uid()) = user_id);
drop policy if exists chat_sessions_update_own on public.chat_sessions;
create policy chat_sessions_update_own
on public.chat_sessions
for update
to authenticated
using ((select auth.uid()) = user_id)
with check ((select auth.uid()) = user_id);
revoke all on table public.chat_sessions from anon, authenticated, service_role;
grant select on table public.chat_sessions to authenticated;
grant insert (id, user_id, title, theme, messages, updated_at)
on table public.chat_sessions to authenticated;
grant update (title, theme, messages, updated_at)
on table public.chat_sessions to authenticated;
commit;