Skip to content

marzo245/RoleDesk-B

Repository files navigation

RoleDesk Backend - Sistema de Espacios Virtuales Colaborativos

image

Servidor backend de alta performance construido con Node.js, TypeScript y Socket.IO

Node.js TypeScript Socket.IO Supabase License: GPL v3

🚀 Instalación📚 Documentación🛠️ API🤝 Contribuir


🏗️ Arquitectura del Sistema

RoleDesk Backend proporciona infraestructura robusta para espacios virtuales colaborativos con comunicación en tiempo real, gestión de sesiones distribuidas y algoritmos optimizados de proximidad para video chat automático.

image

🎯 Características Técnicas Principales

Categoría Características
🚀 Performance • Soporte para 1000+ usuarios concurrentes
• Latencia <50ms en eventos WebSocket
• Throughput de 10,000 eventos/segundo
• Memory pooling y garbage collection optimizada
🔒 Seguridad • Autenticación JWT con Supabase Auth
• Row Level Security (RLS) en base de datos
• Rate limiting avanzado por endpoint y evento
• Validación exhaustiva con Zod schemas
📡 Tiempo Real • WebSocket bidireccional con Socket.IO
• Event batching para optimización
• Proximity engine con spatial partitioning
• Sincronización de estado distribuido
📊 Escalabilidad • Architecture event-driven
• Redis clustering para múltiples instancias
• Connection pooling optimizado
• Horizontal scaling ready

🚀 Instalación Rápida

Prerrequisitos

  • Node.js 18.0.0 o superior
  • npm 8.0.0 o superior
  • Proyecto Supabase configurado con las tablas requeridas

1. Clonación e Instalación

# Clonar repositorio
git clone <repository-url>
cd gather-clone/RoleDesk_B

# Instalar dependencias
npm install

# Verificar instalación
npm run type-check

2. Configuración de Variables de Entorno

# Copiar template de configuración
cp .env.example .env

# Editar variables requeridas
nano .env
# === CONFIGURACIÓN DEL SERVIDOR ===
PORT=3001
NODE_ENV=development

# === SUPABASE CONFIGURATION ===
SUPABASE_URL=https://tu-proyecto.supabase.co
SERVICE_ROLE=tu_supabase_service_role_key

# === CORS CONFIGURATION ===
FRONTEND_URL=http://localhost:3000

3. Configuración de Base de Datos

Ejecutar el setup de Database Schema en tu proyecto Supabase.

4. Ejecutar el Servidor

# Modo desarrollo (recomendado)
npm run dev

# Verificar que funciona
curl http://localhost:3001/health

✅ ¡Listo! El servidor estará disponible en http://localhost:3001


📚 Documentación

📖 Documentación Técnica Completa

Documento Descripción Estado
🗄️ Database Schema Configuración completa de Supabase, tablas, políticas RLS, triggers y optimizaciones ✅ Completo
🔌 Socket Events Documentación exhaustiva de eventos WebSocket, validaciones y flujos ✅ Completo
🛡️ Security Guide Mejores prácticas de seguridad, autenticación, autorización y incident response ✅ Completo
⚡ Performance Guide Optimizaciones de memoria, CPU, base de datos y técnicas de escalabilidad ✅ Completo
🐛 Troubleshooting Solución de problemas comunes, debugging y herramientas de diagnóstico ✅ Completo
📡 API Reference Documentación completa de REST API y WebSocket API con ejemplos ✅ Completo

🏗️ Arquitectura de Módulos

src/
├── 🚀 index.ts                 # Bootstrap del servidor y configuración inicial
├── 🔧 supabase.ts             # Cliente Supabase y configuración de conexión  
├── 📊 session.ts              # SessionManager - Gestión centralizada de sesiones
├── 👥 Users.ts                # UserManager - Cache de usuarios en memoria
├── 🛠️ utils.ts                # Utilidades compartidas y helpers
├── 🌐 routes/                 # Capa de API REST
│   ├── routes.ts              # Definición de endpoints y middleware
│   └── route-types.ts         # Tipos TypeScript para requests/responses
└── ⚡ sockets/                # Capa de comunicación en tiempo real
    ├── sockets.ts             # Event handlers y lógica de negocio
    ├── socket-types.ts        # Schemas Zod y tipos de eventos
    └── helpers.ts             # Funciones auxiliares para sockets

⚙️ Stack Tecnológico

Core Dependencies

Tecnología Versión Propósito Documentación
Node.js 18+ Runtime JavaScript nodejs.org
TypeScript 5.8+ Tipado estático y desarrollo escalable typescriptlang.org
Express.js 4.19+ Framework web HTTP expressjs.com
Socket.IO 4.7+ Comunicación WebSocket bidireccional socket.io
Supabase 2.43+ Backend-as-a-Service (PostgreSQL) supabase.com
Zod 3.23+ Validación de schemas y runtime types zod.dev

Development Tools

{
  "devDependencies": {
    "@types/cors": "^2.8.17",
    "@types/express": "^4.17.21", 
    "@types/node": "^20.12.7",
    "@types/uuid": "^10.0.0",
    "ts-node": "^10.9.2",
    "typescript": "^5.8.3"
  }
}

🛠️ API Reference

🌐 REST API Endpoints

GET  /health                    # Estado del servidor
POST /api/realms               # Crear nuevo espacio virtual
GET  /api/realms/:id           # Obtener datos del espacio
PUT  /api/realms/:id           # Actualizar espacio
GET  /api/profiles/:uid        # Obtener perfil de usuario
PUT  /api/profiles/me          # Actualizar perfil propio

⚡ WebSocket Events

📤 Cliente → Servidor

  • joinRealm - Unirse a un espacio virtual
  • movePlayer - Actualizar posición del jugador
  • teleport - Teletransportar a nueva ubicación
  • changedSkin - Cambiar apariencia del avatar
  • sendMessage - Enviar mensaje de chat

📥 Servidor → Cliente

  • realmJoined - Confirmación de unión exitosa
  • playerMoved - Movimiento de otro jugador
  • proximityUpdate - Cambios en proximidad para video chat
  • messageReceived - Nuevo mensaje de chat
  • sessionTerminated - Sesión terminada por el servidor

📖 Ver documentación completa de API


🔧 Scripts de Desarrollo

# 🚀 Desarrollo
npm run dev              # Servidor con hot-reload (ts-node + nodemon)
npm run type-check       # Verificación de tipos TypeScript

# 🏗️ Construcción y Producción  
npm run build            # Compilar TypeScript → JavaScript
npm start                # Ejecutar servidor compilado

# 🧪 Testing y Calidad
npm test                 # Ejecutar test suite
npm run test:watch       # Tests en modo watch
npm run lint             # Linting con ESLint

# 📦 Deployment
npm run heroku-postbuild # Build automático para Heroku

🚀 Despliegue en Producción

🐳 Docker

FROM node:18-alpine
WORKDIR /app

# Instalar dependencias
COPY package*.json ./
RUN npm ci --only=production

# Copiar aplicación compilada
COPY dist ./dist

# Configurar usuario no-root
RUN addgroup -g 1001 -S nodejs && \
    adduser -S backend -u 1001
USER backend

EXPOSE 3001
CMD ["npm", "start"]

☁️ Railway/Heroku

# Configurar variables de entorno en el dashboard
SUPABASE_URL=https://tu-proyecto.supabase.co
SERVICE_ROLE=tu_production_service_role_key
FRONTEND_URL=https://tu-dominio.com
NODE_ENV=production

🔧 PM2 (VPS/Servidor Dedicado)

# Instalar PM2 globalmente
npm install -g pm2

# Configurar ecosystem
cp ecosystem.config.js.example ecosystem.config.js

# Desplegar
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup

📖 Ver guía completa de deployment


📊 Monitoreo y Observabilidad

📈 Métricas en Tiempo Real

# Endpoint de métricas de performance
curl http://localhost:3001/debug/metrics | jq

# Monitoreo con PM2
pm2 monit

# Logs en tiempo real
pm2 logs --lines 50

🔍 Health Checks

# Health check básico
curl http://localhost:3001/health

# Estado de sesiones activas  
curl http://localhost:3001/debug/sessions

# Métricas de base de datos
curl http://localhost:3001/debug/db-stats

📊 Métricas de Performance Objetivo

Métrica Desarrollo Producción
Latencia WebSocket <100ms <50ms
Throughput Eventos 5,000/s 10,000/s
Usuarios Concurrentes 100+ 1,000+
Uso de Memoria <1GB <512MB
Uptime 99%+ 99.9%+

🐛 Debugging y Troubleshooting

🔍 Comandos de Diagnóstico

# Verificar conectividad de base de datos
npm run test:db

# Verificar configuración
npm run validate-config

# Análisis de memoria
node --inspect dist/index.js

# Profiling de performance
clinic doctor -- node dist/index.js

📋 Problemas Comunes

Problema Solución Rápida Documentación
"Invalid access token" Verificar variables SUPABASE_URL y SERVICE_ROLE 🛡️ Security Guide
"Connection refused" Verificar puerto y firewall, revisar CORS 🐛 Troubleshooting
"High memory usage" Revisar session cleanup y memory leaks ⚡ Performance Guide
"Players not syncing" Verificar room membership y state reconciliation 🔌 Socket Events

📖 Ver guía completa de troubleshooting


🧪 Testing

🔬 Test Suite

# Ejecutar todos los tests
npm test

# Tests con coverage
npm run test:coverage

# Tests de integración 
npm run test:integration

# Load testing con Artillery
npm run load-test

📝 Escribir Tests

// Ejemplo de test de API
describe('Realms API', () => {
  test('should create realm successfully', async () => {
    const response = await request(app)
      .post('/api/realms')
      .set('Authorization', `Bearer ${authToken}`)
      .send({
        map_data: {
          name: 'Test Realm',
          dimensions: { width: 800, height: 600 }
        }
      })
      .expect(201)
    
    expect(response.body).toHaveProperty('id')
    expect(response.body.map_data.name).toBe('Test Realm')
  })
})

🤝 Contribuir

🛠️ Configuración del Entorno de Desarrollo

# Fork y clonar el repositorio
git clone https://github.com/tu-usuario/roledesk-backend.git
cd roledesk-backend

# Instalar dependencias
npm install

# Configurar hooks de Git
npm run prepare

# Ejecutar verificaciones
npm run lint && npm run type-check && npm test

📋 Proceso de Contribución

  1. 🍴 Fork el proyecto
  2. 🌿 Branch para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. ✨ Commit tus cambios (git commit -m 'feat: agregar nueva funcionalidad')
  4. 🚀 Push a la branch (git push origin feature/nueva-funcionalidad)
  5. 🔄 Pull Request con descripción detallada

📏 Estándares de Código

  • TypeScript Strict Mode obligatorio
  • ESLint + Prettier para formateo
  • Conventional Commits para mensajes
  • Test Coverage >80% para nuevas features
  • Zod Validation para todos los inputs
  • Error Handling exhaustivo con logging

🎯 Áreas que Necesitan Contribución

  • 🔐 Sistema de moderación avanzado
  • 📊 Dashboard de analytics en tiempo real
  • 🎮 Plugin system para extensibilidad
  • 🌍 Internacionalización (i18n)
  • 📱 SDK para desarrollo de clientes
  • 🧪 Más test coverage y casos edge

📊 Estado del Proyecto

🟢 Estado: Activo

Desarrollo activo con nuevas características implementándose regularmente

GitHub last commit GitHub issues GitHub pull requests Code Coverage

🗺️ Roadmap 2025

Q2 2025 Q3 2025 Q4 2025 2026
• Sistema de Moderación
• Rate Limiting Avanzado
• Métricas Extensas
• Redis Clustering
• Auto-scaling
• Performance Optimizations
• GraphQL API
• Plugin System
• Advanced Analytics
• AI-powered Features
• Multi-region Support
• Enterprise Features

📄 Licencia

Este proyecto está licenciado bajo GNU General Public License v3.0.

📜 Resumen de la Licencia

Permitido:

  • ✅ Uso comercial y personal
  • ✅ Modificación del código fuente
  • ✅ Distribución del software
  • ✅ Uso de patentes incluidas

Limitaciones:

  • ❌ Sin garantía de funcionamiento
  • ❌ Sin responsabilidad por daños
  • ❌ Debe mantener la misma licencia GPL v3

📝 Condiciones:

  • 📝 Incluir licencia y copyright en distribuciones
  • 📝 Documentar cambios realizados al código
  • 📝 Divulgar código fuente completo si se distribuye
  • 📝 Usar la misma licencia GPL v3 en trabajos derivados

📖 Ver licencia completa


👥 Equipo y Contacto

🏆 Desarrollador Principal

Diego Chicuazuque

GitHub LinkedIn Email

🤝 Contribuidores

Ver CONTRIBUTORS.md para la lista completa de contribuidores que han hecho posible este proyecto.

📞 Soporte y Comunidad


🙏 Agradecimientos

Agradecimientos especiales a:

  • 🚀 Socket.IO por el excelente framework de WebSockets
  • 🗄️ Supabase por la infraestructura de backend robusta
  • 🏗️ Comunidad de Node.js y TypeScript por las herramientas increíbles
  • 🌟 Todos los contribuidores que han mejorado este proyecto

🚀 ¿Listo para construir tu propio metaverso?

📖 Leer Documentación🛠️ Ver API Reference🤝 Contribuir


Construido con ❤️ por el equipo de RoleDesk

Última actualización: 28 de junio de 2025

Visitors

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published