workspace-v1/projects/gamilit/database/seeds/dev/gamification_system/04-achievements.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

1051 lines
30 KiB
SQL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =====================================================
-- Seed: gamification_system.achievements (PROD)
-- Description: Logros y achievements demo para testing y producci<63>n
-- Environment: PRODUCTION
-- Dependencies: gamification_system.achievement_categories
-- Order: 04
-- Created: 2025-01-11
-- Version: 1.0
-- =====================================================
--
-- ACHIEVEMENTS INCLUIDOS:
-- - Progress (5): Primeros pasos, ejercicios completados, progreso
-- - Streak (3): Rachas de d<>as consecutivos
-- - Completion (4): Completaci<63>n de m<>dulos
-- - Mastery (3): Dominio y maestr<74>a
-- - Exploration (2): Exploraci<63>n de contenido
-- - Social (2): Interacci<63>n social
-- - Special (1): Logro especial
--
-- TOTAL: 20 achievements demo
--
-- IMPORTANTE: Estos achievements cubren casos de uso comunes
-- del sistema educativo de comprensi<73>n lectora GAMILIT.
-- =====================================================
SET search_path TO gamification_system, educational_content, public;
-- =====================================================
-- INSERT: Achievements Demo
-- =====================================================
INSERT INTO gamification_system.achievements (
id,
tenant_id,
name,
description,
icon,
category,
rarity,
difficulty_level,
conditions,
rewards,
ml_coins_reward,
is_secret,
is_active,
is_repeatable,
order_index,
points_value,
unlock_message,
instructions,
tips,
metadata,
created_at,
updated_at
) VALUES
-- =====================================================
-- CATEGORY: PROGRESS (5 achievements)
-- =====================================================
-- 1. Primeros Pasos
(
'90000001-0000-0000-0000-000000000001'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid, -- Tenant principal
'Primeros Pasos',
'Completa tu primer ejercicio de comprensi<73>n lectora',
'<<3C>',
'progress'::gamification_system.achievement_category,
'common',
'beginner'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'exercise_completion',
'requirements', jsonb_build_object(
'exercises_completed', 1
)
),
jsonb_build_object(
'xp', 50,
'ml_coins', 10,
'badge', 'first_steps'
),
10,
false,
true,
false,
1,
50,
'<EFBFBD>Felicidades! Has dado tus primeros pasos en tu viaje de aprendizaje.',
'Completa cualquier ejercicio de comprensi<73>n lectora para desbloquear este logro.',
ARRAY[
'Lee el texto con atenci<63>n antes de responder',
'No tengas miedo de equivocarte, es parte del aprendizaje'
],
jsonb_build_object(
'achievement_tier', 'starter',
'demo_achievement', true,
'module_required', null
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 2. Lector Principiante
(
'90000001-0000-0000-0000-000000000002'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Lector Principiante',
'Completa 10 ejercicios de comprensi<73>n lectora',
'=<3D>',
'progress'::gamification_system.achievement_category,
'common',
'elementary'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'exercise_completion',
'requirements', jsonb_build_object(
'exercises_completed', 10
)
),
jsonb_build_object(
'xp', 100,
'ml_coins', 25,
'badge', 'beginner_reader'
),
25,
false,
true,
false,
2,
100,
'<EFBFBD>Excelente! Ya eres un lector principiante. <20>Sigue as<61>!',
'Completa 10 ejercicios de comprensi<73>n lectora en cualquier m<>dulo.',
ARRAY[
'Practica diferentes tipos de textos',
'Lee con atenci<63>n los detalles'
],
jsonb_build_object(
'achievement_tier', 'bronze',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 3. Lector Experimentado
(
'90000001-0000-0000-0000-000000000003'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Lector Experimentado',
'Completa 50 ejercicios de comprensi<73>n lectora',
'=<3D>',
'progress'::gamification_system.achievement_category,
'rare',
'pre_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'exercise_completion',
'requirements', jsonb_build_object(
'exercises_completed', 50
)
),
jsonb_build_object(
'xp', 250,
'ml_coins', 75,
'badge', 'experienced_reader'
),
75,
false,
true,
false,
3,
250,
'<EFBFBD>Impresionante! Tu experiencia como lector est<73> creciendo enormemente.',
'Completa 50 ejercicios de comprensi<73>n lectora.',
ARRAY[
'Var<EFBFBD>a los tipos de ejercicios',
'Intenta ejercicios m<>s dif<69>ciles'
],
jsonb_build_object(
'achievement_tier', 'silver',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 4. Lector Experto
(
'90000001-0000-0000-0000-000000000004'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Lector Experto',
'Completa 100 ejercicios de comprensi<73>n lectora',
'<<3C>',
'progress'::gamification_system.achievement_category,
'epic',
'upper_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'exercise_completion',
'requirements', jsonb_build_object(
'exercises_completed', 100
)
),
jsonb_build_object(
'xp', 500,
'ml_coins', 150,
'badge', 'expert_reader'
),
150,
false,
true,
false,
4,
500,
'<EFBFBD>Extraordinario! Has alcanzado el nivel de lector experto.',
'Completa 100 ejercicios de comprensi<73>n lectora.',
ARRAY[
'Mant<EFBFBD>n tu constancia',
'Ayuda a otros estudiantes'
],
jsonb_build_object(
'achievement_tier', 'gold',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 5. Maestro de la Lectura
(
'90000001-0000-0000-0000-000000000005'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Maestro de la Lectura',
'Completa 200 ejercicios de comprensi<73>n lectora',
'=Q',
'progress'::gamification_system.achievement_category,
'legendary',
'proficient'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'exercise_completion',
'requirements', jsonb_build_object(
'exercises_completed', 200
)
),
jsonb_build_object(
'xp', 1000,
'ml_coins', 300,
'badge', 'reading_master'
),
300,
false,
true,
false,
5,
1000,
'<EFBFBD>LEGENDARIO! Te has convertido en un verdadero Maestro de la Lectura.',
'Completa 200 ejercicios de comprensi<73>n lectora.',
ARRAY[
'Eres un ejemplo para todos',
'Tu dedicaci<63>n es inspiradora'
],
jsonb_build_object(
'achievement_tier', 'legendary',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- =====================================================
-- CATEGORY: STREAK (3 achievements)
-- =====================================================
-- 6. Racha de 3 D<>as
(
'90000002-0000-0000-0000-000000000001'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Racha de 3 D<>as',
'Mant<EFBFBD>n una racha de 3 d<>as consecutivos practicando',
'=%',
'streak'::gamification_system.achievement_category,
'common',
'elementary'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'streak',
'requirements', jsonb_build_object(
'consecutive_days', 3
)
),
jsonb_build_object(
'xp', 75,
'ml_coins', 20,
'badge', 'streak_3'
),
20,
false,
true,
false,
10,
75,
'<EFBFBD>Genial! Has mantenido tu racha por 3 d<>as. <20>La constancia es clave!',
'Practica al menos un ejercicio durante 3 d<>as consecutivos.',
ARRAY[
'Establece un horario diario para practicar',
'Aunque sea un ejercicio corto, mant<6E>n la racha'
],
jsonb_build_object(
'streak_milestone', 3,
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 7. Racha de 7 D<>as
(
'90000002-0000-0000-0000-000000000002'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Racha de 7 D<>as',
'Mant<EFBFBD>n una racha de 7 d<>as consecutivos practicando',
'=%=%',
'streak'::gamification_system.achievement_category,
'rare',
'pre_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'streak',
'requirements', jsonb_build_object(
'consecutive_days', 7
)
),
jsonb_build_object(
'xp', 150,
'ml_coins', 50,
'badge', 'streak_7'
),
50,
false,
true,
false,
11,
150,
'<EFBFBD>Incre<EFBFBD>ble! Una semana completa de pr<70>ctica. <20>Tu dedicaci<63>n es admirable!',
'Practica al menos un ejercicio durante 7 d<>as consecutivos.',
ARRAY[
'Ya has creado un h<>bito s<>lido',
'Sigue as<61> para alcanzar rachas m<>s largas'
],
jsonb_build_object(
'streak_milestone', 7,
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 8. Racha de 30 D<>as
(
'90000002-0000-0000-0000-000000000003'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Racha de 30 D<>as',
'Mant<EFBFBD>n una racha de 30 d<>as consecutivos practicando',
'=%=%=%',
'streak'::gamification_system.achievement_category,
'epic',
'proficient'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'streak',
'requirements', jsonb_build_object(
'consecutive_days', 30
)
),
jsonb_build_object(
'xp', 500,
'ml_coins', 200,
'badge', 'streak_30'
),
200,
false,
true,
false,
12,
500,
'<EFBFBD><EFBFBD>PICO! 30 d<>as de racha. Tu compromiso con el aprendizaje es extraordinario.',
'Practica al menos un ejercicio durante 30 d<>as consecutivos.',
ARRAY[
'Has desarrollado un h<>bito excepcional',
'Eres un modelo de constancia'
],
jsonb_build_object(
'streak_milestone', 30,
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- =====================================================
-- CATEGORY: COMPLETION (4 achievements)
-- =====================================================
-- 9. M<>dulo 1 Completado
(
'90000003-0000-0000-0000-000000000001'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Comprensi<EFBFBD>n Literal Dominada',
'Completa todos los ejercicios del M<>dulo 1: Comprensi<73>n Literal',
'',
'completion'::gamification_system.achievement_category,
'rare',
'pre_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'module_completion',
'requirements', jsonb_build_object(
'module_id', 'modulo-01-comprension-literal',
'completion_percentage', 100
)
),
jsonb_build_object(
'xp', 200,
'ml_coins', 100,
'badge', 'module_1_complete'
),
100,
false,
true,
false,
20,
200,
'<EFBFBD>Felicidades! Has dominado la Comprensi<73>n Literal. <20>Sigue adelante!',
'Completa todos los ejercicios del M<>dulo 1 con al menos 60% de aciertos.',
ARRAY[
'Identifica informaci<63>n expl<70>cita en los textos',
'Presta atenci<63>n a los detalles'
],
jsonb_build_object(
'module', 'M<EFBFBD>DULO 1: Comprensi<73>n Literal',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 10. M<>dulo 2 Completado
(
'90000003-0000-0000-0000-000000000002'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Comprensi<EFBFBD>n Inferencial Dominada',
'Completa todos los ejercicios del M<>dulo 2: Comprensi<73>n Inferencial',
'',
'completion'::gamification_system.achievement_category,
'rare',
'pre_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'module_completion',
'requirements', jsonb_build_object(
'module_id', 'modulo-02-comprension-inferencial',
'completion_percentage', 100
)
),
jsonb_build_object(
'xp', 250,
'ml_coins', 125,
'badge', 'module_2_complete'
),
125,
false,
true,
false,
21,
250,
'<EFBFBD>Excelente! Has dominado la Comprensi<73>n Inferencial. Tu habilidad crece.',
'Completa todos los ejercicios del M<>dulo 2 con al menos 60% de aciertos.',
ARRAY[
'Lee entre l<>neas para encontrar significados impl<70>citos',
'Usa tu conocimiento previo para hacer inferencias'
],
jsonb_build_object(
'module', 'M<EFBFBD>DULO 2: Comprensi<73>n Inferencial',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 11. M<>dulo 3 Completado
(
'90000003-0000-0000-0000-000000000003'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Comprensi<EFBFBD>n Cr<43>tica Dominada',
'Completa todos los ejercicios del M<>dulo 3: Comprensi<73>n Cr<43>tica',
'',
'completion'::gamification_system.achievement_category,
'epic',
'upper_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'module_completion',
'requirements', jsonb_build_object(
'module_id', 'modulo-03-comprension-critica',
'completion_percentage', 100
)
),
jsonb_build_object(
'xp', 300,
'ml_coins', 150,
'badge', 'module_3_complete'
),
150,
false,
true,
false,
22,
300,
'<EFBFBD>Impresionante! Has dominado la Comprensi<73>n Cr<43>tica. Tu pensamiento es agudo.',
'Completa todos los ejercicios del M<>dulo 3 con al menos 60% de aciertos.',
ARRAY[
'Eval<EFBFBD>a la calidad y veracidad de la informaci<63>n',
'Desarrolla tu pensamiento cr<63>tico'
],
jsonb_build_object(
'module', 'M<EFBFBD>DULO 3: Comprensi<73>n Cr<43>tica',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 12. Todos los M<>dulos Completados
(
'90000003-0000-0000-0000-000000000004'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Completista Total',
'Completa todos los m<>dulos del sistema',
'<<3C>',
'completion'::gamification_system.achievement_category,
'legendary',
'proficient'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'all_modules_completion',
'requirements', jsonb_build_object(
'modules_completed', 5,
'min_score_average', 70
)
),
jsonb_build_object(
'xp', 1000,
'ml_coins', 500,
'badge', 'completionist'
),
500,
false,
true,
false,
23,
1000,
'<EFBFBD>LEGENDARIO! Has completado todos los m<>dulos. Eres un verdadero completista.',
'Completa los 5 m<>dulos del sistema con promedio de 70% o superior.',
ARRAY[
'Tu dedicaci<63>n es ejemplar',
'Has alcanzado el nivel m<>s alto'
],
jsonb_build_object(
'achievement_tier', 'ultimate',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- =====================================================
-- CATEGORY: MASTERY (3 achievements)
-- =====================================================
-- 13. Perfeccionista
(
'90000004-0000-0000-0000-000000000001'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Perfeccionista',
'Obt<EFBFBD>n 100% de aciertos en 10 ejercicios',
'P',
'mastery'::gamification_system.achievement_category,
'rare',
'upper_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'perfect_score',
'requirements', jsonb_build_object(
'perfect_exercises', 10,
'score_required', 100
)
),
jsonb_build_object(
'xp', 300,
'ml_coins', 150,
'badge', 'perfectionist'
),
150,
false,
true,
false,
30,
300,
'<EFBFBD>Perfecto! Tu precisi<73>n es admirable. 10 ejercicios perfectos.',
'Obt<EFBFBD>n 100% de aciertos en 10 ejercicios diferentes.',
ARRAY[
'Lee cuidadosamente antes de responder',
'Revisa tus respuestas antes de enviar'
],
jsonb_build_object(
'mastery_type', 'perfect_score',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 14. Experto en Inferencias
(
'90000004-0000-0000-0000-000000000002'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Experto en Inferencias',
'Completa 20 ejercicios de inferencia con 90% o m<>s de aciertos',
'><3E>',
'mastery'::gamification_system.achievement_category,
'epic',
'upper_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'skill_mastery',
'requirements', jsonb_build_object(
'skill_type', 'inferencial',
'exercises_completed', 20,
'min_score', 90
)
),
jsonb_build_object(
'xp', 400,
'ml_coins', 200,
'badge', 'inference_expert'
),
200,
false,
true,
false,
31,
400,
'<EFBFBD>Extraordinario! Eres un experto en hacer inferencias. Tu comprensi<73>n es profunda.',
'Completa 20 ejercicios de comprensi<73>n inferencial con 90% o m<>s.',
ARRAY[
'Conecta la informaci<63>n del texto con tu conocimiento',
'Busca pistas en el contexto'
],
jsonb_build_object(
'mastery_type', 'skill_expert',
'skill', 'inferencial',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 15. Cr<43>tico Avanzado
(
'90000004-0000-0000-0000-000000000003'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Cr<EFBFBD>tico Avanzado',
'Completa 20 ejercicios de pensamiento cr<63>tico con 90% o m<>s',
'<<3C>',
'mastery'::gamification_system.achievement_category,
'epic',
'proficient'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'skill_mastery',
'requirements', jsonb_build_object(
'skill_type', 'critico',
'exercises_completed', 20,
'min_score', 90
)
),
jsonb_build_object(
'xp', 500,
'ml_coins', 250,
'badge', 'critical_thinker'
),
250,
false,
true,
false,
32,
500,
'<EFBFBD><EFBFBD>PICO! Tu pensamiento cr<63>tico es de nivel avanzado. Sobresaliente.',
'Completa 20 ejercicios de comprensi<73>n cr<63>tica con 90% o m<>s.',
ARRAY[
'Eval<EFBFBD>a argumentos y evidencias',
'Cuestiona y analiza la informaci<63>n'
],
jsonb_build_object(
'mastery_type', 'skill_expert',
'skill', 'critico',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- =====================================================
-- CATEGORY: EXPLORATION (2 achievements)
-- =====================================================
-- 16. Explorador Curioso
(
'90000005-0000-0000-0000-000000000001'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Explorador Curioso',
'Explora al menos 3 m<>dulos diferentes',
'=
',
'exploration'::gamification_system.achievement_category,
'common',
'elementary'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'exploration',
'requirements', jsonb_build_object(
'different_modules', 3,
'min_exercises_per_module', 1
)
),
jsonb_build_object(
'xp', 100,
'ml_coins', 50,
'badge', 'curious_explorer'
),
50,
false,
true,
false,
40,
100,
'<EFBFBD>Genial! Tu curiosidad te ha llevado a explorar diferentes m<>dulos.',
'Completa al menos un ejercicio en 3 m<>dulos diferentes.',
ARRAY[
'Var<EFBFBD>a tus actividades de aprendizaje',
'Descubre nuevos tipos de textos'
],
jsonb_build_object(
'exploration_type', 'module_variety',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 17. Aventurero del Conocimiento
(
'90000005-0000-0000-0000-000000000002'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Aventurero del Conocimiento',
'Completa ejercicios de todos los niveles de dificultad',
'=<3D>',
'exploration'::gamification_system.achievement_category,
'rare',
'pre_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'exploration',
'requirements', jsonb_build_object(
'difficulty_levels', jsonb_build_array('beginner', 'elementary', 'pre_intermediate', 'upper_intermediate'),
'min_exercises_per_level', 2
)
),
jsonb_build_object(
'xp', 200,
'ml_coins', 100,
'badge', 'knowledge_adventurer'
),
100,
false,
true,
false,
41,
200,
'<EFBFBD>Incre<EFBFBD>ble! Has explorado todos los niveles de dificultad. Eres un verdadero aventurero.',
'Completa al menos 2 ejercicios de cada nivel de dificultad.',
ARRAY[
'Reta tus l<>mites con ejercicios dif<69>ciles',
'La variedad enriquece tu aprendizaje'
],
jsonb_build_object(
'exploration_type', 'difficulty_variety',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- =====================================================
-- CATEGORY: SOCIAL (2 achievements)
-- =====================================================
-- 18. Compa<70>ero de Aula
(
'90000006-0000-0000-0000-000000000001'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Compa<EFBFBD>ero de Aula',
'<EFBFBD>nete a tu primera aula virtual',
'=e',
'social'::gamification_system.achievement_category,
'common',
'beginner'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'social',
'requirements', jsonb_build_object(
'classrooms_joined', 1
)
),
jsonb_build_object(
'xp', 50,
'ml_coins', 25,
'badge', 'classroom_member'
),
25,
false,
true,
false,
50,
50,
'<EFBFBD>Bienvenido! Te has unido a tu primera aula. El aprendizaje colaborativo comienza.',
'<EFBFBD>nete a un aula virtual para desbloquear este logro.',
ARRAY[
'Colabora con tus compa<70>eros',
'Aprende de las experiencias de otros'
],
jsonb_build_object(
'social_type', 'classroom_join',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- 19. Estudiante Colaborativo
(
'90000006-0000-0000-0000-000000000002'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Estudiante Colaborativo',
'Participa en 5 actividades sociales (aulas, desaf<61>os, etc.)',
'>',
'social'::gamification_system.achievement_category,
'rare',
'pre_intermediate'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'social',
'requirements', jsonb_build_object(
'social_activities', 5
)
),
jsonb_build_object(
'xp', 150,
'ml_coins', 75,
'badge', 'collaborative_student'
),
75,
false,
true,
false,
51,
150,
'<EFBFBD>Excelente! Tu participaci<63>n social es notable. Sigues creciendo con otros.',
'Participa en 5 actividades sociales (unirte a aulas, aceptar desaf<61>os, etc.).',
ARRAY[
'El aprendizaje es m<>s rico cuando es social',
'Comparte tus logros con otros'
],
jsonb_build_object(
'social_type', 'social_participation',
'demo_achievement', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
),
-- =====================================================
-- CATEGORY: SPECIAL (1 achievement)
-- =====================================================
-- 20. Primera Visita
(
'90000007-0000-0000-0000-000000000001'::uuid,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid,
'Primera Visita',
'Inicia sesi<73>n por primera vez en GAMILIT',
'<<3C>',
'special'::gamification_system.achievement_category,
'common',
'beginner'::educational_content.difficulty_level,
jsonb_build_object(
'type', 'special',
'requirements', jsonb_build_object(
'first_login', true
)
),
jsonb_build_object(
'xp', 25,
'ml_coins', 10,
'badge', 'first_visit'
),
10,
false,
true,
false,
60,
25,
'<EFBFBD>Bienvenido a GAMILIT! Este es el comienzo de tu aventura de aprendizaje.',
'Este logro se desbloquea autom<6F>ticamente al iniciar sesi<73>n por primera vez.',
ARRAY[
'Explora la plataforma',
'Comienza con ejercicios f<>ciles'
],
jsonb_build_object(
'special_type', 'welcome',
'demo_achievement', true,
'auto_unlock', true
),
gamilit.now_mexico(),
gamilit.now_mexico()
)
ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name,
description = EXCLUDED.description,
icon = EXCLUDED.icon,
category = EXCLUDED.category,
rarity = EXCLUDED.rarity,
difficulty_level = EXCLUDED.difficulty_level,
conditions = EXCLUDED.conditions,
rewards = EXCLUDED.rewards,
ml_coins_reward = EXCLUDED.ml_coins_reward,
is_secret = EXCLUDED.is_secret,
is_active = EXCLUDED.is_active,
is_repeatable = EXCLUDED.is_repeatable,
order_index = EXCLUDED.order_index,
points_value = EXCLUDED.points_value,
unlock_message = EXCLUDED.unlock_message,
instructions = EXCLUDED.instructions,
tips = EXCLUDED.tips,
metadata = EXCLUDED.metadata,
updated_at = gamilit.now_mexico();
-- =====================================================
-- Verification Query
-- =====================================================
DO $$
DECLARE
achievement_count INTEGER;
progress_count INTEGER;
streak_count INTEGER;
completion_count INTEGER;
mastery_count INTEGER;
exploration_count INTEGER;
social_count INTEGER;
special_count INTEGER;
BEGIN
SELECT COUNT(*) INTO achievement_count
FROM gamification_system.achievements
WHERE metadata->>'demo_achievement' = 'true';
SELECT COUNT(*) INTO progress_count
FROM gamification_system.achievements
WHERE category = 'progress' AND metadata->>'demo_achievement' = 'true';
SELECT COUNT(*) INTO streak_count
FROM gamification_system.achievements
WHERE category = 'streak' AND metadata->>'demo_achievement' = 'true';
SELECT COUNT(*) INTO completion_count
FROM gamification_system.achievements
WHERE category = 'completion' AND metadata->>'demo_achievement' = 'true';
SELECT COUNT(*) INTO mastery_count
FROM gamification_system.achievements
WHERE category = 'mastery' AND metadata->>'demo_achievement' = 'true';
SELECT COUNT(*) INTO exploration_count
FROM gamification_system.achievements
WHERE category = 'exploration' AND metadata->>'demo_achievement' = 'true';
SELECT COUNT(*) INTO social_count
FROM gamification_system.achievements
WHERE category = 'social' AND metadata->>'demo_achievement' = 'true';
SELECT COUNT(*) INTO special_count
FROM gamification_system.achievements
WHERE category = 'special' AND metadata->>'demo_achievement' = 'true';
RAISE NOTICE '========================================';
RAISE NOTICE 'ACHIEVEMENTS DEMO CREADOS EXITOSAMENTE';
RAISE NOTICE '========================================';
RAISE NOTICE 'Total achievements: %', achievement_count;
RAISE NOTICE ' - Progress: %', progress_count;
RAISE NOTICE ' - Streak: %', streak_count;
RAISE NOTICE ' - Completion: %', completion_count;
RAISE NOTICE ' - Mastery: %', mastery_count;
RAISE NOTICE ' - Exploration: %', exploration_count;
RAISE NOTICE ' - Social: %', social_count;
RAISE NOTICE ' - Special: %', special_count;
RAISE NOTICE '========================================';
IF achievement_count = 20 THEN
RAISE NOTICE ' Todos los achievements demo fueron creados correctamente';
ELSE
RAISE WARNING '<EFBFBD> Se esperaban 20 achievements, se crearon %', achievement_count;
END IF;
END $$;
-- =====================================================
-- Listado de achievements por categor<6F>a
-- =====================================================
DO $$
DECLARE
achievement_record RECORD;
current_category TEXT := '';
BEGIN
RAISE NOTICE '';
RAISE NOTICE 'Listado de achievements demo:';
RAISE NOTICE '========================================';
FOR achievement_record IN
SELECT
name,
category,
rarity,
difficulty_level,
points_value,
ml_coins_reward
FROM gamification_system.achievements
WHERE metadata->>'demo_achievement' = 'true'
ORDER BY category, order_index
LOOP
IF current_category != achievement_record.category THEN
current_category := achievement_record.category;
RAISE NOTICE '';
RAISE NOTICE '=== % ===', UPPER(current_category);
END IF;
RAISE NOTICE ' - % [%/%]',
achievement_record.name,
achievement_record.rarity,
achievement_record.difficulty_level;
RAISE NOTICE ' Puntos: % | ML Coins: %',
achievement_record.points_value,
achievement_record.ml_coins_reward;
END LOOP;
RAISE NOTICE '';
RAISE NOTICE '========================================';
END $$;