MiraiLink es una aplicación de citas y red social diseñada específicamente para gamers y fanáticos del anime. Este repositorio contiene el backend de la aplicación, construido con Node.js, Express y PostgreSQL.
- Autenticación Completa: Registro, login, verificación por email, reset de contraseña
- 2FA (Autenticación de Dos Factores): Implementado con TOTP y códigos de recuperación
- Sistema de Matching: Swipe para likes/dislikes con matches automáticos
- Chat en Tiempo Real: Mensajería privada entre matches
- Perfiles Personalizados: Fotos, biografía, intereses en anime y videojuegos
- Catálogos Extensos: Base de datos de animes y videojuegos populares
- Sistema de Reportes: Funcionalidad para reportar usuarios problemáticos
- API RESTful: Endpoints bien estructurados con autenticación JWT
- Backend: Node.js con Express.js
- Base de Datos: PostgreSQL con UUIDs
- Autenticación: JWT + 2FA (Speakeasy)
- Subida de Archivos: Multer para gestión de fotos
- Seguridad: Helmet, CORS, Bcrypt
- Email: Nodemailer para verificaciones
- Desarrollo: Nodemon, ESLint
- Node.js 18+
- PostgreSQL 15+
- npm o yarn
git clone https://github.com/FeryaelJustice/MiraiLink-Backend.git
cd MiraiLink-Backendnpm installCrea una base de datos PostgreSQL:
CREATE DATABASE mirailink;Ejecuta el schema y datos de prueba:
psql -U postgres -d mirailink -f src/database/db.sql
psql -U postgres -d mirailink -f src/database/db_inserts.sqlCopia el archivo de ejemplo y configura las variables:
cp .env.example .envnode -e "console.log(require('crypto').randomBytes(32).toString('hex'))"node -e "console.log(require('crypto').randomBytes(16).toString('hex'))"Configura las siguientes variables en tu .env:
PORT=3000
JWT_SECRET=tu_jwt_secret_muy_seguro
ORIGIN=http://localhost:5173
DB_URL=postgres://usuario:contraseña@localhost:5432/mirailink
BCRYPT_ROUNDS=12
EMAIL_HOST=tu_smtp_host
EMAIL_PORT=587
EMAIL_USER=tu_email
EMAIL_PASSWORD=tu_password_email
SECRET_2FA_KEY=clave_32_bytes_generada
SECRET_2FA_IV=iv_16_bytes_generado# Desarrollo (con auto-reload)
npm run dev
# Producción
npm run startLa API estará disponible en http://localhost:3000
src/
├── app.js # Configuración principal del servidor
├── controllers/ # Lógica de negocio
│ ├── auth.controller.js
│ ├── user.controller.js
│ ├── chat.controller.js
│ └── ...
├── routes/ # Definición de rutas
│ ├── auth.routes.js
│ ├── user.routes.js
│ └── ...
├── middleware/ # Middlewares personalizados
│ ├── auth.middleware.js
│ └── error.middleware.js
├── models/ # Modelos y conexión DB
│ └── db.js
├── utils/ # Utilidades
│ ├── cryptoUtils.js
│ ├── dateUtils.js
│ └── mailer.js
├── database/ # Esquemas y datos iniciales
│ ├── db.sql
│ └── db_inserts.sql
└── assets/ # Archivos estáticos (ignorado por git)
POST /register- Registro de usuarioPOST /login- Inicio de sesiónPOST /logout- Cerrar sesiónPOST /2fa/setup- Configurar 2FAPOST /password/request-reset- Solicitar reset de contraseña
GET /- Obtener perfil propioPUT /- Actualizar perfilDELETE /- Eliminar cuentaDELETE /photo/:position- Eliminar foto específica
GET /- Obtener matchesGET /unseen- Matches no vistosPOST /mark-seen- Marcar matches como vistos
GET /- Obtener chats del usuarioGET /:chatId/messages- Mensajes de un chatPOST /send- Enviar mensaje
GET /animes- Lista de animes disponiblesGET /games- Lista de videojuegos disponibles
- JWT: Tokens con expiración de 24 horas
- Token Blacklist: Invalidación de tokens en logout
- 2FA: Autenticación de dos factores con TOTP
- Bcrypt: Hash seguro de contraseñas (12 rounds por defecto)
- Helmet: Headers de seguridad HTTP
- CORS: Configurado para orígenes específicos
- Validación: Parámetros validados en todas las rutas
# Ejecutar en modo desarrollo
npm run dev
# Linting
npm run lint
# Generar claves para 2FA
npm run generate:2fa-keysLa base de datos incluye:
- Usuarios: Perfiles, autenticación, verificación
- Contenido: Fotos de perfil, intereses en anime/games
- Social: Likes, matches, chats, mensajes
- Seguridad: Tokens, 2FA, códigos de recuperación
- Catálogos: +280 animes y +100+ videojuegos populares
- Fork del repositorio
- Crear rama feature (
git checkout -b feature/nueva-funcionalidad) - Commit cambios (
git commit -am 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crear Pull Request
FeryaelJustice - GitHub
Este proyecto está bajo la Licencia ISC.