Backend REST para gestionar música: álbumes, canciones, artistas, playlists, usuarios y perfiles, con autenticación mediante JWT y control de acceso por roles (ADMIN / USUARIO).
- Java + Spring Boot
- Spring Web (REST API)
- Spring Security + JWT
- Spring Data JPA
- H2 Database (modo desarrollo)
- Lombok
- DTOs para desacoplar entidades y respuestas
- JUnit 5 para pruebas unitarias
- Mockito para mocks en tests
- Registro de usuarios
- Login con JWT
- Roles:
USUARIO(por defecto)ADMIN(acciones protegidas)
- Crear canción (solo ADMIN)
- Listar canciones
- Obtener canción por ID
- Eliminar canción (solo ADMIN)
- Crear álbum
- Listar álbumes
- Obtener álbum por ID
- Eliminar álbum (solo ADMIN)
- Listar álbumes con canciones
- Crear artista
- Listar artistas
- Obtener artista por ID
- Crear playlist
- Listar playlists
- Obtener playlist por ID
- Eliminar playlist
- Añadir canciones a una playlist
- Crear perfil
- Listar perfiles
- Obtener perfil por ID
La aplicación usa JWT (JSON Web Token) para autenticar y autorizar las peticiones.
Después de hacer login, el token devuelto debe enviarse en cada petición protegida:
Authorization: Bearer TU_TOKEN
Se usan anotaciones como @PreAuthorize para controlar el acceso por rol.
En desarrollo se utiliza H2.
usuariosalbumescancionesartistasplaylistsperfiles
playlist_cancionusuario_playlistusuario_cancionartista_cancion
El proyecto incluye pruebas unitarias usando:
- JUnit 5 para testear la lógica de negocio
- Mockito para simular dependencias (servicios, repositorios, etc.)
Las pruebas se encuentran en:
src/test/java
Se pueden ejecutar desde IntelliJ o con Maven/Gradle.
- Abrir el proyecto en IntelliJ IDEA
- Ejecutar la clase principal anotada con
@SpringBootApplication - La API quedará disponible en:
http://localhost:8080
(el puerto puede variar según application.properties)
POST /api/usuarios/login
{
"username": "maria",
"password": "1234"
}Respuesta:
TOKEN_JWT
En todas las peticiones protegidas:
Authorization: Bearer TOKEN_JWT
POST /api/usuarios/registerPOST /api/usuarios/login
GET /api/cancionesPOST /api/canciones(ADMIN)GET /api/canciones/{id}DELETE /api/canciones/{id}(ADMIN)
GET /api/albumesPOST /api/albumesGET /api/albumes/{id}GET /api/albumes/con-cancionesDELETE /api/albumes/{id}(ADMIN)
GET /api/artistasPOST /api/artistasGET /api/artistas/{id}
GET /api/playlistsPOST /api/playlistsGET /api/playlists/{id}DELETE /api/playlists/{id}POST /api/playlists/{playlistId}/canciones/{cancionId}
GET /api/perfilesPOST /api/perfilesGET /api/perfiles/{id}
- Los usuarios registrados tienen rol
USUARIO - El rol
ADMINes necesario para eliminar o crear ciertos recursos
Proyecto backend realizado como práctica con Spring Boot + JWT + API REST.