-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase_setup.sql
More file actions
96 lines (88 loc) · 3.56 KB
/
Copy pathdatabase_setup.sql
File metadata and controls
96 lines (88 loc) · 3.56 KB
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
-- 1. Create workspaces table
CREATE TABLE IF NOT EXISTS workspaces (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
name TEXT NOT NULL,
owner_id UUID NOT NULL, -- references auth.users(id)
plan TEXT DEFAULT 'Free',
logo_url TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 2. Create workspace_members table
CREATE TABLE IF NOT EXISTS workspace_members (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
workspace_id UUID REFERENCES workspaces(id) ON DELETE CASCADE,
user_id UUID NOT NULL, -- references auth.users(id)
role TEXT DEFAULT 'member', -- owner, admin, member
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
UNIQUE(workspace_id, user_id)
);
-- 3. Create user_usage table
CREATE TABLE IF NOT EXISTS user_usage (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
workspace_id UUID REFERENCES workspaces(id) ON DELETE CASCADE,
user_id UUID NOT NULL,
plan_name TEXT DEFAULT 'Free',
posts_limit INTEGER DEFAULT 10,
posts_generated INTEGER DEFAULT 0,
trial_start_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
UNIQUE(workspace_id)
);
-- 4. Create brand_settings table
CREATE TABLE IF NOT EXISTS brand_settings (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
workspace_id UUID REFERENCES workspaces(id) ON DELETE CASCADE,
user_id UUID NOT NULL,
brand_name TEXT,
brand_description TEXT,
brand_voice TEXT,
tone TEXT,
target_audience TEXT,
writing_style_linkedin TEXT,
writing_style_twitter TEXT,
writing_style_threads TEXT,
key_topics TEXT,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
UNIQUE(workspace_id)
);
-- 5. Create content_library table
CREATE TABLE IF NOT EXISTS content_library (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
workspace_id UUID REFERENCES workspaces(id) ON DELETE CASCADE,
user_id UUID NOT NULL,
platform TEXT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 6. Create billing_history table
CREATE TABLE IF NOT EXISTS billing_history (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
user_id UUID NOT NULL,
plan_name TEXT NOT NULL,
amount TEXT NOT NULL,
status TEXT DEFAULT 'Paid',
date TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Enable RLS
ALTER TABLE workspaces ENABLE ROW LEVEL SECURITY;
ALTER TABLE workspace_members ENABLE ROW LEVEL SECURITY;
ALTER TABLE user_usage ENABLE ROW LEVEL SECURITY;
ALTER TABLE brand_settings ENABLE ROW LEVEL SECURITY;
ALTER TABLE content_library ENABLE ROW LEVEL SECURITY;
ALTER TABLE billing_history ENABLE ROW LEVEL SECURITY;
-- Basic Policies (Simplified - allow all authenticated users for now)
CREATE POLICY "Allow all for authenticated" ON workspaces FOR ALL USING (true);
CREATE POLICY "Allow all for authenticated" ON workspace_members FOR ALL USING (true);
CREATE POLICY "Allow all for authenticated" ON user_usage FOR ALL USING (true);
CREATE POLICY "Allow all for authenticated" ON brand_settings FOR ALL USING (true);
CREATE POLICY "Allow all for authenticated" ON content_library FOR ALL USING (true);
CREATE POLICY "Allow all for authenticated" ON billing_history FOR ALL USING (true);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_wm_user_id ON workspace_members(user_id);
CREATE INDEX IF NOT EXISTS idx_bs_ws_id ON brand_settings(workspace_id);
CREATE INDEX IF NOT EXISTS idx_cl_ws_id ON content_library(workspace_id);