diff options
| author | soryu <soryu@soryu.co> | 2026-01-06 04:08:11 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-11 03:01:13 +0000 |
| commit | 8b17a175c3e7e27b789812eba4e3cd760beadb10 (patch) | |
| tree | 7864dcaa2fa9db47fdfd4e8bfdb0b1dde832aa33 /makima/migrations/20250110000007_create_auth_trigger.sql | |
| parent | f79c416c58557d2f946aa5332989afdfa8c021cd (diff) | |
| download | soryu-8b17a175c3e7e27b789812eba4e3cd760beadb10.tar.gz soryu-8b17a175c3e7e27b789812eba4e3cd760beadb10.zip | |
Initial Control system
Diffstat (limited to 'makima/migrations/20250110000007_create_auth_trigger.sql')
| -rw-r--r-- | makima/migrations/20250110000007_create_auth_trigger.sql | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/makima/migrations/20250110000007_create_auth_trigger.sql b/makima/migrations/20250110000007_create_auth_trigger.sql new file mode 100644 index 0000000..3b3fec9 --- /dev/null +++ b/makima/migrations/20250110000007_create_auth_trigger.sql @@ -0,0 +1,63 @@ +-- Function to handle new user signup from Supabase Auth +-- This runs when a user is inserted into auth.users + +CREATE OR REPLACE FUNCTION public.handle_new_user() +RETURNS TRIGGER +LANGUAGE plpgsql +SECURITY DEFINER -- Run with elevated privileges +SET search_path = public +AS $$ +DECLARE + new_owner_id UUID; + new_group_id UUID; + user_name TEXT; +BEGIN + -- Extract display name from metadata, fallback to email + user_name := COALESCE( + NEW.raw_user_meta_data->>'full_name', + NEW.raw_user_meta_data->>'name', + split_part(NEW.email, '@', 1) + ); + + -- Create personal owner for this user + INSERT INTO public.owners (name, owner_type) + VALUES (user_name, 'personal') + RETURNING id INTO new_owner_id; + + -- Create local user record + INSERT INTO public.users (id, email, display_name, default_owner_id) + VALUES ( + NEW.id, + NEW.email, + user_name, + new_owner_id + ); + + -- Create default group for personal owner + INSERT INTO public.groups (owner_id, name, is_default) + VALUES (new_owner_id, 'Personal', true) + RETURNING id INTO new_group_id; + + -- Add user as owner of their personal group + INSERT INTO public.group_members (group_id, user_id, role) + VALUES (new_group_id, NEW.id, 'owner'); + + RETURN NEW; +EXCEPTION WHEN OTHERS THEN + -- Log error but don't fail the signup + RAISE WARNING 'handle_new_user failed for %: %', NEW.id, SQLERRM; + RETURN NEW; +END; +$$; + +-- NOTE: The trigger on auth.users must be created in the Supabase dashboard +-- or via supabase CLI because we can't directly access auth schema in migrations. +-- +-- Run this SQL in Supabase SQL Editor to create the trigger: +-- +-- CREATE TRIGGER on_auth_user_created +-- AFTER INSERT ON auth.users +-- FOR EACH ROW +-- EXECUTE FUNCTION public.handle_new_user(); + +COMMENT ON FUNCTION handle_new_user IS 'Creates owner, user, group, and membership when a new user signs up via Supabase Auth'; |
