mike/backend/migrations/20260710_01_library_documents.sql
2026-07-16 20:07:12 +08:00

71 lines
2 KiB
SQL

-- Migration date: 2026-07-10
alter table public.documents
add column if not exists library_kind text default 'file';
update public.documents
set library_kind = 'file'
where library_kind is null;
alter table public.documents
alter column library_kind set default 'file',
alter column library_kind set not null;
do $$
begin
if not exists (
select 1
from pg_constraint
where conname = 'documents_library_kind_check'
and conrelid = 'public.documents'::regclass
) then
alter table public.documents
add constraint documents_library_kind_check
check (library_kind in ('file', 'template'));
end if;
end;
$$;
create table if not exists public.library_folders (
id uuid primary key default gen_random_uuid(),
user_id text not null,
library_kind text not null default 'file',
name text not null,
parent_folder_id uuid references public.library_folders(id) on delete cascade,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now(),
constraint library_folders_kind_check
check (library_kind in ('file', 'template'))
);
alter table public.documents
add column if not exists library_folder_id uuid;
do $$
begin
if not exists (
select 1
from pg_constraint
where conname = 'documents_library_folder_id_fkey'
and conrelid = 'public.documents'::regclass
) then
alter table public.documents
add constraint documents_library_folder_id_fkey
foreign key (library_folder_id)
references public.library_folders(id)
on delete set null;
end if;
end;
$$;
create index if not exists idx_library_folders_user_kind
on public.library_folders(user_id, library_kind);
create index if not exists idx_library_folders_parent
on public.library_folders(parent_folder_id);
create index if not exists idx_documents_library_kind_folder
on public.documents(user_id, library_kind, library_folder_id)
where project_id is null;
revoke all on public.library_folders from anon, authenticated;