feat: introduce content library management for reusable content blocks with dedicated API endpoints and database schema.

This commit is contained in:
2026-02-16 20:45:48 -03:00
parent 1d7e5a39ce
commit 84bbeb12c6
8 changed files with 852 additions and 16 deletions
@@ -0,0 +1,51 @@
-- Content Libraries: Repositorio reutilizable de bloques y lecciones
-- Permite a instructores guardar y reutilizar componentes de contenido
-- Bloques reutilizables guardados en la biblioteca
CREATE TABLE library_blocks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id UUID NOT NULL,
created_by UUID NOT NULL, -- El instructor que lo guardó
name TEXT NOT NULL, -- Nombre descriptivo dado por el instructor
description TEXT, -- Descripción opcional
block_type TEXT NOT NULL, -- 'quiz', 'peer-review', 'hotspot', etc.
block_data JSONB NOT NULL, -- El bloque completo (mismo formato que metadata.blocks)
tags TEXT[], -- Array de etiquetas para búsqueda
usage_count INTEGER DEFAULT 0, -- Contador de cuántas veces se ha usado
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Índices para búsqueda eficiente
CREATE INDEX idx_library_blocks_org ON library_blocks(organization_id);
CREATE INDEX idx_library_blocks_type ON library_blocks(block_type);
CREATE INDEX idx_library_blocks_tags ON library_blocks USING GIN(tags);
CREATE INDEX idx_library_blocks_created_by ON library_blocks(created_by);
-- Trigger para actualizar updated_at
CREATE TRIGGER update_library_blocks_updated_at
BEFORE UPDATE ON library_blocks
FOR EACH ROW
EXECUTE PROCEDURE update_updated_at_column();
-- Plantillas de lecciones completas (para futuras expansiones)
CREATE TABLE library_templates (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id UUID NOT NULL,
created_by UUID NOT NULL,
name TEXT NOT NULL,
description TEXT,
lesson_data JSONB NOT NULL, -- Incluye metadata.blocks y configuración
tags TEXT[],
usage_count INTEGER DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_library_templates_org ON library_templates(organization_id);
-- Trigger para actualizar updated_at
CREATE TRIGGER update_library_templates_updated_at
BEFORE UPDATE ON library_templates
FOR EACH ROW
EXECUTE PROCEDURE update_updated_at_column();