Spaces:
Running
Running
Pulastya B
Fix auth issues: sign out working, store signup form data, OAuth users onboarding
1d8f0c9 | -- User Profiles Table | |
| -- Stores onboarding form data for each user | |
| CREATE TABLE IF NOT EXISTS user_profiles ( | |
| id UUID DEFAULT gen_random_uuid() PRIMARY KEY, | |
| user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE, | |
| name TEXT NOT NULL, | |
| email TEXT NOT NULL, | |
| primary_goal TEXT, | |
| target_outcome TEXT, | |
| data_types TEXT[], | |
| profession TEXT, | |
| experience TEXT, | |
| industry TEXT, | |
| onboarding_completed BOOLEAN DEFAULT FALSE, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| UNIQUE(user_id) | |
| ); | |
| -- Index for faster lookups | |
| CREATE INDEX IF NOT EXISTS idx_user_profiles_user_id ON user_profiles(user_id); | |
| -- RLS (Row Level Security) Policies | |
| ALTER TABLE user_profiles ENABLE ROW LEVEL SECURITY; | |
| -- Allow users to read their own profile | |
| CREATE POLICY "Users can read own profile" ON user_profiles | |
| FOR SELECT USING (auth.uid() = user_id); | |
| -- Allow users to insert their own profile | |
| CREATE POLICY "Users can insert own profile" ON user_profiles | |
| FOR INSERT WITH CHECK (auth.uid() = user_id); | |
| -- Allow users to update their own profile | |
| CREATE POLICY "Users can update own profile" ON user_profiles | |
| FOR UPDATE USING (auth.uid() = user_id); | |
| -- Usage Analytics Table (if not exists) | |
| CREATE TABLE IF NOT EXISTS usage_analytics ( | |
| id UUID DEFAULT gen_random_uuid() PRIMARY KEY, | |
| user_id TEXT NOT NULL, | |
| user_email TEXT, | |
| session_id TEXT NOT NULL, | |
| query TEXT NOT NULL, | |
| agent_used TEXT, | |
| tools_executed TEXT[], | |
| tokens_used INTEGER, | |
| duration_ms INTEGER, | |
| success BOOLEAN NOT NULL, | |
| error_message TEXT, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_usage_analytics_user_id ON usage_analytics(user_id); | |
| CREATE INDEX IF NOT EXISTS idx_usage_analytics_created_at ON usage_analytics(created_at); | |
| -- User Sessions Table (if not exists) | |
| CREATE TABLE IF NOT EXISTS user_sessions ( | |
| id UUID DEFAULT gen_random_uuid() PRIMARY KEY, | |
| user_id TEXT NOT NULL, | |
| user_email TEXT, | |
| started_at TIMESTAMP WITH TIME ZONE NOT NULL, | |
| ended_at TIMESTAMP WITH TIME ZONE, | |
| queries_count INTEGER DEFAULT 0, | |
| browser_info TEXT, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_user_sessions_user_id ON user_sessions(user_id); | |
| CREATE INDEX IF NOT EXISTS idx_user_sessions_started_at ON user_sessions(started_at); | |
| -- RPC function for incrementing queries count | |
| CREATE OR REPLACE FUNCTION increment_session_queries(session_id UUID) | |
| RETURNS VOID AS $$ | |
| BEGIN | |
| UPDATE user_sessions | |
| SET queries_count = queries_count + 1 | |
| WHERE id = session_id; | |
| END; | |
| $$ LANGUAGE plpgsql; | |