workspace/projects/gamilit/apps/database/seeds/prod/auth/02-test-users.sql
rckrdmrd 9a18f6cd2a fix(database): Homologar seeds dev→prod y eliminar usuario de pruebas
## Cambios Realizados

### Homologación DEV → PROD
- Sincronizados 12 archivos de seeds/auth_management
- Copiado 02-test-users.sql a prod (usuarios de testing)
- Archivos nuevos en prod: 03-profiles, 04-user_roles, 05-user_preferences,
  06-auth_attempts, 07-security_events

### Limpieza de Usuario
- Eliminadas todas las referencias a rckrdmrd@gmail.com
- Limpiados seeds y archivos de backup-prod
- Usuario no se creará en recreación de BD

### Archivos Afectados
- seeds/prod/auth/ (3 archivos)
- seeds/prod/auth_management/ (12 archivos)
- backup-prod/ (4 archivos)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 17:42:18 -06:00

224 lines
8.3 KiB
SQL

-- =====================================================
-- Seed Data: Test Users (DEV + STAGING)
-- =====================================================
-- Description: Usuarios de prueba con dominio @gamilit.com
-- Environment: DEVELOPMENT + STAGING (NO production)
-- Records: 3 usuarios (admin, teacher, student)
-- Date: 2025-11-04 (Updated)
-- Based on: ANALISIS-PRE-CORRECCIONES-BD-ORIGEN.md
-- Migration from: /home/isem/workspace/projects/glit/database
-- =====================================================
SET search_path TO auth, auth_management, public;
-- =====================================================
-- Passwords Reference (Plain Text - DO NOT COMMIT TO PROD)
-- =====================================================
-- ALL USERS: "Test1234"
-- Hash bcrypt (cost=10): $2b$10$pkqX0/v7H3F5TBTuDTaoYeBjH581pXpjlcNcYmMtXofd/2HjfTuga
-- =====================================================
-- =====================================================
-- STEP 1: Create users in auth.users
-- =====================================================
-- IMPORTANTE: UUIDs predecibles para consistencia con seeds PROD
-- Password: "Test1234" (bcrypt hasheado dinámicamente)
-- =====================================================
INSERT INTO auth.users (
id, -- ✅ UUID predecible explícito
email,
encrypted_password,
role,
email_confirmed_at,
raw_user_meta_data,
status,
created_at,
updated_at
) VALUES
-- Admin de Prueba
(
'dddddddd-dddd-dddd-dddd-dddddddddddd'::uuid, -- ✅ UUID predecible
'admin@gamilit.com',
'$2b$10$pkqX0/v7H3F5TBTuDTaoYeBjH581pXpjlcNcYmMtXofd/2HjfTuga', -- Password: Test1234
'super_admin',
NOW(),
'{"name": "Admin Gamilit", "description": "Usuario administrador de testing"}'::jsonb,
'active',
NOW(),
NOW()
),
-- Maestro de Prueba
(
'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee'::uuid, -- ✅ UUID predecible
'teacher@gamilit.com',
'$2b$10$pkqX0/v7H3F5TBTuDTaoYeBjH581pXpjlcNcYmMtXofd/2HjfTuga', -- Password: Test1234
'admin_teacher',
NOW(),
'{"name": "Teacher Gamilit", "description": "Usuario maestro de testing"}'::jsonb,
'active',
NOW(),
NOW()
),
-- Estudiante de Prueba
(
'ffffffff-ffff-ffff-ffff-ffffffffffff'::uuid, -- ✅ UUID predecible
'student@gamilit.com',
'$2b$10$pkqX0/v7H3F5TBTuDTaoYeBjH581pXpjlcNcYmMtXofd/2HjfTuga', -- Password: Test1234
'student',
NOW(),
'{"name": "Student Gamilit", "description": "Usuario estudiante de testing"}'::jsonb,
'active',
NOW(),
NOW()
)
ON CONFLICT (email) DO UPDATE SET
encrypted_password = EXCLUDED.encrypted_password,
role = EXCLUDED.role,
email_confirmed_at = EXCLUDED.email_confirmed_at,
raw_user_meta_data = EXCLUDED.raw_user_meta_data,
status = EXCLUDED.status,
updated_at = NOW();
-- =====================================================
-- STEP 2: Create profiles in auth_management.profiles
-- =====================================================
-- IMPORTANTE: profiles.id = auth.users.id (unificación de IDs)
-- El trigger initialize_user_stats() se ejecutará automáticamente
-- =====================================================
INSERT INTO auth_management.profiles (
id, -- ✅ profiles.id = auth.users.id (consistente)
tenant_id,
user_id, -- ✅ FK a auth.users.id
email,
display_name,
full_name,
role,
status,
email_verified,
preferences,
created_at,
updated_at
)
SELECT
u.id as id, -- ✅ profiles.id = auth.users.id
'00000000-0000-0000-0000-000000000001'::uuid as tenant_id,
u.id as user_id, -- ✅ user_id = auth.users.id
u.email,
CASE
WHEN u.email = 'admin@gamilit.com' THEN 'Admin Gamilit'
WHEN u.email = 'teacher@gamilit.com' THEN 'Teacher Gamilit'
WHEN u.email = 'student@gamilit.com' THEN 'Student Gamilit'
END as display_name,
CASE
WHEN u.email = 'admin@gamilit.com' THEN 'Administrator Gamilit'
WHEN u.email = 'teacher@gamilit.com' THEN 'Teacher Gamilit'
WHEN u.email = 'student@gamilit.com' THEN 'Student Gamilit'
END as full_name,
u.role::auth_management.gamilit_role,
'active'::auth_management.user_status as status,
true as email_verified,
jsonb_build_object(
'theme', 'detective',
'language', 'es',
'timezone', 'America/Mexico_City',
'sound_enabled', true,
'notifications_enabled', true
) as preferences,
NOW() as created_at,
NOW() as updated_at
FROM auth.users u
WHERE u.email IN ('admin@gamilit.com', 'teacher@gamilit.com', 'student@gamilit.com')
ON CONFLICT (id) DO UPDATE SET
status = 'active'::auth_management.user_status,
email_verified = true,
display_name = EXCLUDED.display_name,
full_name = EXCLUDED.full_name,
role = EXCLUDED.role::auth_management.gamilit_role,
preferences = EXCLUDED.preferences,
updated_at = NOW();
-- =====================================================
-- Verification
-- =====================================================
DO $$
DECLARE
test_users_count INT;
test_profiles_count INT;
active_profiles_count INT;
BEGIN
-- Count users
SELECT COUNT(*) INTO test_users_count
FROM auth.users
WHERE email LIKE '%@gamilit.com';
-- Count profiles
SELECT COUNT(*) INTO test_profiles_count
FROM auth_management.profiles
WHERE email LIKE '%@gamilit.com';
-- Count active profiles
SELECT COUNT(*) INTO active_profiles_count
FROM auth_management.profiles
WHERE email LIKE '%@gamilit.com' AND status = 'active';
RAISE NOTICE '';
RAISE NOTICE '========================================';
RAISE NOTICE ' Test Users & Profiles Created';
RAISE NOTICE '========================================';
RAISE NOTICE 'Test users count: %', test_users_count;
RAISE NOTICE 'Test profiles count: %', test_profiles_count;
RAISE NOTICE 'Active profiles: %', active_profiles_count;
RAISE NOTICE '';
RAISE NOTICE 'Credentials:';
RAISE NOTICE ' admin@gamilit.com | Test1234 | super_admin';
RAISE NOTICE ' teacher@gamilit.com | Test1234 | admin_teacher';
RAISE NOTICE ' student@gamilit.com | Test1234 | student';
RAISE NOTICE '';
RAISE NOTICE 'All users:';
RAISE NOTICE ' ✓ Email confirmed (email_confirmed_at = NOW())';
RAISE NOTICE ' ✓ Profile active (status = ''active'')';
RAISE NOTICE ' ✓ Email verified (email_verified = true)';
RAISE NOTICE ' ✓ Ready for immediate login';
RAISE NOTICE '';
RAISE NOTICE 'Tenant: Gamilit Test Organization';
RAISE NOTICE ' ID: 00000000-0000-0000-0000-000000000001';
RAISE NOTICE '========================================';
RAISE NOTICE '';
END $$;
-- =====================================================
-- MIGRATION NOTES
-- =====================================================
-- Source: /home/isem/workspace/projects/glit/database/seed_data/04_demo_users_and_data_seed.sql
-- Changes from source:
-- 1. Domain changed: @glit.com → @gamilit.com (per user requirement)
-- 2. Password changed: Glit2024! → Test1234 (per user requirement)
-- 3. User count reduced: 10 → 3 (admin, teacher, student only)
-- 4. Email format simplified: student1@... → student@...
-- 5. All users have email_confirmed_at = NOW() for immediate testing
-- 6. Added profiles creation in auth_management.profiles (2025-11-04)
-- 7. Set status = 'active' to enable login (2025-11-04)
-- 8. Set email_verified = true (2025-11-04)
-- =====================================================
-- =====================================================
-- IMPORTANT NOTES
-- =====================================================
-- 1. ✅ El trigger trg_initialize_user_stats funciona correctamente
-- porque usamos profiles.id = auth.users.id (unificación de IDs)
-- NO es necesario deshabilitar el trigger.
--
-- 2. ✅ Este seed es para DEV/STAGING únicamente (NO producción).
--
-- 3. ✅ Todos los usuarios comparten password "Test1234" (testing).
--
-- 4. ✅ UUIDs predecibles para consistencia con ambiente PROD:
-- - admin@gamilit.com: dddddddd-dddd-dddd-dddd-dddddddddddd
-- - teacher@gamilit.com: eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee
-- - student@gamilit.com: ffffffff-ffff-ffff-ffff-ffffffffffff
-- =====================================================