mirror of
https://github.com/willchen96/mike.git
synced 2026-06-08 20:25:13 +02:00
- Refine CourtListener citation verification, bulk lookup logging, and API fallback behavior - Persist cancelled chat stream output and render cancellation as the final assistant message - Add document/version deletion safety fixes and shared warning/modal UI updates - Sync document panel, case law panel, and response UI styling refinements - Harden OSS sync script to preserve local env, dependency, and generated files
189 lines
5.7 KiB
SQL
189 lines
5.7 KiB
SQL
-- OSS migration for the current backend/schema.sql diff.
|
|
--
|
|
-- This brings existing OSS Supabase databases in line with the updated fresh
|
|
-- schema: model preference columns, BYO provider expansion, per-version
|
|
-- document metadata, and CourtListener bulk lookup tables.
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- User profiles
|
|
-- ---------------------------------------------------------------------------
|
|
|
|
alter table public.user_profiles
|
|
add column if not exists title_model text,
|
|
add column if not exists quote_model text;
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- User API keys
|
|
-- ---------------------------------------------------------------------------
|
|
|
|
alter table public.user_api_keys
|
|
drop constraint if exists user_api_keys_provider_check;
|
|
|
|
alter table public.user_api_keys
|
|
add constraint user_api_keys_provider_check
|
|
check (provider in ('claude', 'gemini', 'openai', 'openrouter', 'courtlistener'));
|
|
|
|
alter table public.user_api_keys enable row level security;
|
|
|
|
drop policy if exists user_api_keys_own on public.user_api_keys;
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- Document metadata now lives on document_versions
|
|
-- ---------------------------------------------------------------------------
|
|
|
|
alter table public.document_versions
|
|
add column if not exists filename text,
|
|
add column if not exists file_type text,
|
|
add column if not exists size_bytes integer,
|
|
add column if not exists page_count integer;
|
|
|
|
do $$
|
|
begin
|
|
if exists (
|
|
select 1
|
|
from information_schema.columns
|
|
where table_schema = 'public'
|
|
and table_name = 'document_versions'
|
|
and column_name = 'display_name'
|
|
) then
|
|
update public.document_versions dv
|
|
set filename = dv.display_name
|
|
where (dv.filename is null or btrim(dv.filename) = '')
|
|
and dv.display_name is not null
|
|
and btrim(dv.display_name) <> '';
|
|
end if;
|
|
|
|
if exists (
|
|
select 1
|
|
from information_schema.columns
|
|
where table_schema = 'public'
|
|
and table_name = 'documents'
|
|
and column_name = 'filename'
|
|
) then
|
|
update public.document_versions dv
|
|
set filename = d.filename
|
|
from public.documents d
|
|
where dv.document_id = d.id
|
|
and (dv.filename is null or btrim(dv.filename) = '')
|
|
and d.filename is not null
|
|
and btrim(d.filename) <> '';
|
|
end if;
|
|
end $$;
|
|
|
|
do $$
|
|
begin
|
|
if exists (
|
|
select 1
|
|
from information_schema.columns
|
|
where table_schema = 'public'
|
|
and table_name = 'documents'
|
|
and column_name = 'file_type'
|
|
) then
|
|
update public.document_versions dv
|
|
set file_type = coalesce(nullif(btrim(dv.file_type), ''), d.file_type)
|
|
from public.documents d
|
|
where dv.document_id = d.id
|
|
and (dv.file_type is null or btrim(dv.file_type) = '');
|
|
end if;
|
|
|
|
if exists (
|
|
select 1
|
|
from information_schema.columns
|
|
where table_schema = 'public'
|
|
and table_name = 'documents'
|
|
and column_name = 'size_bytes'
|
|
) then
|
|
update public.document_versions dv
|
|
set size_bytes = d.size_bytes
|
|
from public.documents d
|
|
where dv.document_id = d.id
|
|
and dv.size_bytes is null
|
|
and d.size_bytes is not null;
|
|
end if;
|
|
|
|
if exists (
|
|
select 1
|
|
from information_schema.columns
|
|
where table_schema = 'public'
|
|
and table_name = 'documents'
|
|
and column_name = 'page_count'
|
|
) then
|
|
update public.document_versions dv
|
|
set page_count = d.page_count
|
|
from public.documents d
|
|
where dv.document_id = d.id
|
|
and dv.page_count is null
|
|
and d.page_count is not null;
|
|
end if;
|
|
end $$;
|
|
|
|
alter table public.document_versions
|
|
drop column if exists display_name;
|
|
|
|
alter table public.documents
|
|
drop column if exists filename,
|
|
drop column if exists file_type,
|
|
drop column if exists size_bytes,
|
|
drop column if exists page_count,
|
|
drop column if exists structure_tree;
|
|
|
|
do $$
|
|
begin
|
|
if not exists (
|
|
select 1
|
|
from pg_constraint
|
|
where conname = 'document_versions_doc_version_unique'
|
|
and conrelid = 'public.document_versions'::regclass
|
|
) then
|
|
alter table public.document_versions
|
|
add constraint document_versions_doc_version_unique
|
|
unique (document_id, version_number);
|
|
end if;
|
|
end;
|
|
$$;
|
|
|
|
-- ---------------------------------------------------------------------------
|
|
-- CourtListener bulk-data indexes
|
|
-- ---------------------------------------------------------------------------
|
|
|
|
create table if not exists public.courtlistener_citation_index (
|
|
id bigint primary key,
|
|
volume text not null,
|
|
reporter text not null,
|
|
page text not null,
|
|
type integer,
|
|
cluster_id bigint not null,
|
|
date_created timestamptz,
|
|
date_modified timestamptz
|
|
);
|
|
|
|
create index if not exists courtlistener_citation_lookup_idx
|
|
on public.courtlistener_citation_index(volume, reporter, page);
|
|
|
|
create index if not exists courtlistener_citation_cluster_idx
|
|
on public.courtlistener_citation_index(cluster_id);
|
|
|
|
alter table public.courtlistener_citation_index enable row level security;
|
|
|
|
drop policy if exists cl_citation_read on public.courtlistener_citation_index;
|
|
|
|
create table if not exists public.courtlistener_opinion_cluster_index (
|
|
id bigint primary key,
|
|
case_name text,
|
|
case_name_short text,
|
|
case_name_full text,
|
|
slug text,
|
|
date_filed date,
|
|
citation_count integer,
|
|
precedential_status text,
|
|
filepath_pdf_harvard text,
|
|
filepath_json_harvard text,
|
|
docket_id bigint
|
|
);
|
|
|
|
alter table public.courtlistener_opinion_cluster_index enable row level security;
|
|
|
|
drop policy if exists cl_cluster_read on public.courtlistener_opinion_cluster_index;
|
|
|
|
revoke all on public.courtlistener_citation_index from anon, authenticated;
|
|
revoke all on public.courtlistener_opinion_cluster_index from anon, authenticated;
|