CEMI Sistema de Gestión Académica
Documentación para Desarrolladores
Este manual técnico proporciona la documentación completa del sistema CEMI, incluyendo su arquitectura, tecnologías utilizadas, estructura del código, configuración de la base de datos, endpoints de la API y procedimientos de despliegue.
{
"dependencies": {
"express": "^4.18.2",
"mysql2": "^3.6.0",
"bcrypt": "^5.1.1",
"cors": "^2.8.5",
"dotenv": "^16.3.1",
"helmet": "^7.0.0",
"express-rate-limit": "^6.10.0",
"socket.io": "^4.7.2",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1"
}
}
El sistema implementa una arquitectura MVC (Model-View-Controller) adaptada para aplicaciones web modernas:
┌─────────────────────────────────────────────────────────┐
│ CLIENTE (Browser) │
│ HTML5 + CSS3 + JavaScript (Vanilla) │
└─────────────────────────┬───────────────────────────────┘
│ HTTP/HTTPS + WebSocket
┌─────────────────────────▼───────────────────────────────┐
│ SERVIDOR (Node.js) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Express.js (Router) │ │
│ │ /api/auth /api/alumnos /api/cursos ... │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Middleware (Security Layer) │ │
│ │ Helmet | CORS | Rate Limit | Morgan │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Socket.IO (Real-time Chat) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────┬───────────────────────────────┘
│ mysql2 (Connection Pool)
┌─────────────────────────▼───────────────────────────────┐
│ BASE DE DATOS (MySQL) │
│ Tablas: usuarios, alumnos, cursos, pagos, etc. │
└─────────────────────────────────────────────────────────┘
Motor: MySQL 8.0
Charset: utf8mb4
Collation: utf8mb4_unicode_ci
| Tabla | Descripción | Relaciones |
|---|---|---|
usuarios |
Credenciales de acceso | 1:1 con alumnos/profesores |
perfiles |
Tipos de usuario | 1:N con usuarios |
alumnos |
Datos de estudiantes | N:M con cursos |
profesores |
Datos de docentes | 1:N con cursos |
cursos |
Información de cursos | N:1 con aulas, idiomas, niveles |
inscripciones |
Alumnos en cursos | N:1 con alumnos y cursos |
pagos |
Transacciones financieras | N:1 con alumnos |
aulas |
Espacios físicos | 1:N con cursos |
tareas |
Actividades del classroom | N:1 con cursos |
mensajes_chat |
Historial de chat | N:1 con usuarios y cursos |
// backend/utils/db.js import mysql from 'mysql2/promise'; const pool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, port: process.env.DB_PORT, waitForConnections: true, connectionLimit: 10, queueLimit: 0 }); export default pool;
Body: { "username": "string", "password": "string" }
Response: { "success": true, "user": {...}, "token": "..." }
Obtiene lista de todos los alumnos.
Obtiene alumno por ID.
Crea nuevo alumno.
Actualiza alumno existente.
Elimina alumno.
// Helmet - Cabeceras HTTP seguras app.use(helmet({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'", "'unsafe-inline'"], styleSrc: ["'self'", "'unsafe-inline'"] } } })); // Rate Limiting - Prevención de ataques const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 minutos max: 1000 // máximo de requests }); app.use('/api/', limiter); // CORS - Orígenes permitidos const corsOptions = { origin: ['https://cemi.up.railway.app'], credentials: true };
# Clonar repositorio git clone https://github.com/eduardogabrielmendozaprogram/cemi-sistema-educativo.git # Ingresar al directorio cd cemi-sistema-educativo # Instalar dependencias npm install # Configurar variables de entorno cp .env.example .env # Editar .env con credenciales # Iniciar servidor de desarrollo npm run dev
# Base de Datos DB_HOST=localhost DB_USER=root DB_PASSWORD=your_password DB_NAME=cemi_db DB_PORT=3306 # Servidor PORT=3000 NODE_ENV=development # URLs FRONTEND_URL=http://localhost:3000
El sistema está desplegado en Railway con las siguientes configuraciones:
# railway.toml
[build]
builder = "nixpacks"
[deploy]
startCommand = "npm start"
healthcheckPath = "/api/health"
healthcheckTimeout = 100
restartPolicyType = "on_failure"
main de GitHubhttps://cemi.up.railway.app
/api/health# Exportar base de datos mysqldump -u root -p cemi_db > backup_cemi.sql # Importar backup mysql -u root -p cemi_db < backup_cemi.sql