mirror of
https://github.com/patdelphi/suanming.git
synced 2026-03-12 03:14:41 +08:00
feat: 添加Supabase本地开发环境配置和Edge Functions
This commit is contained in:
82
supabase/seed.sql
Normal file
82
supabase/seed.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user