Este repositorio contiene la lógica del servidor y la gestión de base de datos para SynCode. A continuación, se detallan los pasos necesarios para instalar y ejecutar el proyecto localmente.
- Node.js
- MySQL
- NPM
Clona el repositorio e instala las dependencias:
npm installCrea un archivo llamado .env en la raíz del proyecto y configura las siguientes variables:
SECRET_KEY=una_clave_secreta_aqui
DB_USER=el_usuario_de_mysql
DB_PASSWORD=la_contraseña_de_mysqlPara inicializar la base de datos con la estructura y datos de prueba necesarios, sigue estos pasos en tu cliente SQL:
- Esquema: Ejecuta el contenido de
database.sqlpara crear la base de datos, las tablas y relaciones. - Datos Mock: Ejecuta el contenido de
mockupData.sqlpara cargar los datos de prueba iniciales (opcional).
Para iniciar el servidor, utiliza el siguiente comando:
node server.jsEl servidor debería estar corriendo ahora, listo para recibir peticiones.
Puedes acceder a la versión desplegada del programa en la siguiente dirección de Azure:
server.js— Punto de entrada de la aplicación. Inicializa Express, registra los middlewares globales (CORS, body-parser, logger), monta las rutas bajo/api/y expone el endpoint WebSocket en/room/:id.config.js— Configuración centralizada: puerto del servidor, clave secreta JWT y tiempo de espera antes de eliminar una sala vacía.db.js— Gestiona la conexión a la base de datos MySQL. Al arrancar, inicializa el esquema automáticamente si no existe.
auth.js— Endpoints públicos de autenticación: registro (POST /auth/register) e inicio de sesión (POST /auth/login).rooms.js— Gestión de salas de colaboración: listar, crear, vincular a un proyecto y obtener el último contenido de código.projects.js— CRUD de proyectos del usuario autenticado y guardado manual del código actual como nueva versión.history.js— Gestión del historial de versiones de un proyecto: listar, consultar, restaurar y eliminar snapshots.
AuthService.js— Registro y login de usuarios. El password se almacena comoMD5(password + salt)y el login devuelve un JWT con 24 h de validez.ProjectService.js— Operaciones de base de datos para proyectos: listar, obtener info, crear y eliminar (verificando que el usuario sea el propietario).RoomService.js— Operaciones de base de datos para salas: listar, crear, vincular proyecto, obtener último snapshot de código y eliminar.HistoryService.js— Operaciones de base de datos para el historial de código: guardar snapshots, restaurar versiones anteriores y eliminar entradas.WebSocketService.js— Motor de colaboración en tiempo real. Gestiona el estado en memoria de las salas, sincroniza el código entre usuarios conectados, reenvía señales WebRTC y programa la eliminación automática de salas vacías.
auth.js— Guard de autenticación JWT. Extrae el token Bearer, lo verifica y adjunta el usuario decodificado areq.user. Todas las rutas protegidas lo utilizan.http.js— Logger de peticiones HTTP. Registra el método y la ruta de cada solicitud entrante.
logger.js— ClaseLoggercon un métodolog(category, message)que imprime mensajes con marca de tiempo en formato[HH:MM:SS] [CATEGORY] message.