-- Enable UUID extension CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- Create usuarios table CREATE TABLE IF NOT EXISTS usuarios ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, nombre VARCHAR(255) NOT NULL, rol VARCHAR(50) DEFAULT 'estudiante', creado_en TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, ultimo_login TIMESTAMP WITH TIME ZONE, activo BOOLEAN DEFAULT true ); -- Create ejercicios table CREATE TABLE IF NOT EXISTS ejercicios ( id SERIAL PRIMARY KEY, modulo_numero INTEGER NOT NULL, titulo VARCHAR(255) NOT NULL, tipo VARCHAR(50) NOT NULL, contenido JSONB NOT NULL, orden INTEGER DEFAULT 0 ); -- Create progreso_usuario table CREATE TABLE IF NOT EXISTS progreso_usuario ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), usuario_id UUID NOT NULL REFERENCES usuarios(id) ON DELETE CASCADE, modulo_numero INTEGER NOT NULL, ejercicio_id INTEGER REFERENCES ejercicios(id) ON DELETE SET NULL, completado BOOLEAN DEFAULT false, puntuacion INTEGER DEFAULT 0, intentos INTEGER DEFAULT 0, ultima_vez TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, respuesta_json JSONB, UNIQUE(usuario_id, modulo_numero, ejercicio_id) ); -- Create indexes CREATE INDEX IF NOT EXISTS idx_usuarios_email ON usuarios(email); CREATE INDEX IF NOT EXISTS idx_progreso_usuario_usuario ON progreso_usuario(usuario_id); CREATE INDEX IF NOT EXISTS idx_ejercicios_modulo ON ejercicios(modulo_numero, orden); CREATE INDEX IF NOT EXISTS idx_progreso_usuario_ejercicio ON progreso_usuario(usuario_id, ejercicio_id);