Manual Técnico – Backend ElephanTalk
1. Descripción General
El sistema de chat grupal en vivo ElephanTalk es una API backend desarrollada para gestionar la comunicación en tiempo real entre usuarios, utilizando Node.js, Express y WebSockets (Socket.IO). La base de datos utilizada es PostgreSQL.
2. Arquitectura
- Backend: Node.js + Express
- Comunicación en tiempo real: Socket.IO
- Base de datos: PostgreSQL
- Autenticación: JWT (JSON Web Tokens)
- ORM: Sequelize (opcional, según implementación)
- Estructura de carpetas:
/src
– Código fuente principal/src/routes
– Rutas de la API REST/src/controllers
– Lógica de negocio/src/models
– Definición de modelos de datos/src/sockets
– Lógica de WebSockets/config
– Configuración de base de datos y variables de entorno
3. Instalación
- Clonar el repositorio
- Instalar dependencias:
npm install - Configurar variables de entorno en .env (puerto, credenciales DB, JWT_SECRET, etc.)
- Ejecutar migraciones de la base de datos (si aplica):
npx sequelize db:migrate - Iniciar el servidor:
npm start
4. Endpoints Principales
POST /api/auth/login
– Autenticación de usuarioPOST /api/auth/register
– Registro de usuarioGET /api/users
– Listado de usuariosGET /api/rooms
– Listado de salas de chatPOST /api/rooms
– Crear sala de chatGET /api/messages/:roomId
– Obtener mensajes de una sala
5. WebSockets (Socket.IO)
Conexión:
El cliente se conecta al servidor mediante Socket.IO y envía el token JWT para autenticación.
Eventos principales:
- joinRoom
: Unirse a una sala de chat
- leaveRoom
: Salir de una sala
- chatMessage
: Enviar mensaje a la sala
- message
: Recibir mensaje de la sala
- userJoined
/ userLeft
: Notificaciones de usuarios
6. Modelos de Datos
Usuario:
- id
- nombre
- email
- contraseña (hasheada)
- fecha_registro
Sala (Room):
- id
- nombre
- descripción
- fecha_creación
Mensaje:
- id
- contenido
- usuario_id
- room_id
- timestamp
7. Seguridad
- Contraseñas hasheadas con bcrypt
- Autenticación y autorización con JWT
- Validación de datos en endpoints y sockets
8. Ejemplo de Flujo de Mensaje
- Usuario inicia sesión y obtiene JWT
- Cliente se conecta vía Socket.IO enviando JWT
- Usuario se une a una sala (joinRoom)
- Envía mensaje (chatMessage)
- Servidor guarda el mensaje en la base de datos y lo emite a los usuarios conectados en la sala
9. Consideraciones de Despliegue
- Usar HTTPS en producción
- Configurar variables de entorno seguras
- Escalar con PM2 o Docker si es necesario
10. Dependencias Principales
- express
- socket.io
- pg / sequelize
- bcrypt
- jsonwebtoken
- dotenv