-- Tables
create table tests (
id uuid primary key default gen_random_uuid(),
name text,
url text not null,
tasks jsonb not null,
respondent_limit int,
created_at timestamptz default now()
);
create table responses (
id uuid primary key default gen_random_uuid(),
test_id uuid references tests(id),
video_path text,
answers jsonb,
device text,
created_at timestamptz default now()
);
create table respondent_events (
id uuid primary key default gen_random_uuid(),
test_id uuid references tests(id) on delete cascade,
session_id text not null,
event_type text not null check (event_type in ('viewed', 'started', 'completed')),
device text,
created_at timestamptz default now()
);
create unique index respondent_events_session_event_idx
on respondent_events(test_id, session_id, event_type);
-- RLS
alter table tests enable row level security;
alter table responses enable row level security;
alter table respondent_events enable row level security;
create policy "read tests" on tests
for select using (true);
create policy "create tests" on tests
for insert with check (true);
create policy "read responses" on responses
for select using (true);
create policy "create responses" on responses
for insert with check (true);
create policy "update responses" on responses
for update using (true);
create policy "delete responses" on responses
for delete using (true);
create policy "delete tests" on tests
for delete using (true);
create policy "read respondent events" on respondent_events
for select using (true);
create policy "create respondent events" on respondent_events
for insert with check (true);
create policy "delete respondent events" on respondent_events
for delete using (true);
-- Storage (run in SQL editor)
insert into storage.buckets (id, name, public)
values ('videos', 'videos', true);
create policy "upload videos"
on storage.objects for insert
with check (bucket_id = 'videos');
create policy "read videos"
on storage.objects for select
using (bucket_id = 'videos');
create policy "delete videos"
on storage.objects for delete
using (bucket_id = 'videos');
3. Скопіюйте Project URL та anon key з Settings → API