TODO: Configure OAuth providers in Supabase dashboard: - Google: Add Client ID and Secret from Google Cloud Console - GitHub: Add Client ID and Secret from GitHub Developer Settings - Set redirect URLs in Authentication → URL Configuration
59 lines
1.7 KiB
PL/PgSQL
59 lines
1.7 KiB
PL/PgSQL
-- CODE CRISPIES - Supabase Database Setup
|
|
-- Run this in Supabase Dashboard → SQL Editor → New Query
|
|
|
|
-- Drop existing objects first
|
|
DROP FUNCTION IF EXISTS delete_own_account();
|
|
DROP TABLE IF EXISTS user_progress;
|
|
DROP TABLE IF EXISTS newsletter_subscribers;
|
|
|
|
-- User progress table
|
|
CREATE TABLE user_progress (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
progress JSONB NOT NULL DEFAULT '{}',
|
|
user_code JSONB NOT NULL DEFAULT '{}',
|
|
settings JSONB NOT NULL DEFAULT '{}',
|
|
language TEXT DEFAULT 'en',
|
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
UNIQUE(user_id)
|
|
);
|
|
|
|
-- Newsletter subscribers table
|
|
CREATE TABLE newsletter_subscribers (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
email TEXT UNIQUE NOT NULL,
|
|
subscribed_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- Row Level Security
|
|
ALTER TABLE user_progress ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE newsletter_subscribers ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Users can only access their own progress
|
|
CREATE POLICY "Users can CRUD own progress"
|
|
ON user_progress FOR ALL
|
|
USING (auth.uid() = user_id)
|
|
WITH CHECK (auth.uid() = user_id);
|
|
|
|
-- Anyone can subscribe to newsletter (public insert)
|
|
CREATE POLICY "Anyone can subscribe to newsletter"
|
|
ON newsletter_subscribers FOR INSERT
|
|
WITH CHECK (true);
|
|
|
|
-- Function to delete own account (called via RPC)
|
|
CREATE OR REPLACE FUNCTION delete_own_account()
|
|
RETURNS void
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
BEGIN
|
|
-- Delete user's progress (CASCADE should handle this, but be explicit)
|
|
DELETE FROM user_progress WHERE user_id = auth.uid();
|
|
|
|
-- Delete the user from auth.users
|
|
DELETE FROM auth.users WHERE id = auth.uid();
|
|
END;
|
|
$$;
|