Skip to content

BetaGun03/fliverse-backend

Repository files navigation

🎬 Fliverse - Backend API

Fliverse Logo

API REST para la plataforma web comunitaria Fliverse

Node.js Express PostgreSQL Sequelize


Tabla de Contenidos


Sobre el Proyecto

Fliverse Backend es la API REST desarrollada como Proyecto de Fin de Grado (TFG) que proporciona todos los servicios y funcionalidades necesarias para la plataforma web Fliverse.

Objetivo Principal

Proporcionar una API robusta y escalable que permita:

  • Autenticación segura de usuarios con JWT y OAuth2 (Google)
  • Gestión completa de contenido audiovisual
  • Administración de listas personalizadas y valoraciones
  • Sistema de comentarios y interacción social
  • Integración con servicios externos (Azure Storage)

Características

Funcionalidades de la API

  • Sistema de Autenticación

    • Registro e inicio de sesión con JWT
    • Integración con Google OAuth2
    • Middleware de autenticación y autorización
    • Sistema de recuperación de contraseñas
  • Gestión de Contenido

    • CRUD completo para películas y series
    • Sistema de búsqueda avanzada
    • Gestión de imágenes con Azure Blob Storage
  • Listas y Valoraciones

    • Creación y gestión de listas personalizadas
    • Sistema de valoraciones (0-10)
    • Seguimiento de contenido visto/por ver
  • Sistema Social

    • Comentarios en contenido
    • Perfiles de usuario
    • Sistema de notificaciones por email

Características Técnicas

  • Seguridad: Rate limiting, validación de datos, encriptación
  • Documentación: Swagger/OpenAPI integrado
  • Almacenamiento de imágenes: Azure Storage Account

Tecnologías

Backend Framework

Base de Datos

Autenticación y Seguridad

Servicios Externos

Documentación y Desarrollo

Utilidades


Instalación y Configuración

Prerrequisitos

Asegúrate de tener instalado:

  • Node.js (versión 18 o superior)
  • npm (viene con Node.js)
  • PostgreSQL (versión 14 o superior)
# Verificar versiones
node --version
npm --version
psql --version

Instalación

  1. Clonar el repositorio

    git clone https://github.com/BetaGun03/fliverse-backend.git
    cd fliverse-backend
  2. Instalar dependencias

    npm install
  3. Configurar variables de entorno

    # Crear archivo .env en la raíz del proyecto
    touch .env

    Configurar las siguientes variables en .env:

    # Puerto del servidor
    PORT=3000
    
    # Base de datos
    PGUSER=tu_usuario
    PGPASSWORD=tu_contraseña
    PGSERVER=direccion_del_servidor
    
    # Google OAuth
    GOOGLE_CLIENT_ID=tu_google_client_id
    
    # JWT
    JWT_SECRET=tu_jwt_secret
    
    # Autenticación para Swagger
    SWAGGER_USER=tu_usuario_swagger
    SWAGGER_PASSWORD_HASH=tu_contraseña_swagger_hasheada
    
    # Email de Zoho
    ZOHO_USER=tu_email
    ZOHO_PASSWORD=tu_contraseña_email
    
    # Azure Storage Account
    AZURE_STORAGE_ACCOUNT_NAME=tu_azure_storage_account_name
    AZURE_STORAGE_ACCOUNT_KEY=tu_azure_storage_account_key
    AZURE_STORAGE_CONTAINER_NAME=tu_contenedor
    AZURE_STORAGE_CONNECTION_STRING=tu_connection_string_para_azure
    
    # CORS
    ALLOWED_ORIGIN=http://tu_dominio_frontend
    ALLOWED_ORIGIN_LOCAL=http://localhost:3000
  4. Iniciar el servidor

    nodemon ./app.js
  5. Verificar instalación

    Servidor local (redirecciona hacia la documentación): http://localhost:3000
    Documentación de la API: http://localhost:3000/api-docs
    

Endpoints de la API

Usuarios

Método Endpoint Descripción
POST /users/register Registro de usuario
POST /users/login Inicio de sesión
POST /users/loginGoogle Autenticación con Google
POST /users/logout Cierre de sesión
POST /users/logoutAll Cerrar sesión en todos los dispositivos
GET /users/me Obtener perfil del usuario autenticado
PATCH /users/me Actualizar perfil del usuario
DELETE /users/me Eliminar cuenta del usuario
GET /users/me/profile_pic Obtener imagen de perfil

Contenido

Método Endpoint Descripción
POST /contents Crear nuevo contenido
PATCH /contents/:id Actualizar contenido específico
GET /contents/searchById Buscar contenido por ID
GET /contents/searchByTitle Buscar contenido por título
GET /contents/posterById Obtener póster por ID
GET /contents/posterByTitle Obtener póster por título
GET /contents/random Obtener contenido aleatorio
GET /contents/latest Obtener contenido más reciente
GET /contents/genres Obtener géneros disponibles

Listas

Método Endpoint Descripción
POST /lists Crear nueva lista
GET /lists Obtener listas del usuario
GET /lists/:id Obtener lista específica por ID
PATCH /lists/:id Actualizar lista específica
POST /lists/:id/contents Añadir contenido a lista específica

Comentarios

Método Endpoint Descripción
POST /comments Crear nuevo comentario
GET /comments/:id Obtener comentario específico
GET /comments/content/:contentId Obtener comentarios de un contenido

Valoraciones

Método Endpoint Descripción
POST /ratings Crear nueva valoración
GET /ratings Obtener valoraciones del usuario
GET /ratings/:contentId Obtener valoración específica por contenido
PATCH /ratings/:contentId Actualizar valoración de contenido
DELETE /ratings/:contentId Eliminar valoración de contenido
GET /ratings/average/:contentId Obtener valoración promedio de contenido

Contenido-Usuario (Seguimiento)

Método Endpoint Descripción
POST /contents_user Marcar contenido como visto/por ver
GET /contents_user Obtener relaciones contenido-usuario
GET /contents_user/watched Obtener contenido marcado como visto
GET /contents_user/:contentId Obtener relación específica contenido-usuario
PATCH /contents_user/:contentId Actualizar estado de contenido
DELETE /contents_user/:contentId Eliminar seguimiento de contenido

Estructura del Proyecto

├── 📄 app.js                    # Archivo principal de la aplicación
├── 📄 package.json              # Dependencias y scripts
├── 📄 vercel.json              # Configuración de despliegue en Vercel
├── 📁 api-docs/                # Configuración de la documentación Swagger
│   └── 📄 swagger.js           # Configuración de Swagger
├── 📁 config/                  # Configuraciones
│   ├── 📄 azureStorage.js      # Configuración Azure Storage
│   └── 📄 mailer.js            # Configuración de email
├── 📁 db/                      # Base de datos
│   └── 📄 sequelizeConnection.js # Conexión Sequelize para la base de datos
├── 📁 html-templates/          # Plantillas de email
│   ├── 📄 loginEmail.html      # Email de inicio de sesión
│   ├── 📄 logoutFromAllDevices.html     # Email de cierre de sesión en todos los dispositivos
│   ├── 📄 registerEmail.html   # Email de registro
│   └── 📄 userUpdatedInfo.html   # Email de actualización de información del usuario
├── 📁 middlewares/             # Middlewares personalizados
│   ├── 📄 auth.js              # Middleware de autenticación
│   ├── 📄 express-rate-limit.js # Rate limiting
│   ├── 📄 swaggerAuth.js       # Autenticación Swagger
│   └── 📄 upload.js            # Manejo de archivos
├── 📁 models/                  # Modelos de Sequelize
│   ├── 📄 comment.js           # Modelo de comentarios
│   ├── 📄 content_list.js      # Modelo de contenido-lista
│   ├── 📄 content_user.js      # Modelo de contenido-usuario
│   ├── 📄 content.js           # Modelo de contenido
│   ├── 📄 list.js              # Modelo de listas
│   ├── 📄 rating.js            # Modelo de valoraciones
│   ├── 📄 relations.js         # Relaciones entre modelos
│   └── 📄 user.js              # Modelo de usuario
└── 📁 routers/                 # Rutas de la API
    ├── 📄 comment.js           # Rutas de comentarios
    ├── 📄 content_user.js      # Relaciones usuario-contenido
    ├── 📄 content.js           # Rutas de contenido
    ├── 📄 list.js              # Rutas de listas
    ├── 📄 rating.js            # Rutas de valoraciones
    └── 📄 user.js              # Rutas de usuarios

Documentación API

La API incluye documentación interactiva generada automáticamente con Swagger/OpenAPI.

Acceso a la Documentación

Características de la Documentación

  • Interfaz Interactiva: Probar endpoints directamente desde el navegador
  • Esquemas Detallados: Modelos de datos completos
  • Ejemplos de Uso: Requests y responses de ejemplo
  • Autenticación: Soporte para testing con JWT

Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.


Autor

Jaime Hedrera Rosa - Desarrollador Full Stack


Desarrollado como TFG por Jaime Hedrera Rosa.