Skip to content

MahsaSimaei/Museic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Museic

Aplicación full‑stack (Frontend + Backend) para catálogo musical, playlists, favoritos e historial de reproducción.

Tecnologías utilizadas

  • Frontend: HTML, CSS, JavaScript (vanilla)
  • Backend: Node.js + Express
  • Base de datos: MySQL
  • Autenticación: JWT
  • Seguridad de contraseñas: bcrypt
  • Integración de música: Jamendo API

Librerías principales (backend): express, mysql2, jsonwebtoken, bcrypt, axios, cors, dotenv.

Estructura

  • frontend/: app web (HTML/CSS/JS).
  • backend/: API REST (Node.js + Express).
  • database/museic_db.sql: esquema MySQL con tablas de usuarios, canciones, playlists, favoritos e historial.
  • MUSIC_LICENSES.md: fuente/licencias de la música (uso educativo).

Requisitos

  • Windows
  • XAMPP (MySQL y Apache)
  • Node.js (para ejecutar el backend)

Base de datos (MySQL)

  1. Inicia MySQL desde XAMPP.
  2. Importa el esquema en tu servidor MySQL:
    • Archivo: database/museic_db.sql
    • Puedes importarlo desde phpMyAdmin en XAMPP.

Notas:

  • El script crea la base museic_db si no existe.
  • Incluye usuarios de prueba (ADMIN y USER), listados más abajo.

Instalación

cd backend
npm install

Variables de entorno

Crea backend/.env :

# Recomendado: 3002 
PORT=3002

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=
DB_NAME=museic_db

JWT_SECRET="ClaveSecretaDeMuseic"

# Jamendo 
JAMENDO_CLIENT_ID=1ebf1a56

#habilita registro como ADMIN por código
ADMIN_REGISTRATION_CODE=webs

Ejecutar

# Desarrollo
npm run dev

Servidor por defecto: http://localhost:3002 (o el puerto que definas en PORT).

Abrir la app

Recomendado (Apache/XAMPP): sirve el proyecto desde htdocs y abre:

  • http://localhost/Museic/frontend/

Autenticación y roles

  • Autenticación por JWT.
  • Roles disponibles: USER y ADMIN.
  • Registro de ADMIN:
    • Por defecto, el registro como admin está bloqueado.
    • Si defines ADMIN_REGISTRATION_CODE en .env, puedes registrarte como ADMIN enviando rol: "ADMIN" y adminCode.

Credenciales de prueba

Al importar database/museic_db.sql se crean/actualizan estos usuarios:

  • ADMIN

    • Email: admin@museic.com
    • Password: admin123
  • USER

    • Email: user@museic.com
    • Password: user12345

Endpoints principales (API v1)

Base URL: /api/v1

Auth

  • POST /auth/register
  • POST /auth/login

Canciones

  • GET /songs/catalogue (requiere JWT)

    • Devuelve canciones del catálogo local (Canciones).
  • GET /songs/search?q=... (requiere JWT + ADMIN)

    • Busca canciones en Jamendo.
  • POST /songs/add (requiere JWT + ADMIN)

    • Importa/guarda una canción externa en Canciones.
  • GET /songs/stream/:id

    • Redirige a url_stream.
    • Incrementa Canciones.num_reproducciones.
    • Si envías token (header Authorization: Bearer <JWT> o query ?token=<JWT>), agrega una fila en Historial_Reproduccion.
  • POST /songs/:id/like (requiere JWT)

    • Toggle Like/Dislike en Favoritos.
  • DELETE /songs/:id (requiere JWT + ADMIN)

    • Elimina una canción del catálogo.

Favoritos

  • POST /favorites/:songId (requiere JWT)

    • “Dar like” idempotente (si ya existe, no duplica).
  • GET /favorites (requiere JWT)

    • Lista canciones favoritas del usuario.

Nota: en el frontend se usa principalmente POST /songs/:id/like (toggle). El endpoint /favorites/:songId existe para “añadir” de forma idempotente.

Playlists

  • POST /playlists (requiere JWT)
  • GET /playlists/me (requiere JWT)
  • GET /playlists/:id (requiere JWT; respeta visibilidad)
  • PUT /playlists/:id (requiere JWT; dueño)
  • DELETE /playlists/:id (requiere JWT; dueño)
  • POST /playlists/:id/add-song (requiere JWT; dueño) body: { "id_cancion": number }
  • DELETE /playlists/:id/songs/:songId (requiere JWT; dueño)
  • PUT /playlists/:id/reorder (requiere JWT; dueño) body: { "songIds": number[] }

Panel Admin

  • Vista HTML: GET /admin/songs?token=<JWT_ADMIN>

    • Permite importar desde Jamendo, editar título/género, y eliminar canciones.
  • API usada por el panel:

    • PUT /api/v1/admin/songs/:id (ADMIN)
    • DELETE /api/v1/admin/songs/:id (ADMIN)

Documentación de base de datos (resumen)

Tablas principales (ver database/museic_db.sql):

  • Usuarios: credenciales, rol (USER/ADMIN), fecha de registro.
  • Canciones: metadatos (título, artista, duración, género, licencia/propósito si aplica), URL de streaming y contador de reproducciones.
  • Playlists: metadatos de playlist y visibilidad (PUBLIC/PRIVATE).
  • Playlist_Canciones: tabla pivote para el orden de canciones dentro de una playlist.
  • Favoritos: relación usuario↔canción con timestamp.
  • Historial_Reproduccion: reproducciones recientes por usuario.

About

Museic — A creative blend of muse (inspiration) and music. This project is a full-stack web application developed by students of Universidad Europea to manage playlists using open-source music.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors