forked from heyabhishekbajpai/SkillIssue
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsupabase_schema_backup.sql
More file actions
176 lines (153 loc) · 6 KB
/
Copy pathsupabase_schema_backup.sql
File metadata and controls
176 lines (153 loc) · 6 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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
-- ============================================================
-- Skill Issue — Supabase Schema Backup
-- Project: dbrjnrgfuxvdmrzbhnru (ap-south-1)
-- Exported: 2026-02-27
-- ============================================================
-- Run this SQL in your NEW Supabase project's SQL Editor to
-- recreate the entire schema from scratch.
-- ============================================================
-- ============================================================
-- EXTENSIONS
-- ============================================================
-- uuid_generate_v4() is used for default IDs (available via
-- the pgcrypto / uuid-ossp extension on Supabase by default)
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- ============================================================
-- TABLE: public.users
-- ============================================================
CREATE TABLE IF NOT EXISTS public.users (
id UUID NOT NULL,
username TEXT NOT NULL UNIQUE,
email TEXT,
avatar_url TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
bio TEXT,
display_name TEXT,
CONSTRAINT users_pkey PRIMARY KEY (id),
CONSTRAINT users_id_fkey FOREIGN KEY (id) REFERENCES auth.users (id)
);
-- Enable Row Level Security
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
-- Indexes
CREATE INDEX IF NOT EXISTS users_username_idx ON public.users USING btree (username);
-- Note: the UNIQUE constraint already creates users_username_key index automatically
-- RLS Policies
CREATE POLICY "Usernames are public"
ON public.users
FOR SELECT
TO public
USING (true);
CREATE POLICY "Users manage own profile"
ON public.users
FOR ALL
TO public
USING (auth.uid() = id)
WITH CHECK (auth.uid() = id);
-- ============================================================
-- TABLE: public.skills
-- ============================================================
CREATE TABLE IF NOT EXISTS public.skills (
id UUID NOT NULL DEFAULT extensions.uuid_generate_v4(),
user_id UUID NOT NULL,
title TEXT NOT NULL,
content TEXT NOT NULL,
tags TEXT[] DEFAULT '{}'::text[],
visibility TEXT NOT NULL DEFAULT 'private'
CONSTRAINT skills_visibility_check CHECK (visibility = ANY (ARRAY['public'::text, 'private'::text])),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
copy_count INTEGER NOT NULL DEFAULT 0,
download_count INTEGER NOT NULL DEFAULT 0,
star_count INTEGER NOT NULL DEFAULT 0,
description TEXT,
category TEXT,
CONSTRAINT skills_pkey PRIMARY KEY (id),
CONSTRAINT skills_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users (id)
);
-- Enable Row Level Security
ALTER TABLE public.skills ENABLE ROW LEVEL SECURITY;
-- Indexes
CREATE INDEX IF NOT EXISTS skills_created_at_idx ON public.skills USING btree (created_at DESC);
CREATE INDEX IF NOT EXISTS skills_user_id_idx ON public.skills USING btree (user_id);
CREATE INDEX IF NOT EXISTS skills_visibility_idx ON public.skills USING btree (visibility);
-- RLS Policies
CREATE POLICY "Public skills are visible to everyone"
ON public.skills
FOR SELECT
TO public
USING (visibility = 'public'::text);
CREATE POLICY "Users can manage their own skills"
ON public.skills
FOR ALL
TO public
USING (auth.uid() = user_id)
WITH CHECK (auth.uid() = user_id);
-- ============================================================
-- FUNCTION: set_updated_at()
-- Automatically keeps updated_at in sync on every UPDATE.
-- ============================================================
CREATE OR REPLACE FUNCTION public.set_updated_at()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
begin
new.updated_at = now();
return new;
end;
$$;
-- ============================================================
-- TRIGGER: skills_set_updated_at
-- ============================================================
CREATE TRIGGER skills_set_updated_at
BEFORE UPDATE ON public.skills
FOR EACH ROW
EXECUTE FUNCTION public.set_updated_at();
-- ============================================================
-- FUNCTION: rls_auto_enable (event trigger — informational)
-- This is a Supabase-managed event trigger that auto-enables
-- RLS on new tables created in the public schema.
-- It is managed by Supabase internally; you do NOT need to
-- recreate it manually — new Supabase projects already have
-- this in place.
-- Keeping it here for documentation purposes only.
-- ============================================================
/*
CREATE OR REPLACE FUNCTION public.rls_auto_enable()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
cmd record;
BEGIN
FOR cmd IN
SELECT *
FROM pg_event_trigger_ddl_commands()
WHERE command_tag IN ('CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO')
AND object_type IN ('table','partitioned table')
LOOP
IF cmd.schema_name IS NOT NULL AND cmd.schema_name IN ('public')
AND cmd.schema_name NOT IN ('pg_catalog','information_schema')
AND cmd.schema_name NOT LIKE 'pg_toast%'
AND cmd.schema_name NOT LIKE 'pg_temp%' THEN
BEGIN
EXECUTE format('alter table if exists %s enable row level security', cmd.object_identity);
RAISE LOG 'rls_auto_enable: enabled RLS on %', cmd.object_identity;
EXCEPTION
WHEN OTHERS THEN
RAISE LOG 'rls_auto_enable: failed to enable RLS on %', cmd.object_identity;
END;
ELSE
RAISE LOG 'rls_auto_enable: skip % (either system schema or not in enforced list: %.)', cmd.object_identity, cmd.schema_name;
END IF;
END LOOP;
END;
$$;
*/
-- ============================================================
-- DONE
-- To apply this to a new project:
-- 1. Open your new Supabase project's SQL Editor
-- 2. Paste the contents of this file and run it
-- 3. Update your .env (VITE_SUPABASE_URL + VITE_SUPABASE_ANON_KEY)
-- with the new project's credentials
-- ============================================================