File size: 5,529 Bytes
1804b24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
-- 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);