# 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](#acerca-del-proyecto) - [Estructura de la API](#estructura-de-la-api) - [Tecnologías](#tecnologías) - [Instalación y Uso](#instalación-y-uso) - [Variables de Entorno](#variables-de-entorno) - [Estructura de la Base de Datos](#estructura-de-la-base-de-datos) ## 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=`: 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:** ```bash git clone cd audio_control ``` 2. **Instala las dependencias:** ```bash 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:** ```bash 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`**: ```sql 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`**: ```sql 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 ); ```