Gamilit: - Backend: Teacher services, assignments, gamification, exercise submissions - Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring - Database: DDL functions, seeds for dev/prod, auth/gamification schemas - Docs: Architecture, features, guides cleanup and reorganization Core/Orchestration: - New workspace directives index - Documentation directive Trading-platform: - Database seeds and inventory updates - Tech leader validation report 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
19 KiB
RECOMENDACIONES SEEDS P1 - ALTA PRIORIDAD
Fecha: 2025-12-14 Prioridad: P1 - ALTA Fase: 2 (Semana 2-3)
SEEDS ALTA PRIORIDAD A IMPLEMENTAR (10 tablas)
RESUMEN
| Schema | Tabla | Archivo Recomendado | Registros Est. | Impacto |
|---|---|---|---|---|
| auth_management | user_preferences | 08-user_preferences_defaults.sql | 5-10 | Preferencias por defecto |
| content_management | content_categories | 03-content_categories.sql | 8-12 | Categorización contenido |
| content_management | moderation_rules | 04-moderation_rules.sql | 10-15 | Moderación automática |
| educational_content | content_tags | 13-content_tags.sql | 30-50 | Sistema de etiquetado |
| educational_content | media_resources | 14-media_resources.sql | 15-25 | Recursos multimedia |
| progress_tracking | learning_paths | 02-learning_paths.sql | 5-8 | Rutas de aprendizaje |
| system_configuration | api_configuration | 05-api_configuration.sql | 5-10 | APIs externas |
| system_configuration | environment_config | 06-environment_config.sql | 15-20 | Config por ambiente |
1. auth_management/08-user_preferences_defaults.sql
Tabla: auth_management.user_preferences
Impacto: Preferencias por defecto faltantes
Registros: 5-10 configuraciones base
Contenido Sugerido
-- =====================================================
-- SEED: User Preferences Defaults
-- Schema: auth_management
-- Tabla: user_preferences
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE auth_management.user_preferences RESTART IDENTITY CASCADE;
-- Preferencias por defecto para nuevos usuarios STUDENT
INSERT INTO auth_management.user_preferences (
user_id,
preferences,
created_at,
updated_at
)
SELECT
u.id,
jsonb_build_object(
'theme', 'light',
'language', 'es',
'timezone', 'America/Mexico_City',
'notifications', jsonb_build_object(
'email', true,
'push', true,
'in_app', true,
'digest_frequency', 'daily'
),
'accessibility', jsonb_build_object(
'high_contrast', false,
'font_size', 'medium',
'screen_reader', false
),
'privacy', jsonb_build_object(
'show_profile', true,
'show_progress', true,
'allow_friend_requests', true
)
),
now(),
now()
FROM auth.users u
WHERE NOT EXISTS (
SELECT 1 FROM auth_management.user_preferences up
WHERE up.user_id = u.id
);
Valores por Rol
- Student: notificaciones habilitadas, perfil público
- Teacher: notificaciones digest semanal, perfil público
- Admin: notificaciones críticas only, perfil privado
- Parent: notificaciones de hijos habilitadas, perfil privado
2. content_management/03-content_categories.sql
Tabla: content_management.content_categories
Impacto: Categorización de contenido faltante
Registros: 8-12 categorías principales
Contenido Sugerido
-- =====================================================
-- SEED: Content Categories
-- Schema: content_management
-- Tabla: content_categories
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE content_management.content_categories RESTART IDENTITY CASCADE;
INSERT INTO content_management.content_categories (
category_code,
category_name,
category_description,
parent_category_id,
metadata,
created_at
) VALUES
('BIO', 'Biografía', 'Contenido biográfico de Marie Curie', NULL,
jsonb_build_object('icon', 'person', 'color', '#4CAF50'), now()),
('SCI', 'Ciencia', 'Conceptos y descubrimientos científicos', NULL,
jsonb_build_object('icon', 'science', 'color', '#2196F3'), now()),
('HIS', 'Historia', 'Contexto histórico y eventos', NULL,
jsonb_build_object('icon', 'history_edu', 'color', '#FF9800'), now()),
('EXP', 'Experimentos', 'Experimentos y metodología científica', NULL,
jsonb_build_object('icon', 'biotech', 'color', '#9C27B0'), now()),
('SOC', 'Impacto Social', 'Impacto en sociedad y género', NULL,
jsonb_build_object('icon', 'groups', 'color', '#E91E63'), now()),
('EDU', 'Educación', 'Contenido educativo y didáctico', NULL,
jsonb_build_object('icon', 'school', 'color', '#00BCD4'), now()),
('MED', 'Medicina', 'Aplicaciones médicas de la radiactividad', NULL,
jsonb_build_object('icon', 'medical_services', 'color', '#F44336'), now()),
('PHY', 'Física', 'Conceptos de física y radiactividad', 'SCI',
jsonb_build_object('icon', 'energy_savings_leaf', 'color', '#3F51B5'), now()),
('CHE', 'Química', 'Elementos químicos y reacciones', 'SCI',
jsonb_build_object('icon', 'science', 'color', '#009688'), now()),
('AWA', 'Premios', 'Reconocimientos y galardones', NULL,
jsonb_build_object('icon', 'emoji_events', 'color', '#FFC107'), now());
3. content_management/04-moderation_rules.sql
Tabla: content_management.moderation_rules
Impacto: Moderación automática deshabilitada
Registros: 10-15 reglas de moderación
Contenido Sugerido
-- =====================================================
-- SEED: Moderation Rules
-- Schema: content_management
-- Tabla: moderation_rules
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE content_management.moderation_rules RESTART IDENTITY CASCADE;
INSERT INTO content_management.moderation_rules (
rule_name,
rule_type,
rule_config,
action,
severity,
is_active,
created_at
) VALUES
('Palabras prohibidas básicas', 'keyword_blacklist',
jsonb_build_object('keywords', jsonb_build_array('spam', 'phishing', 'scam')),
'flag', 'high', true, now()),
('Lenguaje ofensivo', 'keyword_blacklist',
jsonb_build_object('keywords', jsonb_build_array('offensive1', 'offensive2')),
'block', 'critical', true, now()),
('URLs sospechosas', 'pattern',
jsonb_build_object('pattern', 'http[s]?://(?!gamilit\\.com).*'),
'flag', 'medium', true, now()),
('Emails no autorizados', 'pattern',
jsonb_build_object('pattern', '[a-zA-Z0-9._%+-]+@(?!gamilit\\.com)'),
'flag', 'low', true, now()),
('Contenido muy largo', 'length_limit',
jsonb_build_object('max_length', 5000),
'warn', 'low', true, now());
4. educational_content/13-content_tags.sql
Tabla: educational_content.content_tags
Impacto: Sistema de etiquetado faltante
Registros: 30-50 tags principales
Contenido Sugerido
-- =====================================================
-- SEED: Content Tags
-- Schema: educational_content
-- Tabla: content_tags
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE educational_content.content_tags RESTART IDENTITY CASCADE;
INSERT INTO educational_content.content_tags (
tag_code,
tag_name,
tag_category,
usage_count,
metadata,
created_at
) VALUES
-- Tags Marie Curie
('marie-curie', 'Marie Curie', 'person', 0,
jsonb_build_object('related_modules', jsonb_build_array('MOD-01', 'MOD-02', 'MOD-03', 'MOD-04', 'MOD-05')), now()),
('pierre-curie', 'Pierre Curie', 'person', 0,
jsonb_build_object('related_modules', jsonb_build_array('MOD-03')), now()),
-- Tags Científicos
('radiactividad', 'Radiactividad', 'concept', 0,
jsonb_build_object('difficulty', 'medium', 'grade_levels', jsonb_build_array('7', '8', '9')), now()),
('polonio', 'Polonio', 'element', 0,
jsonb_build_object('atomic_number', 84), now()),
('radio', 'Radio', 'element', 0,
jsonb_build_object('atomic_number', 88), now()),
('nobel', 'Premio Nobel', 'award', 0,
jsonb_build_object('years', jsonb_build_array(1903, 1911)), now()),
-- Tags Temáticos
('ciencia', 'Ciencia', 'theme', 0,
jsonb_build_object('related_modules', jsonb_build_array('MOD-02', 'MOD-03')), now()),
('mujer-ciencia', 'Mujer en Ciencia', 'theme', 0,
jsonb_build_object('related_modules', jsonb_build_array('MOD-03', 'MOD-05')), now()),
('perseverancia', 'Perseverancia', 'value', 0,
jsonb_build_object('related_modules', jsonb_build_array('MOD-01', 'MOD-05')), now()),
('innovación', 'Innovación', 'value', 0,
jsonb_build_object('related_modules', jsonb_build_array('MOD-04', 'MOD-05')), now());
5. educational_content/14-media_resources.sql
Tabla: educational_content.media_resources
Impacto: Recursos multimedia base faltantes
Registros: 15-25 recursos
Contenido Sugerido
-- =====================================================
-- SEED: Media Resources
-- Schema: educational_content
-- Tabla: media_resources
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE educational_content.media_resources RESTART IDENTITY CASCADE;
INSERT INTO educational_content.media_resources (
resource_code,
resource_name,
resource_type,
resource_url,
thumbnail_url,
metadata,
created_at
) VALUES
('marie-portrait-1', 'Retrato de Marie Curie (1903)', 'image',
'https://cdn.gamilit.com/media/marie-curie-portrait-1903.jpg',
'https://cdn.gamilit.com/media/thumbs/marie-curie-portrait-1903.jpg',
jsonb_build_object('year', 1903, 'source', 'Public Domain', 'related_content', 'marie-nobel-physics-1903'),
now()),
('lab-radium', 'Laboratorio de Investigación del Radio', 'image',
'https://cdn.gamilit.com/media/lab-radium.jpg',
'https://cdn.gamilit.com/media/thumbs/lab-radium.jpg',
jsonb_build_object('year', 1902, 'location', 'París', 'related_content', 'marie-radioactivity-research'),
now()),
('nobel-certificate-1903', 'Certificado Nobel Física 1903', 'document',
'https://cdn.gamilit.com/media/nobel-certificate-1903.pdf',
'https://cdn.gamilit.com/media/thumbs/nobel-certificate-1903.jpg',
jsonb_build_object('year', 1903, 'award', 'Nobel Physics'),
now());
6. progress_tracking/02-learning_paths.sql
Tabla: progress_tracking.learning_paths
Impacto: Rutas de aprendizaje predefinidas necesarias
Registros: 5-8 rutas predefinidas
Contenido Sugerido
-- =====================================================
-- SEED: Learning Paths
-- Schema: progress_tracking
-- Tabla: learning_paths
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE progress_tracking.learning_paths RESTART IDENTITY CASCADE;
INSERT INTO progress_tracking.learning_paths (
path_code,
path_name,
path_description,
difficulty_level,
estimated_hours,
path_structure,
is_active,
created_at
) VALUES
('PATH-BEGINNER', 'Ruta del Principiante',
'Introducción a la comprensión lectora con Marie Curie',
'beginner',
8,
jsonb_build_object(
'modules', jsonb_build_array(
jsonb_build_object('module_code', 'MOD-01-LITERAL', 'order', 1, 'required', true),
jsonb_build_object('module_code', 'MOD-02-INFERENCIAL', 'order', 2, 'required', true)
),
'milestones', jsonb_build_array(
jsonb_build_object('at_module', 'MOD-01-LITERAL', 'achievement', 'FIRST-MODULE-COMPLETE'),
jsonb_build_object('at_module', 'MOD-02-INFERENCIAL', 'achievement', 'BEGINNER-PATH-COMPLETE')
)
),
true,
now()),
('PATH-INTERMEDIATE', 'Ruta Intermedia',
'Desarrolla pensamiento crítico',
'intermediate',
12,
jsonb_build_object(
'modules', jsonb_build_array(
jsonb_build_object('module_code', 'MOD-02-INFERENCIAL', 'order', 1, 'required', true),
jsonb_build_object('module_code', 'MOD-03-CRITICA', 'order', 2, 'required', true),
jsonb_build_object('module_code', 'MOD-04-DIGITAL', 'order', 3, 'required', true)
)
),
true,
now()),
('PATH-ADVANCED', 'Ruta Avanzada',
'Domina todos los niveles de comprensión lectora',
'advanced',
20,
jsonb_build_object(
'modules', jsonb_build_array(
jsonb_build_object('module_code', 'MOD-01-LITERAL', 'order', 1, 'required', true),
jsonb_build_object('module_code', 'MOD-02-INFERENCIAL', 'order', 2, 'required', true),
jsonb_build_object('module_code', 'MOD-03-CRITICA', 'order', 3, 'required', true),
jsonb_build_object('module_code', 'MOD-04-DIGITAL', 'order', 4, 'required', true),
jsonb_build_object('module_code', 'MOD-05-CREATIVO', 'order', 5, 'required', true)
)
),
true,
now());
7. system_configuration/05-api_configuration.sql
Tabla: system_configuration.api_configuration
Impacto: APIs externas sin configuración
Registros: 5-10 configuraciones de APIs
Contenido Sugerido
-- =====================================================
-- SEED: API Configuration
-- Schema: system_configuration
-- Tabla: api_configuration
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE system_configuration.api_configuration RESTART IDENTITY CASCADE;
INSERT INTO system_configuration.api_configuration (
api_name,
api_endpoint,
api_version,
auth_config,
rate_limit_config,
is_active,
created_at
) VALUES
('OpenAI', 'https://api.openai.com/v1',
'v1',
jsonb_build_object('type', 'bearer', 'env_var', 'OPENAI_API_KEY'),
jsonb_build_object('requests_per_minute', 60, 'tokens_per_minute', 90000),
true,
now()),
('Storage compatible', 'https://storage.gamilit.com/storage/v1',
'v1',
jsonb_build_object('type', 'service_role', 'env_var', 'STORAGE_SERVICE_KEY'),
jsonb_build_object('requests_per_second', 100),
true,
now()),
('SendGrid Email', 'https://api.sendgrid.com/v3',
'v3',
jsonb_build_object('type', 'api_key', 'env_var', 'SENDGRID_API_KEY'),
jsonb_build_object('emails_per_day', 100),
true,
now());
8. system_configuration/06-environment_config.sql
Tabla: system_configuration.environment_config
Impacto: Configuración por ambiente faltante
Registros: 15-20 configuraciones (DEV/STAGING/PROD)
Contenido Sugerido
-- =====================================================
-- SEED: Environment Configuration
-- Schema: system_configuration
-- Tabla: environment_config
-- Prioridad: P1 - ALTA
-- =====================================================
TRUNCATE TABLE system_configuration.environment_config RESTART IDENTITY CASCADE;
-- DEV Environment
INSERT INTO system_configuration.environment_config (
environment,
config_key,
config_value,
config_type,
is_sensitive,
created_at
) VALUES
('development', 'debug_mode', 'true', 'boolean', false, now()),
('development', 'log_level', 'debug', 'string', false, now()),
('development', 'api_timeout_ms', '30000', 'number', false, now()),
('development', 'enable_mock_data', 'true', 'boolean', false, now()),
('development', 'cors_origins', '["http://localhost:3000", "http://localhost:5173"]', 'json', false, now());
-- STAGING Environment
INSERT INTO system_configuration.environment_config (
environment,
config_key,
config_value,
config_type,
is_sensitive,
created_at
) VALUES
('staging', 'debug_mode', 'false', 'boolean', false, now()),
('staging', 'log_level', 'info', 'string', false, now()),
('staging', 'api_timeout_ms', '15000', 'number', false, now()),
('staging', 'enable_mock_data', 'false', 'boolean', false, now()),
('staging', 'cors_origins', '["https://staging.gamilit.com"]', 'json', false, now());
-- PRODUCTION Environment
INSERT INTO system_configuration.environment_config (
environment,
config_key,
config_value,
config_type,
is_sensitive,
created_at
) VALUES
('production', 'debug_mode', 'false', 'boolean', false, now()),
('production', 'log_level', 'warn', 'string', false, now()),
('production', 'api_timeout_ms', '10000', 'number', false, now()),
('production', 'enable_mock_data', 'false', 'boolean', false, now()),
('production', 'cors_origins', '["https://app.gamilit.com"]', 'json', false, now());
ORDEN DE EJECUCIÓN FASE 2
Ejecutar después de completar seeds P0:
system_configuration/05-api_configuration.sqlsystem_configuration/06-environment_config.sqlauth_management/08-user_preferences_defaults.sqlcontent_management/03-content_categories.sqlcontent_management/04-moderation_rules.sqleducational_content/13-content_tags.sqleducational_content/14-media_resources.sqlprogress_tracking/02-learning_paths.sql
CRITERIOS DE ACEPTACIÓN
Para cada seed P1:
✅ Archivo SQL creado en ruta correcta ✅ TRUNCATE con CASCADE para idempotencia ✅ Al menos N registros insertados (según tabla) ✅ Valores JSONB correctamente formateados ✅ Comentarios descriptivos ✅ Query de verificación incluida ✅ Probado en DEV sin errores ✅ Documentado en SEEDS_INVENTORY.yml
Validación General:
-- Verificar todos los seeds P1
SELECT 'user_preferences' as seed, COUNT(*) FROM auth_management.user_preferences
UNION ALL
SELECT 'content_categories', COUNT(*) FROM content_management.content_categories
UNION ALL
SELECT 'moderation_rules', COUNT(*) FROM content_management.moderation_rules
UNION ALL
SELECT 'content_tags', COUNT(*) FROM educational_content.content_tags
UNION ALL
SELECT 'media_resources', COUNT(*) FROM educational_content.media_resources
UNION ALL
SELECT 'learning_paths', COUNT(*) FROM progress_tracking.learning_paths
UNION ALL
SELECT 'api_configuration', COUNT(*) FROM system_configuration.api_configuration
UNION ALL
SELECT 'environment_config', COUNT(*) FROM system_configuration.environment_config;
Resultado Esperado:
- user_preferences: 5-10
- content_categories: 8-12
- moderation_rules: 10-15
- content_tags: 30-50
- media_resources: 15-25
- learning_paths: 5-8
- api_configuration: 5-10
- environment_config: 15-20
IMPACTO EN FUNCIONALIDADES
Con Seeds P1 Implementados:
✅ Sistema de Preferencias: Usuarios tienen defaults coherentes ✅ Categorización: Contenido organizado y filtrable ✅ Moderación: Contenido inapropiado detectado automáticamente ✅ Etiquetado: Búsqueda y discovery mejorados ✅ Multimedia: Contenido enriquecido visualmente ✅ Rutas de Aprendizaje: Progresión guiada para estudiantes ✅ APIs Configuradas: Integraciones funcionando correctamente ✅ Multi-ambiente: Configuraciones específicas DEV/STAGING/PROD
ESTIMACIÓN
Tiempo estimado: 5-7 días (Semana 2-3) Complejidad: Media Dependencias: Seeds P0 completados Riesgo: Bajo
Próximos Pasos:
- Completar seeds P0 (Fase 1)
- Implementar seeds P1 según orden de ejecución
- Validar en DEV
- Migrar a STAGING
- Actualizar SEEDS_INVENTORY.yml
Fecha Estimada: 2025-12-21 a 2025-12-30