brainstorm-ui / scripts /create-tables.sql
hsila's picture
Migrate from JSONL files to Supabase database with secure RLS policies
2451d08
-- ==========================================
-- Speaking and Writing Tasks Tables
-- Run this SQL in the Supabase dashboard SQL editor
-- ==========================================
-- Create speaking_tasks table
CREATE TABLE speaking_tasks (
id BIGINT NOT NULL,
task_type TEXT NOT NULL,
task_description TEXT,
rephrased_task TEXT,
vocabulary JSONB,
response TEXT,
response_alternative TEXT,
brainstorm JSONB,
brainstorm_alternative JSONB,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
PRIMARY KEY (id, task_type) -- COMPOSITE PRIMARY KEY - ALLOWS SAME ID WITH DIFFERENT TASK_TYPES
);
-- Create index for task_type filtering (useful for your app)
CREATE INDEX IF NOT EXISTS speaking_tasks_task_type_idx
ON speaking_tasks (task_type);
-- Enable Row Level Security
ALTER TABLE speaking_tasks ENABLE ROW LEVEL SECURITY;
-- RLS policies for speaking_tasks
CREATE POLICY "Allow read access to authenticated users" ON speaking_tasks
FOR SELECT USING (auth.role() = 'authenticated');
CREATE POLICY "Allow insert to service role" ON speaking_tasks
FOR INSERT WITH CHECK (auth.role() = 'service_role');
CREATE POLICY "Allow update/delete to service role" ON speaking_tasks
FOR ALL USING (auth.role() = 'service_role');
-- ==========================================
-- Create writing_tasks table
CREATE TABLE writing_tasks (
id BIGINT NOT NULL,
task_type TEXT NOT NULL,
task_description TEXT,
rephrased_task TEXT,
vocabulary JSONB,
response TEXT,
response_alternative TEXT,
brainstorm JSONB,
brainstorm_alternative JSONB,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
PRIMARY KEY (id, task_type) -- COMPOSITE PRIMARY KEY - ALLOWS SAME ID WITH DIFFERENT TASK_TYPES
);
-- Create index for task_type filtering (useful for your app)
CREATE INDEX IF NOT EXISTS writing_tasks_task_type_idx
ON writing_tasks (task_type);
-- Enable Row Level Security
ALTER TABLE writing_tasks ENABLE ROW LEVEL SECURITY;
-- RLS policies for writing_tasks
CREATE POLICY "Allow read access to authenticated users" ON writing_tasks
FOR SELECT USING (auth.role() = 'authenticated');
CREATE POLICY "Allow insert to service role" ON writing_tasks
FOR INSERT WITH CHECK (auth.role() = 'service_role');
CREATE POLICY "Allow update/delete to service role" ON writing_tasks
FOR ALL USING (auth.role() = 'service_role');
-- ==========================================
-- Verification Queries (run these after creation)
-- ==========================================
-- Check if tables exist
SELECT table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('speaking_tasks', 'writing_tasks');
-- Check indexes
SELECT indexname, tablename
FROM pg_indexes
WHERE tablename IN ('speaking_tasks', 'writing_tasks')
AND schemaname = 'public';
-- Check RLS policies
SELECT schemaname, tablename, policyname, permissive, roles, cmd, qual
FROM pg_policies
WHERE tablename IN ('speaking_tasks', 'writing_tasks');