47 lines
1.6 KiB
PL/PgSQL
47 lines
1.6 KiB
PL/PgSQL
-- OAuth User Synchronization
|
|
-- This migration adds functionality to automatically create user profiles when users sign up via OAuth
|
|
|
|
-- =============================================
|
|
-- 1. CREATE FUNCTION FOR OAUTH USER AUTO-PROFILE CREATION
|
|
-- =============================================
|
|
|
|
CREATE OR REPLACE FUNCTION public.handle_new_oauth_user()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
-- Check if user profile already exists
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM public.user_profiles WHERE id = NEW.id
|
|
) THEN
|
|
-- Create user profile with default active status
|
|
INSERT INTO public.user_profiles (id, email, status)
|
|
VALUES (
|
|
NEW.id,
|
|
NEW.email,
|
|
'active'
|
|
)
|
|
ON CONFLICT (id) DO NOTHING;
|
|
END IF;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
|
|
-- =============================================
|
|
-- 2. CREATE TRIGGER FOR NEW AUTH USERS
|
|
-- =============================================
|
|
|
|
-- Drop the trigger if it exists to avoid conflicts
|
|
DROP TRIGGER IF EXISTS on_auth_user_created ON auth.users;
|
|
|
|
-- Create trigger that fires after a new user is created in auth.users
|
|
CREATE TRIGGER on_auth_user_created
|
|
AFTER INSERT ON auth.users
|
|
FOR EACH ROW EXECUTE FUNCTION public.handle_new_oauth_user();
|
|
|
|
-- =============================================
|
|
-- 3. COMMENT FOR DOCUMENTATION
|
|
-- =============================================
|
|
|
|
COMMENT ON FUNCTION public.handle_new_oauth_user() IS
|
|
'Automatically creates a user profile in public.user_profiles when a new user is created via OAuth in auth.users. This ensures OAuth users are immediately accessible in the application without manual provisioning.';
|