workspace-v1/projects/gamilit/database/seeds/dev/auth_management/03-profiles.sql
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
Structure:
- control-plane/: Registries, SIMCO directives, CI/CD templates
- projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics
- shared/: Libs catalog, knowledge-base

Key features:
- Centralized port, domain, database, and service registries
- 23 SIMCO directives + 6 fundamental principles
- NEXUS agent profiles with delegation rules
- Validation scripts for workspace integrity
- Dockerfiles for all services
- Path aliases for quick reference

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:35:19 -06:00

120 lines
4.6 KiB
SQL

-- =====================================================
-- Seed: auth_management.profiles (DEV)
-- Description: Perfiles de usuarios de prueba para desarrollo
-- Environment: DEVELOPMENT
-- Dependencies: auth.users (01-demo-users.sql), auth_management.tenants (01-tenants.sql)
-- Order: 03
-- Updated: 2025-11-02
-- Agent: ATLAS-DATABASE
-- Note: Este seed SOLO crea profiles. Los usuarios deben existir previamente.
-- =====================================================
SET search_path TO auth_management, auth, public;
-- =====================================================
-- Crear profiles para usuarios existentes
-- =====================================================
-- Este seed lee los usuarios de auth.users y crea sus profiles
-- Si el usuario ya tiene profile, se actualiza
-- =====================================================
INSERT INTO auth_management.profiles (
user_id,
tenant_id,
email,
first_name,
last_name,
display_name,
full_name,
role
)
SELECT
u.id as user_id,
(SELECT id FROM auth_management.tenants
WHERE name LIKE '%Test%' OR name LIKE '%Gamilit%'
ORDER BY created_at ASC
LIMIT 1) as tenant_id,
u.email,
-- Extraer first_name del email o raw_user_meta_data
CASE
WHEN u.email LIKE '%admin%' THEN 'Admin'
WHEN u.email LIKE '%instructor%' OR u.email LIKE '%teacher%' THEN 'Instructor'
WHEN u.email LIKE '%estudiante1%' OR u.email LIKE '%student1%' THEN 'Ana'
WHEN u.email LIKE '%estudiante2%' OR u.email LIKE '%student2%' THEN 'María'
WHEN u.email LIKE '%estudiante3%' OR u.email LIKE '%student3%' THEN 'Carlos'
ELSE COALESCE(
u.raw_user_meta_data->>'firstName',
SPLIT_PART(u.email, '@', 1)
)
END as first_name,
-- Extraer last_name
CASE
WHEN u.email LIKE '%admin%' THEN 'Sistema'
WHEN u.email LIKE '%instructor%' OR u.email LIKE '%teacher%' THEN 'Demo'
WHEN u.email LIKE '%estudiante1%' OR u.email LIKE '%student1%' THEN 'García'
WHEN u.email LIKE '%estudiante2%' OR u.email LIKE '%student2%' THEN 'Curie'
WHEN u.email LIKE '%estudiante3%' OR u.email LIKE '%student3%' THEN 'Einstein'
ELSE COALESCE(
u.raw_user_meta_data->>'lastName',
'Demo'
)
END as last_name,
-- Display name (identificador corto para UI)
COALESCE(
u.raw_user_meta_data->>'displayName',
SPLIT_PART(u.email, '@', 1)
) as display_name,
-- Full name (nombre completo)
CASE
WHEN u.email LIKE '%admin%' THEN 'Admin Sistema'
WHEN u.email LIKE '%instructor%' OR u.email LIKE '%teacher%' THEN 'Instructor Demo'
WHEN u.email LIKE '%estudiante1%' OR u.email LIKE '%student1%' THEN 'Ana García'
WHEN u.email LIKE '%estudiante2%' OR u.email LIKE '%student2%' THEN 'María Curie'
WHEN u.email LIKE '%estudiante3%' OR u.email LIKE '%student3%' THEN 'Carlos Einstein'
ELSE COALESCE(
u.raw_user_meta_data->>'fullName',
CONCAT(
COALESCE(u.raw_user_meta_data->>'firstName', SPLIT_PART(u.email, '@', 1)),
' ',
COALESCE(u.raw_user_meta_data->>'lastName', 'Demo')
)
)
END as full_name,
-- Rol (copiado de auth.users)
u.role
FROM auth.users u
WHERE u.deleted_at IS NULL
ON CONFLICT (user_id) DO UPDATE SET
email = EXCLUDED.email,
first_name = EXCLUDED.first_name,
last_name = EXCLUDED.last_name,
display_name = EXCLUDED.display_name,
full_name = EXCLUDED.full_name,
role = EXCLUDED.role,
updated_at = NOW();
-- =====================================================
-- Validación y Mensaje de Confirmación
-- =====================================================
DO $$
DECLARE
profile_count INTEGER;
student_count INTEGER;
teacher_count INTEGER;
admin_count INTEGER;
BEGIN
SELECT COUNT(*) INTO profile_count FROM auth_management.profiles;
SELECT COUNT(*) INTO student_count FROM auth_management.profiles WHERE role = 'student';
SELECT COUNT(*) INTO teacher_count FROM auth_management.profiles WHERE role IN ('admin_teacher', 'teacher');
SELECT COUNT(*) INTO admin_count FROM auth_management.profiles WHERE role = 'super_admin';
RAISE NOTICE '==============================================';
RAISE NOTICE '✓ Profiles insertados correctamente';
RAISE NOTICE ' Total: % perfiles', profile_count;
RAISE NOTICE ' Estudiantes: %', student_count;
RAISE NOTICE ' Profesores: %', teacher_count;
RAISE NOTICE ' Admins: %', admin_count;
RAISE NOTICE '==============================================';
END $$;