2025-12-23 11:36:48 -03:00

OpenCCB: Open Comprehensive Course Backbone

OpenCCB es una infraestructura de código abierto para plataformas de gestión de aprendizaje y contenido (LMS/CMS), construida con rendimiento, seguridad y escalabilidad en mente.

🚀 Estado del Proyecto

El sistema se encuentra en una fase avanzada (Phase 6 en progreso), ofreciendo una infraestructura multi-inquilino de alto rendimiento, gestión de marcas por organización (branding), autenticación segura y análisis detallado de datos.

Consulta el archivo ROADMAP.md para ver el desglose detallado de funcionalidades.

🛠 Stack Tecnológico

  • Core: Rust (Edition 2024)
  • API Framework: Axum
  • Base de Datos: PostgreSQL (con sqlx)
  • Autenticación: JWT + RBAC (Roles: Admin, Instructor, Student)
  • Infraestructura: Docker & Docker Compose

🔌 API Reference (CMS Service)

El servicio CMS expone una API RESTful en el puerto 3001. A continuación se detallan los contratos de los endpoints principales.

🔐 Autenticación

Registrar Usuario

  • URL: POST /auth/register
  • Descripción: Crea una nueva cuenta de usuario.
  • Body (JSON):
    {
      "email": "string (email format)",
      "password": "string (min 8 chars)",
      "role": "string ('instructor' | 'student')",
      "organization_name": "string (optional)"
    }
    

Iniciar Sesión

  • URL: POST /auth/login
  • Descripción: Autentica un usuario y devuelve un token JWT.
  • Body (JSON):
    {
      "email": "string",
      "password": "string"
    }
    

📚 Gestión de Cursos

Listar Cursos

  • URL: GET /courses
  • Descripción: Obtiene la lista de cursos visibles para el usuario.

Crear Curso

  • URL: POST /courses
  • Descripción: Inicializa un nuevo curso.
  • Body (JSON):
    {
      "title": "string",
      "description": "string (optional)",
      "passing_percentage": "integer (0-100, default: 70)"
    }
    

Actualizar Curso

  • URL: PUT /courses/{id}
  • Descripción: Modifica metadatos del curso.
  • Body (JSON):
    {
      "title": "string",
      "description": "string",
      "passing_percentage": "integer",
      "certificate_template": "string (HTML content)"
    }
    

Publicar Curso

  • URL: POST /courses/{id}/publish
  • Descripción: Sincroniza el curso y su contenido con el servicio LMS.
  • Body: {} (Vacío)

📦 Contenido (Módulos y Lecciones)

Crear Módulo

  • URL: POST /modules
  • Body (JSON):
    {
      "course_id": "uuid",
      "title": "string",
      "order_index": "integer"
    }
    

Crear Lección

  • URL: POST /lessons
  • Body (JSON):
    {
      "module_id": "uuid",
      "title": "string",
      "content_type": "string ('video' | 'article' | 'quiz')",
      "max_attempts": "integer (optional, null = unlimited)",
      "allow_retry": "boolean (default: true)"
    }
    

Actualizar Lección

  • URL: PUT /lessons/{id}
  • Body (JSON):
    {
      "title": "string",
      "content_blocks": "array (JSON objects)",
      "max_attempts": "integer",
      "allow_retry": "boolean"
    }
    

Transcripción AI (Simulado)

  • URL: POST /lessons/{id}/transcribe
  • Descripción: Inicia el proceso de generación de subtítulos/resumen.
  • Body: {} (Vacío)

📂 Sistema & Assets

Subir Archivo

  • URL: POST /assets/upload
  • Tipo: multipart/form-data
  • Campo: file (Binary)

Logs de Auditoría

  • URL: GET /audit-logs
  • Query Params: ?page=1&limit=50

🏢 Organizaciones & Branding

Listar Organizaciones (Admin)

  • URL: GET /organizations
  • Descripción: Obtiene la lista completa de inquilinos del sistema.

Configurar Branding

  • URL: PUT /organizations/{id}/branding
  • Descripción: Actualiza los colores primario y secundario de la organización.
  • Body (JSON):
    {
      "primary_color": "#hex",
      "secondary_color": "#hex"
    }
    

Subir Logo de Organización

  • URL: POST /organizations/{id}/logo
  • Tipo: multipart/form-data
  • Campo: file (Binary)

Obtener Branding Público

  • URL: GET /organizations/{id}/branding
  • Descripción: Recupera la identidad visual (logo y colores) de una organización.

👥 Gestión de Usuarios (Admin)

Listar Usuarios

  • URL: GET /users
  • Descripción: Obtiene todos los usuarios registrados en el sistema.

Actualizar Usuario

  • URL: PUT /users/{id}
  • Descripción: Permite cambiar el rol o la organización de un usuario.
  • Body (JSON):
    {
      "role": "string",
      "organization_id": "uuid"
    }
    

📦 Configuración y Ejecución

  1. Variables de Entorno: Asegúrate de tener configurado DATABASE_URL en tu archivo .env.

  2. Base de Datos: El sistema utiliza migraciones automáticas de sqlx al iniciar.

  3. Ejecutar Servicio:

    cargo run --bin cms-service
    

    O mediante Docker:

    docker-compose up --build
    
S
Description
No description provided
Readme 13 MiB
Languages
TypeScript 54.3%
Rust 28.8%
HTML 10.3%
PLpgSQL 2.7%
Shell 2.4%
Other 1.4%