Una API RESTful para gestionar una plataforma de podcasts. Permite a los usuarios registrarse, escuchar episodios, calificarlos, marcarlos como favoritos, dejar comentarios y más. Este backend está pensado para ser consumido por un cliente (como una app móvil o frontend web), pero actualmente no incluye interfaz visual.
- Lenguaje: Java
- Framework SpringBoot
- Base de datos: MySQL
- ORM recomendado: Hibernate
Diagrama Entidad - Relación
Diagrama UML
Contiene la información básica del usuario.
name,last_name,nickname,email,usernamebio,profile_picturepassword(encriptado)reset_token
Representa cada podcast creado por un usuario.
title,description,image_urlis_active: indica si está publicado- Relación con
users(user_id)
Tabla intermedia para categorizar podcasts.
podcast_id,category(ENUM)
Episodios dentro de un podcast.
title,description,duration,audio_path,image_urlpublication_date,average_rating,views- Relación con
podcasts
Historial de reproducción del usuario.
episode_id,user_idlistened_at,rated_at,rating
Comentarios de usuarios en episodios.
user_id,episode_id,content
Relación entre usuarios y podcasts que les gustan.
user_id,podcast_id
Tabla para gestión de roles (admin, editor, user, etc.).
⚠️ Todos los endpoints están en formato RESTful y devuelven JSON.
POST /auth/register→ Crea usuarioPOST /auth/login→ Login y JWT
GET /users/:id→ Info públicaPUT /users/:id→ Editar perfilGET /users/:id/favorites→ Ver favoritos
GET /podcasts→ Listado generalPOST /podcasts→ Crear nuevoGET /podcasts/:id→ DetallePUT /podcasts/:id→ EditarDELETE /podcasts/:id→ Eliminar
GET /episodes/:id→ Info de episodioPOST /episodes→ CrearGET /podcasts/:id/episodes→ Todos los episodios del podcast
POST /episodes/:id/comments→ Agregar comentarioGET /episodes/:id/comments→ Ver comentarios
POST /episodes/:id/history→ Marcar como escuchadoPUT /episodes/:id/rate→ Puntuar episodio
git clone https://github.com/FelipeIntelangelo/podcast.git
cd podcast-api
npm install
npm run dev
* Autenticación
* Flujo sugerido completo
* Códigos de ejemplo
* Link a colección Postman
✅ **Todo listo para copiar/pegar al final del README**.- IMPORTANTE: VERIFICAR UNA VEZ EJECUTADO EL PROYECTO POR PRIMERA VEZ MODIFICAR jpa.hibernate.ddl-auto = create
-
EN
spring.jpa.hibernate.ddl-auto = validate -
PodcastProject/src/main/resources/application.properties
De esta manera deberia quedar y nos aseguramos que no cree la base de datos cada vez que se levante el servidor, perdiendo todos nuestros datos almacenados.
## 🧪 Testing de la API
Se recomienda usar herramientas como **Postman** para probar los endpoints.
A continuación, algunas pautas para testear correctamente.
---
### 🔐 Autenticación
- **Login**
`POST /login`
_Body de ejemplo:_
```json
{
"username": "usuario123",
"password": "contrasena123"
}-
Una vez autenticado, incluí el token JWT en el header de cada request protegida:
Authorization: Bearer <tu_token_aquí>
Este es un flujo base para validar que toda la API funciona correctamente de extremo a extremo:
-
Registrar un usuario
POST /registerBody:{ "name": "Juan", "last_name": "Pérez", "nickname": "jperez", "email": "juan@mail.com", "username": "juan123", "password": "claveSegura" } -
Iniciar sesión y obtener token JWT
POST /loginBody:{ "username": "juan123", "password": "claveSegura" } -
Crear un podcast
POST /podcasts/saveHeaders:Authorization: Bearer <token>Body:{ "title": "Mi Primer Podcast", "description": "Podcast sobre tecnología y desarrollo", "image_url": "https://image.com/logo.jpg" } -
Crear un episodio
POST /episodesHeaders:Authorization: Bearer <token>Body:{ "podcast_id": 1, "title": "Introducción al proyecto", "description": "Explicamos de qué se va a tratar el podcast.", "audio_path": "https://audio.com/intro.mp3", "image_url": "https://image.com/cap1.jpg", "duration": 360, "season": 1, "chapter": 1, "public_action_date": "2025-06-01T00:00:00" } -
Reproducir episodio (marcar como escuchado)
GET /episodes/playEpisode?id=1Headers:Authorization: Bearer <token> -
Comentar episodio
POST /commentaryHeaders:Authorization: Bearer <token>Body:{ "episode_id": 1, "content": "Muy buen episodio, sigan así!" } -
Calificar episodio
POST /rateHeaders:Authorization: Bearer <token>Body:{ "episode_id": 1, "score": 5 } -
Agregar podcast a favoritos
POST /users/toMyFavsHeaders:Authorization: Bearer <token>Body:{ "podcast_id": 1 } -
Ver historial de reproducción
GET /users/historyHeaders:Authorization: Bearer <token> -
Ver favoritos
GET /users/favsHeaders:Authorization: Bearer <token>
Para facilitar el testing de la API, podés importar las siguientes colecciones de Postman, organizadas por módulo.
Cada una contiene todos los endpoints relevantes y ejemplos de uso:
-
🎧 Episodios
🔗 Ver colección de Episodios -
📻 Podcasts
🔗 Ver colección de Podcasts -
👤 Usuarios
🔗 Ver colección de Usuarios
💡 Tip: Podés importar los links directamente en Postman desde
File > Import > Linky pegar cualquiera de los URLs anteriores.


