-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsupabase-schema.sql
More file actions
119 lines (89 loc) · 3.84 KB
/
supabase-schema.sql
File metadata and controls
119 lines (89 loc) · 3.84 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
CREATE TABLE IF NOT EXISTS comments (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
blog_slug TEXT NOT NULL,
author TEXT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL,
likes INTEGER DEFAULT 0 NOT NULL,
liked_by TEXT[] DEFAULT '{}' NOT NULL,
parent_id UUID REFERENCES comments(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_comments_blog_slug ON comments(blog_slug);
CREATE INDEX IF NOT EXISTS idx_comments_parent_id ON comments(parent_id);
CREATE INDEX IF NOT EXISTS idx_comments_created_at ON comments(created_at DESC);
ALTER TABLE comments ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Anyone can read comments" ON comments
FOR SELECT USING (true);
CREATE POLICY "Anyone can insert comments" ON comments
FOR INSERT WITH CHECK (true);
CREATE POLICY "Anyone can update likes" ON comments
FOR UPDATE USING (true)
WITH CHECK (true);
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = TIMEZONE('utc'::text, NOW());
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE TRIGGER update_comments_updated_at
BEFORE UPDATE ON comments
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE IF NOT EXISTS blog_loves (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
blog_slug TEXT NOT NULL,
user_id TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL,
UNIQUE(blog_slug, user_id)
);
CREATE INDEX IF NOT EXISTS idx_blog_loves_blog_slug ON blog_loves(blog_slug);
CREATE INDEX IF NOT EXISTS idx_blog_loves_user_id ON blog_loves(user_id);
ALTER TABLE blog_loves ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Anyone can read blog loves" ON blog_loves
FOR SELECT USING (true);
CREATE POLICY "Anyone can insert blog loves" ON blog_loves
FOR INSERT WITH CHECK (true);
CREATE TABLE IF NOT EXISTS blog_views (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
blog_slug TEXT NOT NULL UNIQUE,
view_count INTEGER DEFAULT 0 NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL
);
ALTER TABLE blog_views ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Anyone can read blog views" ON blog_views
FOR SELECT USING (true);
CREATE POLICY "Anyone can insert blog views" ON blog_views
FOR INSERT WITH CHECK (true);
CREATE POLICY "Anyone can update blog views" ON blog_views
FOR UPDATE USING (true)
WITH CHECK (true);
CREATE TABLE IF NOT EXISTS blog_likes (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
blog_slug TEXT NOT NULL,
user_id TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL,
UNIQUE(blog_slug, user_id)
);
CREATE INDEX IF NOT EXISTS idx_blog_likes_blog_slug ON blog_likes(blog_slug);
CREATE INDEX IF NOT EXISTS idx_blog_likes_user_id ON blog_likes(user_id);
ALTER TABLE blog_likes ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Anyone can read blog likes" ON blog_likes
FOR SELECT USING (true);
CREATE POLICY "Anyone can insert blog likes" ON blog_likes
FOR INSERT WITH CHECK (true);
CREATE TABLE IF NOT EXISTS photo_loves (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
photo_id INTEGER NOT NULL,
user_id TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL,
UNIQUE(photo_id, user_id)
);
CREATE INDEX IF NOT EXISTS idx_photo_loves_photo_id ON photo_loves(photo_id);
CREATE INDEX IF NOT EXISTS idx_photo_loves_user_id ON photo_loves(user_id);
ALTER TABLE photo_loves ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Anyone can read photo loves" ON photo_loves
FOR SELECT USING (true);
CREATE POLICY "Anyone can insert photo loves" ON photo_loves
FOR INSERT WITH CHECK (true);