create table public.problems
(
    id          bigint generated by default as identity,
    title       text                     not null,
    description text                     not null,
    type        character varying        not null,
    tags        character varying[]      null,
    author      uuid                     null,
    metadata    jsonb                    null,
    is_draft    boolean                  null default true,
    is_hidden   boolean                  null default false,
    created_at  timestamp with time zone null default now(),
    constraint problems_pkey primary key (id),
    constraint problems_author_fkey foreign key (author) references auth.users (id)
) tablespace pg_default;

alter table public.problems
    enable row level security;

create policy "Public problems are viewable by everyone." on problems for
    select using (true);

create table public.problem_cases
(
    id          bigint generated by default as identity,
    spec        jsonb not null,
    limitations jsonb not null,
    answer      jsonb not null,
    problem     int8  not null,
    is_hidden   bool  not null default true,
    constraint problem_cases_pkey primary key (id),
    constraint problem_cases_author_fkey foreign key (problem) references public.problems (id)
) tablespace pg_default;

alter table public.problem_cases
    enable row level security;

create policy "Public problem cases are viewable by everyone." on problem_cases for
    select using (is_hidden = false);