Spaces:
Runtime error
Runtime error
| -- Supabase Postgres Schema Migration | |
| -- Generated based on Drizzle SQLite schema | |
| -- STRICT RLS VERSION (No legacy access) | |
| -- 1. Clients Table | |
| CREATE TABLE IF NOT EXISTS clients ( | |
| id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, | |
| name TEXT NOT NULL, | |
| email TEXT, | |
| phone TEXT, | |
| company TEXT, | |
| notes TEXT, | |
| user_id UUID NOT NULL, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- 2. Projects Table | |
| CREATE TABLE IF NOT EXISTS projects ( | |
| id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, | |
| title TEXT NOT NULL, | |
| description TEXT, | |
| client_id INTEGER REFERENCES clients(id) ON DELETE SET NULL, | |
| status TEXT NOT NULL DEFAULT 'briefing', | |
| priority TEXT NOT NULL DEFAULT 'medium', | |
| budget DOUBLE PRECISION, | |
| deadline TEXT, | |
| drive_url TEXT, | |
| plan_url TEXT, | |
| user_id UUID NOT NULL, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- 3. Tasks Table | |
| CREATE TABLE IF NOT EXISTS tasks ( | |
| id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, | |
| project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE, | |
| title TEXT NOT NULL, | |
| done BOOLEAN NOT NULL DEFAULT FALSE, | |
| due_date TEXT, | |
| user_id UUID NOT NULL, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- 4. Time Entries Table | |
| CREATE TABLE IF NOT EXISTS time_entries ( | |
| id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, | |
| project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE, | |
| description TEXT, | |
| hours DOUBLE PRECISION NOT NULL, | |
| date TEXT NOT NULL, | |
| user_id UUID NOT NULL, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- 5. Briefs Table | |
| CREATE TABLE IF NOT EXISTS briefs ( | |
| id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, | |
| title TEXT NOT NULL, | |
| category TEXT, | |
| content TEXT NOT NULL, | |
| user_id UUID NOT NULL, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| -- Enable RLS on all tables | |
| ALTER TABLE clients ENABLE ROW LEVEL SECURITY; | |
| ALTER TABLE projects ENABLE ROW LEVEL SECURITY; | |
| ALTER TABLE tasks ENABLE ROW LEVEL SECURITY; | |
| ALTER TABLE time_entries ENABLE ROW LEVEL SECURITY; | |
| ALTER TABLE briefs ENABLE ROW LEVEL SECURITY; | |
| -- Create STRICT RLS Policies (Explicit SELECT, INSERT, UPDATE, DELETE) | |
| -- Normal users should only access rows where user_id = auth.uid() | |
| -- 1. Clients Policies | |
| -- إضافة سياسة لتصفية البيانات الخاصة بكل مستخدم | |
| CREATE POLICY select_policy | |
| ON clients | |
| FOR SELECT | |
| USING (auth.uid() = user_id); | |
| -- إضافة سياسة لإدخال البيانات | |
| CREATE POLICY insert_policy | |
| ON clients | |
| FOR INSERT | |
| WITH CHECK (auth.uid() = user_id); | |
| -- سياسة لتحديث البيانات | |
| CREATE POLICY update_policy | |
| ON clients | |
| FOR UPDATE | |
| USING (auth.uid() = user_id); | |
| -- سياسة لحذف البيانات | |
| CREATE POLICY delete_policy | |
| ON clients | |
| FOR DELETE | |
| USING (auth.uid() = user_id); | |
| -- 2. Projects Policies | |
| -- إضافة سياسة لتصفية البيانات الخاصة بكل مستخدم | |
| CREATE POLICY select_policy | |
| ON projects | |
| FOR SELECT | |
| USING (auth.uid() = user_id); | |
| -- إضافة سياسة لإدخال البيانات | |
| CREATE POLICY insert_policy | |
| ON projects | |
| FOR INSERT | |
| WITH CHECK (auth.uid() = user_id); | |
| -- سياسة لتحديث البيانات | |
| CREATE POLICY update_policy | |
| ON projects | |
| FOR UPDATE | |
| USING (auth.uid() = user_id); | |
| -- سياسة لحذف البيانات | |
| CREATE POLICY delete_policy | |
| ON projects | |
| FOR DELETE | |
| USING (auth.uid() = user_id); | |
| -- 3. Tasks Policies | |
| -- إضافة سياسة لتصفية البيانات الخاصة بكل مستخدم | |
| CREATE POLICY select_policy | |
| ON tasks | |
| FOR SELECT | |
| USING (auth.uid() = user_id); | |
| -- إضافة سياسة لإدخال البيانات | |
| CREATE POLICY insert_policy | |
| ON tasks | |
| FOR INSERT | |
| WITH CHECK (auth.uid() = user_id); | |
| -- سياسة لتحديث البيانات | |
| CREATE POLICY update_policy | |
| ON tasks | |
| FOR UPDATE | |
| USING (auth.uid() = user_id); | |
| -- سياسة لحذف البيانات | |
| CREATE POLICY delete_policy | |
| ON tasks | |
| FOR DELETE | |
| USING (auth.uid() = user_id); | |
| -- 4. Time Entries Policies | |
| -- إضافة سياسة لتصفية البيانات الخاصة بكل مستخدم | |
| CREATE POLICY select_policy | |
| ON time_entries | |
| FOR SELECT | |
| USING (auth.uid() = user_id); | |
| -- إضافة سياسة لإدخال البيانات | |
| CREATE POLICY insert_policy | |
| ON time_entries | |
| FOR INSERT | |
| WITH CHECK (auth.uid() = user_id); | |
| -- سياسة لتحديث البيانات | |
| CREATE POLICY update_policy | |
| ON time_entries | |
| FOR UPDATE | |
| USING (auth.uid() = user_id); | |
| -- سياسة لحذف البيانات | |
| CREATE POLICY delete_policy | |
| ON time_entries | |
| FOR DELETE | |
| USING (auth.uid() = user_id); | |
| -- 5. Briefs Policies | |
| -- إضافة سياسة لتصفية البيانات الخاصة بكل مستخدم | |
| CREATE POLICY select_policy | |
| ON briefs | |
| FOR SELECT | |
| USING (auth.uid() = user_id); | |
| -- إضافة سياسة لإدخال البيانات | |
| CREATE POLICY insert_policy | |
| ON briefs | |
| FOR INSERT | |
| WITH CHECK (auth.uid() = user_id); | |
| -- سياسة لتحديث البيانات | |
| CREATE POLICY update_policy | |
| ON briefs | |
| FOR UPDATE | |
| USING (auth.uid() = user_id); | |
| -- سياسة لحذف البيانات | |
| CREATE POLICY delete_policy | |
| ON briefs | |
| FOR DELETE | |
| USING (auth.uid() = user_id); | |