mirror of
https://github.com/patdelphi/suanming.git
synced 2026-02-27 21:23:12 +08:00
82 lines
3.2 KiB
PL/PgSQL
82 lines
3.2 KiB
PL/PgSQL
-- 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; |