Skip to content

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

  1. Clonar el repositorio
  2. Instalar dependencias:
    npm install
  3. Configurar variables de entorno en .env (puerto, credenciales DB, JWT_SECRET, etc.)
  4. Ejecutar migraciones de la base de datos (si aplica):
    npx sequelize db:migrate
  5. Iniciar el servidor:
    npm start

4. Endpoints Principales

  • POST /api/auth/login – Autenticación de usuario
  • POST /api/auth/register – Registro de usuario
  • GET /api/users – Listado de usuarios
  • GET /api/rooms – Listado de salas de chat
  • POST /api/rooms – Crear sala de chat
  • GET /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

  1. Usuario inicia sesión y obtiene JWT
  2. Cliente se conecta vía Socket.IO enviando JWT
  3. Usuario se une a una sala (joinRoom)
  4. Envía mensaje (chatMessage)
  5. 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