summaryrefslogtreecommitdiff
path: root/makima/migrations/20250110000007_create_auth_trigger.sql
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-06 04:08:11 +0000
committersoryu <soryu@soryu.co>2026-01-11 03:01:13 +0000
commit8b17a175c3e7e27b789812eba4e3cd760beadb10 (patch)
tree7864dcaa2fa9db47fdfd4e8bfdb0b1dde832aa33 /makima/migrations/20250110000007_create_auth_trigger.sql
parentf79c416c58557d2f946aa5332989afdfa8c021cd (diff)
downloadsoryu-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.sql63
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';