# 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 madura (**Phase 6 en progreso**), con una API robusta para la gesti贸n de cursos, autenticaci贸n segura, multi-tenencia y an谩lisis de datos. Consulta el archivo [ROADMAP.md](./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)**: ```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)**: ```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)**: ```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)**: ```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)**: ```json { "course_id": "uuid", "title": "string", "order_index": "integer" } ``` #### Crear Lecci贸n - **URL**: `POST /lessons` - **Body (JSON)**: ```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)**: ```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` ## 馃摝 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**: ```bash cargo run --bin cms-service ``` O mediante Docker: ```bash docker-compose up --build ```