48 lines
1.7 KiB
SQL
48 lines
1.7 KiB
SQL
-- =====================================================
|
|
-- TABLE: education.user_achievements
|
|
-- =====================================================
|
|
-- Proyecto: OrbiQuant IA (Trading Platform)
|
|
-- Módulo: OQI-002 - Education
|
|
-- Especificación: ET-EDU-001-database.md
|
|
-- =====================================================
|
|
|
|
CREATE TABLE education.user_achievements (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- Relación
|
|
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
|
|
-- Tipo de logro
|
|
achievement_type education.achievement_type NOT NULL,
|
|
|
|
-- Información del logro
|
|
title VARCHAR(200) NOT NULL,
|
|
description TEXT,
|
|
badge_icon_url VARCHAR(500),
|
|
|
|
-- Metadata del logro
|
|
metadata JSONB, -- Información específica del logro
|
|
|
|
-- Referencias
|
|
course_id UUID REFERENCES education.courses(id) ON DELETE SET NULL,
|
|
quiz_id UUID REFERENCES education.quizzes(id) ON DELETE SET NULL,
|
|
|
|
-- XP bonus por el logro
|
|
xp_bonus INTEGER DEFAULT 0,
|
|
|
|
-- Metadata
|
|
earned_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Índices
|
|
CREATE INDEX idx_user_achievements_user ON education.user_achievements(user_id);
|
|
CREATE INDEX idx_user_achievements_type ON education.user_achievements(achievement_type);
|
|
CREATE INDEX idx_user_achievements_earned ON education.user_achievements(earned_at DESC);
|
|
CREATE INDEX idx_user_achievements_course ON education.user_achievements(course_id);
|
|
|
|
-- Comentarios
|
|
COMMENT ON TABLE education.user_achievements IS 'Logros/badges obtenidos por los usuarios';
|
|
COMMENT ON COLUMN education.user_achievements.metadata IS 'Información adicional específica del tipo de logro';
|
|
COMMENT ON COLUMN education.user_achievements.xp_bonus IS 'XP bonus otorgado por este logro';
|