Desinger-System / scripts /postgres_schema.sql
o134's picture
Upload folder using huggingface_hub
1804b24 verified
Raw
History Blame Contribute Delete
5.53 kB
-- 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);