-- Supabase AI Numerology Project Seed Data -- This file contains initial data for the numerology analysis platform -- Enable necessary extensions CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pgcrypto"; -- Create profiles table if it doesn't exist CREATE TABLE IF NOT EXISTS public.profiles ( id UUID REFERENCES auth.users(id) ON DELETE CASCADE PRIMARY KEY, username TEXT UNIQUE, full_name TEXT, avatar_url TEXT, birth_date DATE, birth_time TIME, birth_location TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create analysis_history table if it doesn't exist CREATE TABLE IF NOT EXISTS public.analysis_history ( id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE, analysis_type TEXT NOT NULL CHECK (analysis_type IN ('bazi', 'ziwei', 'yijing', 'wuxing')), input_data JSONB NOT NULL, result_data JSONB NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Enable Row Level Security ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY; ALTER TABLE public.analysis_history ENABLE ROW LEVEL SECURITY; -- Create policies for profiles table CREATE POLICY "Users can view own profile" ON public.profiles FOR SELECT USING (auth.uid() = id); CREATE POLICY "Users can update own profile" ON public.profiles FOR UPDATE USING (auth.uid() = id); CREATE POLICY "Users can insert own profile" ON public.profiles FOR INSERT WITH CHECK (auth.uid() = id); -- Create policies for analysis_history table CREATE POLICY "Users can view own analysis history" ON public.analysis_history FOR SELECT USING (auth.uid() = user_id); CREATE POLICY "Users can insert own analysis history" ON public.analysis_history FOR INSERT WITH CHECK (auth.uid() = user_id); -- Create indexes for better performance CREATE INDEX IF NOT EXISTS idx_analysis_history_user_id ON public.analysis_history(user_id); CREATE INDEX IF NOT EXISTS idx_analysis_history_type ON public.analysis_history(analysis_type); CREATE INDEX IF NOT EXISTS idx_analysis_history_created_at ON public.analysis_history(created_at DESC); -- Insert some sample data (optional) -- Note: This would only work if there are existing users -- INSERT INTO public.profiles (id, username, full_name) -- VALUES ('00000000-0000-0000-0000-000000000000', 'demo_user', 'Demo User') -- ON CONFLICT (id) DO NOTHING; -- Create a function to automatically create a profile when a user signs up CREATE OR REPLACE FUNCTION public.handle_new_user() RETURNS TRIGGER AS $$ BEGIN INSERT INTO public.profiles (id, username, full_name) VALUES (NEW.id, NEW.email, NEW.raw_user_meta_data->>'full_name'); RETURN NEW; END; $$ LANGUAGE plpgsql SECURITY DEFINER; -- Create trigger to automatically create profile on user signup DROP TRIGGER IF EXISTS on_auth_user_created ON auth.users; CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.handle_new_user(); -- Grant necessary permissions GRANT USAGE ON SCHEMA public TO anon, authenticated; GRANT ALL ON public.profiles TO anon, authenticated; GRANT ALL ON public.analysis_history TO anon, authenticated;