Audio Control - Backend

Este es el proyecto de backend para la aplicación SoundWave. Es una API RESTful construida con Node.js y Express, diseñada para gestionar la autenticación de usuarios, controlar un reproductor de audio y administrar una lista de reproducción de videos de YouTube.

Tabla de Contenidos

Acerca del Proyecto

Este backend proporciona los servicios necesarios para que el frontend audio-player funcione correctamente.

  • API RESTful: Endpoints claros y definidos para la gestión de recursos.
  • Autenticación Segura: Maneja la autenticación de usuarios a través de Google OAuth 2.0 y genera tokens JWT para sesiones seguras.
  • Gestión de Base de Datos: Se conecta a una base de datos MySQL para persistir datos de usuarios y listas de reproducción.
  • Panel de Control Integrado: Sirve una interfaz web simple con EJS y Materialize CSS para el control directo del reproductor.
  • Manejo de Errores Centralizado: Utiliza un middleware de Express para gestionar todos los errores de forma consistente.

Estructura de la API

A continuación se describen los endpoints principales:

Autenticación

  • POST /api/auth/google: Autentica a un usuario con un token de Google. Crea el usuario si no existe y devuelve un token JWT de la aplicación.

Playlist de YouTube

  • GET /api/youtube-playlist: Devuelve la lista de reproducción de videos de YouTube.
  • POST /api/youtube-video: Añade un nuevo video a la lista de reproducción.

Control Remoto

  • GET /cmd?consulta=<comando>: Endpoint para enviar comandos a un reproductor (ej. play_video, pausa_video).

Tecnologías

  • Node.js: Entorno de ejecución de JavaScript.
  • Express.js: Framework web para Node.js.
  • MySQL: Sistema de gestión de bases de datos.
  • jsonwebtoken: Para la creación y verificación de tokens JWT.
  • google-auth-library: Para verificar los tokens de ID de Google.
  • dotenv: Para la gestión de variables de entorno.
  • EJS: Motor de plantillas para servir el panel de control.

Instalación y Uso

  1. Clona el repositorio:

    git clone <URL_DEL_REPOSITORIO>
    cd audio_control
    
  2. Instala las dependencias:

    npm install
    
  3. Configura las variables de entorno: Crea un archivo .env en la raíz del proyecto (src/.env). Consulta la sección Variables de Entorno.

  4. Inicia el servidor:

    npm start
    

    El servidor se iniciará en el puerto 2000 (o el que se especifique).

Variables de Entorno

Crea un archivo .env en el directorio src/ con las siguientes variables. Es crucial para la seguridad y el funcionamiento de la aplicación.

# Secret para firmar los tokens JWT (usa un valor largo y aleatorio)
JWT_SECRET=tu_super_secreto_para_jwt

# Credenciales de Google Cloud para OAuth 2.0
GOOGLE_CLIENT_ID=tu_client_id_de_google.apps.googleusercontent.com

Estructura de la Base de Datos

El proyecto requiere una base de datos MySQL con al menos las siguientes tablas:

Tabla users:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  google_id VARCHAR(255) UNIQUE,
  email VARCHAR(255) NOT NULL UNIQUE,
  name VARCHAR(255),
  picture_url VARCHAR(255),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Tabla rep_youtube:

CREATE TABLE rep_youtube (
  id INT AUTO_INCREMENT PRIMARY KEY,
  video_id VARCHAR(50) NOT NULL,
  title VARCHAR(255) NOT NULL,
  channel VARCHAR(255),
  thumbnail VARCHAR(255),
  duration VARCHAR(20),
  added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Description
Servidor de control y reproduccion de audio
Readme 8.8 MiB
Languages
JavaScript 71.3%
SCSS 10.9%
Less 9.9%
CSS 6.1%
HTML 1.5%
Other 0.3%