← Volver a Documentación

MANUAL TÉCNICO

CEMI Sistema de Gestión Académica

Documentación para Desarrolladores

Versión 1.0 - Noviembre 2025

Índice de Contenidos

1. Introducción

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.

Propósito: Servir como referencia técnica para el equipo de desarrollo, mantenimiento y futuros desarrolladores que trabajen con el sistema.

2. Stack Tecnológico

Backend

  • Node.js v18+
  • Express.js 4.x
  • Socket.IO (Chat)

Base de Datos

  • MySQL 8.0
  • mysql2 (Driver)

Frontend

  • HTML5 / CSS3
  • JavaScript (ES6+)
  • Responsive Design

Seguridad

  • bcrypt (Hashing)
  • Helmet.js
  • express-rate-limit

Despliegue

  • Railway (Hosting)
  • Cloudinary (Assets)
  • GitHub (Repositorio)

Herramientas

  • Git / GitHub
  • VS Code
  • Postman (API Testing)

Dependencias Principales (package.json)

{
  "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"
  }
}
        

3. Arquitectura del Sistema

3.1 Patrón de Arquitectura

El sistema implementa una arquitectura MVC (Model-View-Controller) adaptada para aplicaciones web modernas:

3.2 Arquitectura de Capas

┌─────────────────────────────────────────────────────────┐
│                    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.     │
└─────────────────────────────────────────────────────────┘
        

4. Estructura del Proyecto

CEMI-Sistema-Educativo/ ├── server.js # Punto de entrada principal ├── package.json # Dependencias y scripts ├── .env # Variables de entorno ├── railway.toml # Configuración Railway │ ├── backend/ │ ├── config/ │ │ └── email.js # Configuración de correo │ │ │ ├── routes/ │ │ ├── auth.js # Autenticación │ │ ├── alumnos.js # CRUD Alumnos │ │ ├── profesores.js # CRUD Profesores │ │ ├── cursos.js # CRUD Cursos │ │ ├── pagos.js # Gestión de pagos │ │ ├── classroom.js # Aula virtual │ │ ├── chat.js # Chat tiempo real │ │ └── ... # Otras rutas │ │ │ ├── utils/ │ │ ├── db.js # Pool de conexiones MySQL │ │ └── chat-server.js# Servidor Socket.IO │ │ │ └── sql/ │ └── schema.sql # Estructura de BD │ ├── frontend/ │ ├── index.html # Página principal │ ├── login.html # Login usuarios │ ├── dashboard_admin.html # Panel admin │ ├── dashboard_alumno.html # Panel alumno │ ├── classroom.html # Aula virtual │ │ │ ├── assets/ │ │ ├── css/ # Estilos │ │ └── js/ # Scripts │ │ │ └── images/ # Recursos gráficos │ └── uploads/ # Archivos subidos ├── avatars/ # Fotos de perfil ├── recursos/ # Materiales └── tareas/ # Entregas

5. Base de Datos

5.1 Sistema de Gestión

Motor: MySQL 8.0

Charset: utf8mb4

Collation: utf8mb4_unicode_ci

5.2 Tablas Principales

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

5.3 Conexión a la Base de Datos

// 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;
        

6. API REST - Endpoints

6.1 Autenticación

POST /api/auth/login

Body: { "username": "string", "password": "string" }

Response: { "success": true, "user": {...}, "token": "..." }

POST /api/auth/register

6.2 Alumnos

GET /api/alumnos

Obtiene lista de todos los alumnos.

GET /api/alumnos/:id

Obtiene alumno por ID.

POST /api/alumnos

Crea nuevo alumno.

PUT /api/alumnos/:id

Actualiza alumno existente.

DELETE /api/alumnos/:id

Elimina alumno.

6.3 Cursos

GET /api/cursos
POST /api/cursos
PUT /api/cursos/:id
DELETE /api/cursos/:id

6.4 Pagos

GET /api/pagos
GET /api/pagos/alumno/:alumno_id
POST /api/pagos

6.5 Classroom

GET /api/classroom/cursos/:curso_id
POST /api/classroom/tareas
POST /api/classroom/anuncios

7. Seguridad

7.1 Autenticación

7.2 Middleware de Seguridad

// 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
};
        

7.3 Validación de Datos

8. Instalación y Configuración

8.1 Prerrequisitos

8.2 Instalación Local

# 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
        

8.3 Variables de Entorno (.env)

# 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
        

9. Despliegue en Producción

9.1 Railway

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"
        

9.2 Proceso de Despliegue

  1. Push a la rama main de GitHub
  2. Railway detecta cambios automáticamente
  3. Se ejecuta el build con Nixpacks
  4. Se despliega la nueva versión
  5. Health check verifica el estado

9.3 URL de Producción

https://cemi.up.railway.app

10. Mantenimiento

10.1 Logs y Monitoreo

10.2 Backup de Base de Datos

# Exportar base de datos
mysqldump -u root -p cemi_db > backup_cemi.sql

# Importar backup
mysql -u root -p cemi_db < backup_cemi.sql
        

10.3 Actualización del Sistema

  1. Realizar backup de la BD
  2. Crear rama de desarrollo
  3. Implementar cambios
  4. Probar en entorno local
  5. Merge a main
  6. Verificar despliegue automático
Importante: Siempre realice un backup antes de cualquier actualización de producción.