Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Backend: - Fix email verification and password recovery services - Fix exercise submission and student progress services Frontend: - Update missions, password, and profile API services - Fix ExerciseContentRenderer component Docs & Scripts: - Add SSL/Certbot deployment guide - Add quick deployment guide - Database scripts for testing and validations - Migration and homologation reports - Functions inventory documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
396 lines
11 KiB
SQL
396 lines
11 KiB
SQL
-- =====================================================
|
|
-- SCRIPT DE EMERGENCIA: CREAR USUARIOS DE TESTING
|
|
-- =====================================================
|
|
-- Fecha: 2025-11-11
|
|
-- Propósito: Crear usuarios de testing manualmente
|
|
-- Usuarios: admin@gamilit.com, teacher@gamilit.com, student@gamilit.com
|
|
-- Password: Test1234 (para todos)
|
|
-- =====================================================
|
|
|
|
-- Habilitar extensión pgcrypto si no está habilitada
|
|
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|
|
|
-- Verificar tenant por defecto
|
|
DO $$
|
|
DECLARE
|
|
default_tenant_id uuid;
|
|
BEGIN
|
|
-- Buscar o crear tenant por defecto
|
|
SELECT id INTO default_tenant_id
|
|
FROM auth_management.tenants
|
|
WHERE name = 'GAMILIT Platform'
|
|
LIMIT 1;
|
|
|
|
IF default_tenant_id IS NULL THEN
|
|
INSERT INTO auth_management.tenants (
|
|
id, name, slug, status, settings, created_at, updated_at
|
|
) VALUES (
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
'GAMILIT Platform',
|
|
'gamilit-platform',
|
|
'active',
|
|
'{}'::jsonb,
|
|
NOW(),
|
|
NOW()
|
|
) ON CONFLICT (id) DO NOTHING;
|
|
|
|
default_tenant_id := '00000000-0000-0000-0000-000000000001'::uuid;
|
|
END IF;
|
|
|
|
RAISE NOTICE 'Tenant ID: %', default_tenant_id;
|
|
END $$;
|
|
|
|
-- =====================================================
|
|
-- PASO 1: CREAR USUARIOS EN auth.users
|
|
-- =====================================================
|
|
|
|
INSERT INTO auth.users (
|
|
id,
|
|
instance_id,
|
|
email,
|
|
encrypted_password,
|
|
email_confirmed_at,
|
|
raw_app_meta_data,
|
|
raw_user_meta_data,
|
|
gamilit_role,
|
|
created_at,
|
|
updated_at,
|
|
confirmation_token,
|
|
email_change,
|
|
email_change_token_new,
|
|
recovery_token
|
|
) VALUES
|
|
-- ADMIN
|
|
(
|
|
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'00000000-0000-0000-0000-000000000000'::uuid,
|
|
'admin@gamilit.com',
|
|
crypt('Test1234', gen_salt('bf', 10)),
|
|
NOW(),
|
|
jsonb_build_object(
|
|
'provider', 'email',
|
|
'providers', ARRAY['email']
|
|
),
|
|
jsonb_build_object(
|
|
'name', 'Admin GAMILIT',
|
|
'role', 'super_admin'
|
|
),
|
|
'super_admin'::auth_management.gamilit_role,
|
|
NOW(),
|
|
NOW(),
|
|
'',
|
|
'',
|
|
'',
|
|
''
|
|
),
|
|
-- TEACHER
|
|
(
|
|
'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'00000000-0000-0000-0000-000000000000'::uuid,
|
|
'teacher@gamilit.com',
|
|
crypt('Test1234', gen_salt('bf', 10)),
|
|
NOW(),
|
|
jsonb_build_object(
|
|
'provider', 'email',
|
|
'providers', ARRAY['email']
|
|
),
|
|
jsonb_build_object(
|
|
'name', 'Profesor Testing',
|
|
'role', 'teacher'
|
|
),
|
|
'teacher'::auth_management.gamilit_role,
|
|
NOW(),
|
|
NOW(),
|
|
'',
|
|
'',
|
|
'',
|
|
''
|
|
),
|
|
-- STUDENT
|
|
(
|
|
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid,
|
|
'00000000-0000-0000-0000-000000000000'::uuid,
|
|
'student@gamilit.com',
|
|
crypt('Test1234', gen_salt('bf', 10)),
|
|
NOW(),
|
|
jsonb_build_object(
|
|
'provider', 'email',
|
|
'providers', ARRAY['email']
|
|
),
|
|
jsonb_build_object(
|
|
'name', 'Estudiante Testing',
|
|
'role', 'student'
|
|
),
|
|
'student'::auth_management.gamilit_role,
|
|
NOW(),
|
|
NOW(),
|
|
'',
|
|
'',
|
|
'',
|
|
''
|
|
)
|
|
ON CONFLICT (email) DO UPDATE SET
|
|
encrypted_password = EXCLUDED.encrypted_password,
|
|
updated_at = NOW();
|
|
|
|
-- =====================================================
|
|
-- PASO 2: CREAR PROFILES EN auth_management.profiles
|
|
-- =====================================================
|
|
|
|
INSERT INTO auth_management.profiles (
|
|
id,
|
|
user_id,
|
|
tenant_id,
|
|
email,
|
|
full_name,
|
|
first_name,
|
|
last_name,
|
|
role,
|
|
status,
|
|
email_verified,
|
|
preferences,
|
|
created_at,
|
|
updated_at
|
|
) VALUES
|
|
-- ADMIN PROFILE
|
|
(
|
|
'aaaaaaaa-aaaa-aaaa-bbbb-aaaaaaaaaaaa'::uuid,
|
|
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
'admin@gamilit.com',
|
|
'Admin GAMILIT',
|
|
'Admin',
|
|
'GAMILIT',
|
|
'super_admin'::auth_management.gamilit_role,
|
|
'active'::auth_management.user_status,
|
|
true,
|
|
jsonb_build_object(
|
|
'theme', 'detective',
|
|
'language', 'es',
|
|
'timezone', 'America/Mexico_City',
|
|
'sound_enabled', true,
|
|
'notifications_enabled', true
|
|
),
|
|
NOW(),
|
|
NOW()
|
|
),
|
|
-- TEACHER PROFILE
|
|
(
|
|
'bbbbbbbb-bbbb-bbbb-cccc-bbbbbbbbbbbb'::uuid,
|
|
'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
'teacher@gamilit.com',
|
|
'Profesor Testing',
|
|
'Profesor',
|
|
'Testing',
|
|
'teacher'::auth_management.gamilit_role,
|
|
'active'::auth_management.user_status,
|
|
true,
|
|
jsonb_build_object(
|
|
'theme', 'detective',
|
|
'language', 'es',
|
|
'timezone', 'America/Mexico_City',
|
|
'sound_enabled', true,
|
|
'notifications_enabled', true
|
|
),
|
|
NOW(),
|
|
NOW()
|
|
),
|
|
-- STUDENT PROFILE
|
|
(
|
|
'cccccccc-cccc-cccc-dddd-cccccccccccc'::uuid,
|
|
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
'student@gamilit.com',
|
|
'Estudiante Testing',
|
|
'Estudiante',
|
|
'Testing',
|
|
'student'::auth_management.gamilit_role,
|
|
'active'::auth_management.user_status,
|
|
true,
|
|
jsonb_build_object(
|
|
'theme', 'detective',
|
|
'language', 'es',
|
|
'timezone', 'America/Mexico_City',
|
|
'sound_enabled', true,
|
|
'notifications_enabled', true,
|
|
'grade_level', '5'
|
|
),
|
|
NOW(),
|
|
NOW()
|
|
)
|
|
ON CONFLICT (user_id) DO UPDATE SET
|
|
full_name = EXCLUDED.full_name,
|
|
updated_at = NOW();
|
|
|
|
-- =====================================================
|
|
-- PASO 3: INICIALIZAR user_stats (gamification)
|
|
-- =====================================================
|
|
-- Nota: El trigger trg_initialize_user_stats debería hacer esto automáticamente
|
|
-- pero lo agregamos manualmente por si acaso
|
|
|
|
INSERT INTO gamification_system.user_stats (
|
|
id,
|
|
user_id,
|
|
tenant_id,
|
|
level,
|
|
total_xp,
|
|
xp_to_next_level,
|
|
current_rank,
|
|
ml_coins,
|
|
ml_coins_earned_total,
|
|
created_at,
|
|
updated_at
|
|
) VALUES
|
|
(
|
|
'aaaaaaaa-aaaa-stat-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
1,
|
|
0,
|
|
100,
|
|
'Ajaw'::gamification_system.maya_rank,
|
|
100,
|
|
100,
|
|
NOW(),
|
|
NOW()
|
|
),
|
|
(
|
|
'bbbbbbbb-bbbb-stat-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
1,
|
|
0,
|
|
100,
|
|
'Ajaw'::gamification_system.maya_rank,
|
|
100,
|
|
100,
|
|
NOW(),
|
|
NOW()
|
|
),
|
|
(
|
|
'cccccccc-cccc-stat-cccc-cccccccccccc'::uuid,
|
|
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
1,
|
|
0,
|
|
100,
|
|
'Ajaw'::gamification_system.maya_rank,
|
|
100,
|
|
100,
|
|
NOW(),
|
|
NOW()
|
|
)
|
|
ON CONFLICT (user_id) DO UPDATE SET
|
|
updated_at = NOW();
|
|
|
|
-- =====================================================
|
|
-- PASO 4: INICIALIZAR user_ranks (gamification)
|
|
-- =====================================================
|
|
|
|
INSERT INTO gamification_system.user_ranks (
|
|
id,
|
|
user_id,
|
|
tenant_id,
|
|
current_rank,
|
|
rank_level,
|
|
total_rank_points,
|
|
rank_achieved_at,
|
|
created_at,
|
|
updated_at
|
|
) VALUES
|
|
(
|
|
'aaaaaaaa-aaaa-rank-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
'Ajaw'::gamification_system.maya_rank,
|
|
1,
|
|
0,
|
|
NOW(),
|
|
NOW(),
|
|
NOW()
|
|
),
|
|
(
|
|
'bbbbbbbb-bbbb-rank-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
'Ajaw'::gamification_system.maya_rank,
|
|
1,
|
|
0,
|
|
NOW(),
|
|
NOW(),
|
|
NOW()
|
|
),
|
|
(
|
|
'cccccccc-cccc-rank-cccc-cccccccccccc'::uuid,
|
|
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid,
|
|
'00000000-0000-0000-0000-000000000001'::uuid,
|
|
'Ajaw'::gamification_system.maya_rank,
|
|
1,
|
|
0,
|
|
NOW(),
|
|
NOW(),
|
|
NOW()
|
|
)
|
|
ON CONFLICT (user_id) DO UPDATE SET
|
|
updated_at = NOW();
|
|
|
|
-- =====================================================
|
|
-- VERIFICACIÓN FINAL
|
|
-- =====================================================
|
|
|
|
DO $$
|
|
DECLARE
|
|
users_count INTEGER;
|
|
profiles_count INTEGER;
|
|
stats_count INTEGER;
|
|
ranks_count INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO users_count FROM auth.users
|
|
WHERE email IN ('admin@gamilit.com', 'teacher@gamilit.com', 'student@gamilit.com');
|
|
|
|
SELECT COUNT(*) INTO profiles_count FROM auth_management.profiles
|
|
WHERE email IN ('admin@gamilit.com', 'teacher@gamilit.com', 'student@gamilit.com');
|
|
|
|
SELECT COUNT(*) INTO stats_count FROM gamification_system.user_stats
|
|
WHERE user_id IN (
|
|
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid
|
|
);
|
|
|
|
SELECT COUNT(*) INTO ranks_count FROM gamification_system.user_ranks
|
|
WHERE user_id IN (
|
|
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid,
|
|
'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid,
|
|
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid
|
|
);
|
|
|
|
RAISE NOTICE '========================================';
|
|
RAISE NOTICE 'USUARIOS DE TESTING CREADOS';
|
|
RAISE NOTICE '========================================';
|
|
RAISE NOTICE 'auth.users: % usuarios', users_count;
|
|
RAISE NOTICE 'auth_management.profiles: % profiles', profiles_count;
|
|
RAISE NOTICE 'gamification_system.user_stats: % stats', stats_count;
|
|
RAISE NOTICE 'gamification_system.user_ranks: % ranks', ranks_count;
|
|
RAISE NOTICE '========================================';
|
|
|
|
IF users_count = 3 AND profiles_count = 3 AND stats_count = 3 AND ranks_count = 3 THEN
|
|
RAISE NOTICE '✅ TODOS LOS USUARIOS CREADOS EXITOSAMENTE';
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE 'Credenciales de testing:';
|
|
RAISE NOTICE ' - admin@gamilit.com / Test1234';
|
|
RAISE NOTICE ' - teacher@gamilit.com / Test1234';
|
|
RAISE NOTICE ' - student@gamilit.com / Test1234';
|
|
ELSE
|
|
RAISE WARNING '⚠️ ALGUNOS USUARIOS NO SE CREARON CORRECTAMENTE';
|
|
RAISE WARNING 'Esperado: 3 users, 3 profiles, 3 stats, 3 ranks';
|
|
RAISE WARNING 'Creado: % users, % profiles, % stats, % ranks',
|
|
users_count, profiles_count, stats_count, ranks_count;
|
|
END IF;
|
|
END $$;
|
|
|
|
-- =====================================================
|
|
-- FIN DEL SCRIPT
|
|
-- =====================================================
|