DDL schemas for Trading Platform: - User management - Authentication - Payments - Education - ML predictions - Trading data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
239 lines
7.4 KiB
PL/PgSQL
239 lines
7.4 KiB
PL/PgSQL
-- =====================================================
|
|
-- SEED DATA - Schema Education (EJEMPLO)
|
|
-- =====================================================
|
|
-- Proyecto: OrbiQuant IA (Trading Platform)
|
|
-- Módulo: OQI-002 - Education
|
|
-- Especificación: ET-EDU-001-database.md
|
|
-- =====================================================
|
|
-- NOTA: Este es un archivo de ejemplo.
|
|
-- Los datos reales deben ir en /apps/database/seeds/
|
|
-- =====================================================
|
|
|
|
BEGIN;
|
|
|
|
-- =====================================================
|
|
-- 1. CATEGORIES
|
|
-- =====================================================
|
|
|
|
INSERT INTO education.categories (id, name, slug, description, color, display_order, is_active) VALUES
|
|
('11111111-1111-1111-1111-111111111111', 'Trading Básico', 'trading-basico', 'Fundamentos del trading y mercados financieros', '#3B82F6', 1, true),
|
|
('22222222-2222-2222-2222-222222222222', 'Análisis Técnico', 'analisis-tecnico', 'Herramientas y técnicas de análisis técnico', '#10B981', 2, true),
|
|
('33333333-3333-3333-3333-333333333333', 'Análisis Fundamental', 'analisis-fundamental', 'Evaluación fundamental de activos', '#F59E0B', 3, true),
|
|
('44444444-4444-4444-4444-444444444444', 'Gestión de Riesgo', 'gestion-riesgo', 'Estrategias de gestión de riesgo y capital', '#EF4444', 4, true),
|
|
('55555555-5555-5555-5555-555555555555', 'Trading Algorítmico', 'trading-algoritmico', 'Automatización y estrategias algorítmicas', '#8B5CF6', 5, true),
|
|
('66666666-6666-6666-6666-666666666666', 'Psicología del Trading', 'psicologia-trading', 'Aspectos psicológicos y emocionales del trading', '#EC4899', 6, true);
|
|
|
|
-- =====================================================
|
|
-- 2. COURSES
|
|
-- =====================================================
|
|
-- NOTA: instructor_id debe existir en auth.users
|
|
-- Para este ejemplo, usar un UUID válido de tu sistema
|
|
|
|
INSERT INTO education.courses (
|
|
id,
|
|
title,
|
|
slug,
|
|
short_description,
|
|
full_description,
|
|
category_id,
|
|
difficulty_level,
|
|
instructor_id,
|
|
instructor_name,
|
|
is_free,
|
|
xp_reward,
|
|
status,
|
|
published_at,
|
|
total_modules,
|
|
total_lessons
|
|
) VALUES
|
|
(
|
|
'c1111111-1111-1111-1111-111111111111',
|
|
'Introducción al Trading',
|
|
'introduccion-trading',
|
|
'Aprende los conceptos básicos del trading desde cero',
|
|
'Este curso te enseñará los fundamentos del trading, incluyendo tipos de mercados, instrumentos financieros, y cómo realizar tus primeras operaciones de forma segura.',
|
|
'11111111-1111-1111-1111-111111111111',
|
|
'beginner',
|
|
'00000000-0000-0000-0000-000000000001', -- Reemplazar con ID real
|
|
'Instructor Demo',
|
|
true,
|
|
500,
|
|
'published',
|
|
NOW(),
|
|
3,
|
|
12
|
|
);
|
|
|
|
-- =====================================================
|
|
-- 3. MODULES
|
|
-- =====================================================
|
|
|
|
INSERT INTO education.modules (id, course_id, title, description, display_order, duration_minutes) VALUES
|
|
('m1111111-1111-1111-1111-111111111111', 'c1111111-1111-1111-1111-111111111111', 'Módulo 1: Fundamentos', 'Conceptos básicos del trading', 1, 120),
|
|
('m2222222-2222-2222-2222-222222222222', 'c1111111-1111-1111-1111-111111111111', 'Módulo 2: Mercados Financieros', 'Tipos de mercados y activos', 2, 180),
|
|
('m3333333-3333-3333-3333-333333333333', 'c1111111-1111-1111-1111-111111111111', 'Módulo 3: Primeros Pasos', 'Cómo empezar a operar', 3, 150);
|
|
|
|
-- =====================================================
|
|
-- 4. LESSONS
|
|
-- =====================================================
|
|
|
|
INSERT INTO education.lessons (
|
|
id,
|
|
module_id,
|
|
title,
|
|
description,
|
|
content_type,
|
|
video_url,
|
|
video_duration_seconds,
|
|
display_order,
|
|
is_preview,
|
|
xp_reward
|
|
) VALUES
|
|
(
|
|
'l1111111-1111-1111-1111-111111111111',
|
|
'm1111111-1111-1111-1111-111111111111',
|
|
'¿Qué es el Trading?',
|
|
'Introducción a los conceptos básicos del trading',
|
|
'video',
|
|
'https://example.com/videos/lesson-1.mp4',
|
|
900,
|
|
1,
|
|
true,
|
|
10
|
|
),
|
|
(
|
|
'l2222222-2222-2222-2222-222222222222',
|
|
'm1111111-1111-1111-1111-111111111111',
|
|
'Tipos de Traders',
|
|
'Conoce los diferentes estilos de trading',
|
|
'video',
|
|
'https://example.com/videos/lesson-2.mp4',
|
|
1200,
|
|
2,
|
|
false,
|
|
10
|
|
),
|
|
(
|
|
'l3333333-3333-3333-3333-333333333333',
|
|
'm1111111-1111-1111-1111-111111111111',
|
|
'Terminología Básica',
|
|
'Vocabulario esencial del trading',
|
|
'article',
|
|
NULL,
|
|
NULL,
|
|
3,
|
|
false,
|
|
15
|
|
);
|
|
|
|
-- =====================================================
|
|
-- 5. QUIZZES
|
|
-- =====================================================
|
|
|
|
INSERT INTO education.quizzes (
|
|
id,
|
|
module_id,
|
|
title,
|
|
description,
|
|
passing_score_percentage,
|
|
max_attempts,
|
|
xp_reward,
|
|
xp_perfect_score_bonus
|
|
) VALUES
|
|
(
|
|
'q1111111-1111-1111-1111-111111111111',
|
|
'm1111111-1111-1111-1111-111111111111',
|
|
'Quiz: Fundamentos del Trading',
|
|
'Evalúa tus conocimientos sobre los conceptos básicos',
|
|
70,
|
|
3,
|
|
50,
|
|
20
|
|
);
|
|
|
|
-- =====================================================
|
|
-- 6. QUIZ QUESTIONS
|
|
-- =====================================================
|
|
|
|
INSERT INTO education.quiz_questions (
|
|
id,
|
|
quiz_id,
|
|
question_text,
|
|
question_type,
|
|
options,
|
|
explanation,
|
|
points,
|
|
display_order
|
|
) VALUES
|
|
(
|
|
'qq111111-1111-1111-1111-111111111111',
|
|
'q1111111-1111-1111-1111-111111111111',
|
|
'¿Qué es el trading?',
|
|
'multiple_choice',
|
|
'[
|
|
{"id": "a", "text": "Comprar y vender activos financieros", "isCorrect": true},
|
|
{"id": "b", "text": "Solo comprar acciones", "isCorrect": false},
|
|
{"id": "c", "text": "Invertir a largo plazo únicamente", "isCorrect": false},
|
|
{"id": "d", "text": "Ahorrar dinero en un banco", "isCorrect": false}
|
|
]'::jsonb,
|
|
'El trading implica la compra y venta de activos financieros con el objetivo de obtener ganancias a corto o mediano plazo.',
|
|
1,
|
|
1
|
|
),
|
|
(
|
|
'qq222222-2222-2222-2222-222222222222',
|
|
'q1111111-1111-1111-1111-111111111111',
|
|
'¿El trading es una actividad de riesgo?',
|
|
'true_false',
|
|
'[
|
|
{"id": "true", "text": "Verdadero", "isCorrect": true},
|
|
{"id": "false", "text": "Falso", "isCorrect": false}
|
|
]'::jsonb,
|
|
'Sí, el trading es una actividad que conlleva riesgos y es posible perder dinero. Por eso es importante la gestión de riesgo.',
|
|
1,
|
|
2
|
|
);
|
|
|
|
-- =====================================================
|
|
-- EJEMPLO DE USO - ENROLLMENTS
|
|
-- =====================================================
|
|
-- NOTA: Estos son ejemplos comentados. NO ejecutar sin IDs reales.
|
|
|
|
/*
|
|
-- Enrollar un usuario a un curso
|
|
INSERT INTO education.enrollments (user_id, course_id, total_lessons)
|
|
VALUES (
|
|
'00000000-0000-0000-0000-000000000001', -- ID del usuario
|
|
'c1111111-1111-1111-1111-111111111111', -- ID del curso
|
|
12 -- Total de lecciones del curso
|
|
);
|
|
|
|
-- Registrar progreso en una lección
|
|
INSERT INTO education.progress (
|
|
user_id,
|
|
lesson_id,
|
|
enrollment_id,
|
|
is_completed,
|
|
watch_percentage
|
|
) VALUES (
|
|
'00000000-0000-0000-0000-000000000001',
|
|
'l1111111-1111-1111-1111-111111111111',
|
|
'<enrollment-id>',
|
|
true,
|
|
100.00
|
|
);
|
|
*/
|
|
|
|
COMMIT;
|
|
|
|
-- =====================================================
|
|
-- Verificación
|
|
-- =====================================================
|
|
|
|
SELECT 'Categories created:' as info, COUNT(*) as count FROM education.categories;
|
|
SELECT 'Courses created:' as info, COUNT(*) as count FROM education.courses;
|
|
SELECT 'Modules created:' as info, COUNT(*) as count FROM education.modules;
|
|
SELECT 'Lessons created:' as info, COUNT(*) as count FROM education.lessons;
|
|
SELECT 'Quizzes created:' as info, COUNT(*) as count FROM education.quizzes;
|
|
SELECT 'Questions created:' as info, COUNT(*) as count FROM education.quiz_questions;
|