Spaces:
Running
Running
| -- 1. Add missing columns if they don't exist | |
| DO $$ | |
| BEGIN | |
| IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'full_name') THEN | |
| ALTER TABLE public.users ADD COLUMN full_name text; | |
| END IF; | |
| IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'avatar_url') THEN | |
| ALTER TABLE public.users ADD COLUMN avatar_url text; | |
| END IF; | |
| IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'credits') THEN | |
| ALTER TABLE public.users ADD COLUMN credits integer default 5; | |
| END IF; | |
| END $$; | |
| -- 2. Create the Trigger Function (Updated to be safe) | |
| create or replace function public.handle_new_user() | |
| returns trigger as $$ | |
| begin | |
| insert into public.users (id, email, full_name, avatar_url, credits) | |
| values ( | |
| new.id, | |
| new.email, | |
| new.raw_user_meta_data->>'full_name', | |
| new.raw_user_meta_data->>'avatar_url', | |
| 5 | |
| ) | |
| ON CONFLICT (id) DO UPDATE SET | |
| email = EXCLUDED.email, | |
| full_name = EXCLUDED.full_name, | |
| avatar_url = EXCLUDED.avatar_url; | |
| return new; | |
| end; | |
| $$ language plpgsql security definer; | |
| -- 3. Create the Trigger | |
| drop trigger if exists on_auth_user_created on auth.users; | |
| create trigger on_auth_user_created | |
| after insert on auth.users | |
| for each row execute procedure public.handle_new_user(); | |
| -- 4. Backfill existing users | |
| insert into public.users (id, email, full_name, avatar_url, credits) | |
| select | |
| id, | |
| email, | |
| raw_user_meta_data->>'full_name', | |
| raw_user_meta_data->>'avatar_url', | |
| 5 | |
| from auth.users | |
| where id not in (select id from public.users); | |