-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsupabase_setup.sql
More file actions
152 lines (139 loc) · 6.65 KB
/
Copy pathsupabase_setup.sql
File metadata and controls
152 lines (139 loc) · 6.65 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
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
-- =====================================================================
-- CalorieAI — complete database setup for a FRESH Supabase project.
-- Run this whole file once in the Supabase SQL Editor.
-- All tables key on the Clerk user id (text) and use RLS that matches
-- the Clerk JWT's `sub` claim: auth.jwt() ->> 'sub'.
-- =====================================================================
-- ---------- daily_meals ----------
CREATE TABLE IF NOT EXISTS daily_meals (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id text NOT NULL,
date date NOT NULL DEFAULT CURRENT_DATE,
meal_type text NOT NULL,
meal_name text NOT NULL,
calories numeric NOT NULL DEFAULT 0,
protein numeric NOT NULL DEFAULT 0,
carbs numeric NOT NULL DEFAULT 0,
fat numeric NOT NULL DEFAULT 0,
fiber numeric NOT NULL DEFAULT 0,
sugar numeric NOT NULL DEFAULT 0,
sodium numeric NOT NULL DEFAULT 0,
confidence_score numeric,
health_score int,
image_url text,
created_at timestamptz DEFAULT now()
);
ALTER TABLE daily_meals ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Users can view their own meals" ON daily_meals;
DROP POLICY IF EXISTS "Users can insert their own meals" ON daily_meals;
DROP POLICY IF EXISTS "Users can update their own meals" ON daily_meals;
DROP POLICY IF EXISTS "Users can delete their own meals" ON daily_meals;
CREATE POLICY "Users can view their own meals" ON daily_meals
FOR SELECT USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can insert their own meals" ON daily_meals
FOR INSERT WITH CHECK (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can update their own meals" ON daily_meals
FOR UPDATE USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can delete their own meals" ON daily_meals
FOR DELETE USING (user_id = (auth.jwt() ->> 'sub'));
-- ---------- user_profiles ----------
CREATE TABLE IF NOT EXISTS user_profiles (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id text NOT NULL UNIQUE,
gender text,
workout_frequency text,
calorie_goal int DEFAULT 0,
protein_goal int DEFAULT 0,
carbs_goal int DEFAULT 0,
fats_goal int DEFAULT 0,
desired_weight numeric,
current_weight numeric,
health_score int,
created_at timestamptz DEFAULT now()
);
ALTER TABLE user_profiles ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Users can view their own profile" ON user_profiles;
DROP POLICY IF EXISTS "Users can insert their own profile" ON user_profiles;
DROP POLICY IF EXISTS "Users can update their own profile" ON user_profiles;
CREATE POLICY "Users can view their own profile" ON user_profiles
FOR SELECT USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can insert their own profile" ON user_profiles
FOR INSERT WITH CHECK (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can update their own profile" ON user_profiles
FOR UPDATE USING (user_id = (auth.jwt() ->> 'sub'));
-- ---------- user_streaks ----------
CREATE TABLE IF NOT EXISTS user_streaks (
user_id text PRIMARY KEY,
streak_start_date date NOT NULL DEFAULT CURRENT_DATE,
current_streak int NOT NULL DEFAULT 0,
longest_streak int NOT NULL DEFAULT 0,
last_log_date date
);
ALTER TABLE user_streaks ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Users can view their own streaks" ON user_streaks;
DROP POLICY IF EXISTS "Users can insert their own streaks" ON user_streaks;
DROP POLICY IF EXISTS "Users can update their own streaks" ON user_streaks;
CREATE POLICY "Users can view their own streaks" ON user_streaks
FOR SELECT USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can insert their own streaks" ON user_streaks
FOR INSERT WITH CHECK (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can update their own streaks" ON user_streaks
FOR UPDATE USING (user_id = (auth.jwt() ->> 'sub'));
-- ---------- user_badges ----------
CREATE TABLE IF NOT EXISTS user_badges (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id text NOT NULL,
badge_name text NOT NULL,
day_requirement int,
achieved_at timestamptz DEFAULT now()
);
ALTER TABLE user_badges ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Users can view their own badges" ON user_badges;
DROP POLICY IF EXISTS "Users can insert their own badges" ON user_badges;
CREATE POLICY "Users can view their own badges" ON user_badges
FOR SELECT USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can insert their own badges" ON user_badges
FOR INSERT WITH CHECK (user_id = (auth.jwt() ->> 'sub'));
-- ---------- weight_logs ----------
CREATE TABLE IF NOT EXISTS weight_logs (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id text NOT NULL,
weight numeric NOT NULL,
date date NOT NULL DEFAULT CURRENT_DATE,
created_at timestamptz DEFAULT now()
);
ALTER TABLE weight_logs ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Users can view their own weight logs" ON weight_logs;
DROP POLICY IF EXISTS "Users can insert their own weight logs" ON weight_logs;
DROP POLICY IF EXISTS "Users can update their own weight logs" ON weight_logs;
DROP POLICY IF EXISTS "Users can delete their own weight logs" ON weight_logs;
CREATE POLICY "Users can view their own weight logs" ON weight_logs
FOR SELECT USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can insert their own weight logs" ON weight_logs
FOR INSERT WITH CHECK (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can update their own weight logs" ON weight_logs
FOR UPDATE USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can delete their own weight logs" ON weight_logs
FOR DELETE USING (user_id = (auth.jwt() ->> 'sub'));
-- ---------- water_logs ----------
CREATE TABLE IF NOT EXISTS water_logs (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id text NOT NULL,
date date NOT NULL DEFAULT CURRENT_DATE,
glasses int NOT NULL DEFAULT 0,
created_at timestamptz DEFAULT now(),
UNIQUE (user_id, date)
);
ALTER TABLE water_logs ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Users can view their own water logs" ON water_logs;
DROP POLICY IF EXISTS "Users can insert their own water logs" ON water_logs;
DROP POLICY IF EXISTS "Users can update their own water logs" ON water_logs;
DROP POLICY IF EXISTS "Users can delete their own water logs" ON water_logs;
CREATE POLICY "Users can view their own water logs" ON water_logs
FOR SELECT USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can insert their own water logs" ON water_logs
FOR INSERT WITH CHECK (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can update their own water logs" ON water_logs
FOR UPDATE USING (user_id = (auth.jwt() ->> 'sub'));
CREATE POLICY "Users can delete their own water logs" ON water_logs
FOR DELETE USING (user_id = (auth.jwt() ->> 'sub'));