Improve profiles trigger
This commit is contained in:
parent
6ee3898a1a
commit
9a6ed205b7
1 changed files with 56 additions and 0 deletions
56
sql/34_modify_firstname_from_email.sql
Normal file
56
sql/34_modify_firstname_from_email.sql
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
-- Modify the handle_new_user trigger to extract first_name from email if not provided
|
||||
CREATE OR REPLACE FUNCTION
|
||||
public.handle_new_user()
|
||||
RETURNS TRIGGER AS
|
||||
$$
|
||||
DECLARE
|
||||
name TEXT;
|
||||
first_name TEXT;
|
||||
last_name TEXT;
|
||||
is_temp BOOLEAN;
|
||||
email_prefix TEXT;
|
||||
BEGIN
|
||||
-- Extract first_name and last_name from metadata
|
||||
first_name = new.raw_user_meta_data ->> 'first_name';
|
||||
last_name = new.raw_user_meta_data ->> 'last_name';
|
||||
|
||||
-- If first_name is not provided, extract it from email (part before @)
|
||||
IF first_name IS NULL OR first_name = '' THEN
|
||||
email_prefix = SPLIT_PART(new.email, '@', 1);
|
||||
first_name = email_prefix;
|
||||
END IF;
|
||||
|
||||
-- Determine the full name
|
||||
IF new.raw_user_meta_data ->> 'name' IS NOT NULL
|
||||
THEN
|
||||
name = new.raw_user_meta_data ->> 'name';
|
||||
-- If name is provided but not first/last, try to split it
|
||||
IF first_name IS NULL AND last_name IS NULL AND name IS NOT NULL THEN
|
||||
first_name = SPLIT_PART(name, ' ', 1);
|
||||
IF ARRAY_LENGTH(STRING_TO_ARRAY(name, ' '), 1) > 1 THEN
|
||||
last_name = SUBSTRING(name FROM LENGTH(SPLIT_PART(name, ' ', 1)) + 2);
|
||||
END IF;
|
||||
END IF;
|
||||
ELSE
|
||||
name = CONCAT(first_name, ' ', last_name);
|
||||
END IF;
|
||||
|
||||
-- Check if the role is 'invited_user' in app_metadata
|
||||
IF COALESCE(new.raw_user_meta_data->>'role', '') = 'invited_user'
|
||||
THEN
|
||||
is_temp = TRUE;
|
||||
ELSE
|
||||
is_temp = FALSE;
|
||||
END IF;
|
||||
|
||||
INSERT INTO public.profiles (id, name, email, avatar_url, first_name, last_name, is_temporary)
|
||||
VALUES (new.id, name, new.email, new.raw_user_meta_data ->> 'avatar_url', first_name, last_name, is_temp);
|
||||
|
||||
RETURN new;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
-- Add comment to document the change
|
||||
COMMENT ON FUNCTION public.handle_new_user() IS
|
||||
'Trigger function that creates a profile when a new user is created. Sets is_temporary=true for users with app_metadata.role=invited_user. Extracts first_name from email prefix (before @) if not provided in metadata.';
|
||||
|
||||
Loading…
Reference in a new issue