fix(auth): corregir setup_first_admin — psql vars no funcionan en DO $$

Reescribir con CTE INSERT...RETURNING para encadenar auth.users + user_roles
en una sola sentencia SQL plana donde :variable sí funciona.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
markosbenitez
2026-06-27 09:47:38 -03:00
parent a484ba7849
commit 44d1f4b9d9

View File

@@ -6,21 +6,15 @@
-- -v email='admin@ejemplo.com' -v password='CAMBIAR' \ -- -v email='admin@ejemplo.com' -v password='CAMBIAR' \
-- < scripts/setup_first_admin.sql -- < scripts/setup_first_admin.sql
-- --
-- NOTA: las variables psql solo funcionan en SQL plano, no en DO $$.
-- Este script usa un CTE INSERT...RETURNING para encadenar ambos inserts.
--
-- CAMBIAR CONTRASEÑA LUEGO DEL PRIMER LOGIN: -- CAMBIAR CONTRASEÑA LUEGO DEL PRIMER LOGIN:
-- El usuario puede cambiarla desde la app (si se implementa esa UI) -- docker exec -i supabase-db psql -U postgres -d postgres \
-- o el director puede actualizarla con: -- -c "UPDATE auth.users SET encrypted_password = extensions.crypt('NuevaContraseña', extensions.gen_salt('bf')) WHERE email = 'admin@ejemplo.com';"
-- UPDATE auth.users
-- SET encrypted_password = extensions.crypt('NuevaContraseña', extensions.gen_salt('bf'))
-- WHERE email = 'admin@ejemplo.com';
-- ============================================================ -- ============================================================
DO $$ WITH new_user AS (
DECLARE
v_user_id uuid;
v_inq_org uuid := '10000000-0000-0000-0000-000000000002';
BEGIN
-- Insertar usuario en auth.users
INSERT INTO auth.users ( INSERT INTO auth.users (
id, id,
instance_id, instance_id,
@@ -52,13 +46,9 @@ BEGIN
'', '',
false false
) )
RETURNING id INTO v_user_id; RETURNING id, email
)
-- Asignar rol platform_admin vinculado a InQuality
INSERT INTO public.user_roles (user_id, app_role, org_id) INSERT INTO public.user_roles (user_id, app_role, org_id)
VALUES (v_user_id, 'platform_admin', v_inq_org); SELECT id, 'platform_admin', '10000000-0000-0000-0000-000000000002'
FROM new_user
RAISE NOTICE 'Usuario creado: % (id=%)', :'email', v_user_id; RETURNING (SELECT email FROM new_user), user_id;
END;
$$;