MediaTracker es una aplicación para hacer seguimiento, reseñas y valoraciones de todo tu contenido favorito: películas, series, animes, mangas, libros y más. Este repositorio contiene el backend construido con Spring Boot.
MediaTracker te permite:
- 📚 Catalogar todo tu contenido multimedia en un solo lugar
- ⭐ Valorar y reseñar películas, series, animes, mangas, libros...
- 📊 Hacer seguimiento de tu progreso (capítulos vistos, páginas leídas, etc.)
- 🔖 Organizar tu contenido por listas, etiquetas y estados (pendiente, en progreso, completado)
- 🎯 Descubrir nuevas recomendaciones basadas en tus gustos
Stack principal:
- ☕ Java 25 con Spring Boot 4
- 🐘 PostgreSQL 18 (base de datos)
- 🔴 Redis 8 (caché y sesiones)
- 🦅 Flyway (migraciones de BD)
- 🐳 Docker Compose (entorno de desarrollo)
Características:
- Arquitectura hexagonal (puertos y adaptadores)
- API REST documentada con Swagger/OpenAPI
- Seguridad con Spring Security
- Actuator para métricas y health checks
- Virtual Threads (Project Loom) para mejor concurrencia
- ☕ JDK 25 (requerido para Spring Boot 4)
- 🐳 Docker y Docker Compose (para PostgreSQL 18 y Redis 8)
- 🔧 Maven (incluido via wrapper
mvnw)
Nota: No necesitas instalar PostgreSQL ni Redis localmente, Docker Compose se encarga de todo.
- Clona el repositorio
git clone <repo-url>
cd mediatracker-backend- Verifica tu versión de Java
java -version
# Debe mostrar: openjdk version "25" o superior- Configura Flyway
cp flyway.conf.example flyway.conf
# Edita flyway.conf si necesitas cambiar credencialesConfiguración por defecto del docker-compose.yml:
- Base de datos:
mediatracker - Usuario:
mediatracker_admin - Password:
mediatracker_secret - Puerto:
5433(host) →5432(contenedor)
- Levanta los servicios auxiliares
docker-compose up -d
docker-compose psServicios disponibles:
| Servicio | Imagen | Puerto Host | Credenciales |
|---|---|---|---|
| PostgreSQL 18 | postgres:18-alpine |
5433 |
user: mediatracker_adminpass: mediatracker_secret |
| Redis 8 | redis:8-alpine |
6380 |
pass: redis_secret |
Health checks incluidos: Ambos servicios tienen health checks configurados para verificar que están listos.
- Aplica las migraciones
./mvnw -Dflyway.configFiles=./flyway.conf flyway:migrate- Arranca la aplicación
./mvnw spring-boot:run- API Base:
http://localhost:8080/api/v1 - Swagger UI:
http://localhost:8080/api/v1/swagger-ui.html - Health Check:
http://localhost:8080/actuator/health - API Docs (JSON):
http://localhost:8080/api-docs
# Ver estado de migraciones
./mvnw -Dflyway.configFiles=./flyway.conf flyway:info
# Aplicar migraciones pendientes
./mvnw -Dflyway.configFiles=./flyway.conf flyway:migrate
# Validar migraciones
./mvnw -Dflyway.configFiles=./flyway.conf flyway:validate
# Reparar metadatos (usar con precaución)
./mvnw -Dflyway.configFiles=./flyway.conf flyway:repair
# Limpiar BD completa (⚠️ PELIGROSO - solo desarrollo)
./mvnw -Dflyway.configFiles=./flyway.conf flyway:clean# Simular migración sin ejecutar (dry-run)
./mvnw -Dflyway.configFiles=./flyway.conf flyway:dryRunMigrate
# Crear baseline para BD existente
./mvnw -Dflyway.configFiles=./flyway.conf flyway:baseline
# Revertir última migración (requiere Flyway Teams)
./mvnw -Dflyway.configFiles=./flyway.conf flyway:undo./mvnw org.flywaydb:flyway-maven-plugin:10.6.0:<goal> \
-Dflyway.configFiles=./flyway.conf# Levantar servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
docker-compose logs -f db # Solo PostgreSQL
docker-compose logs -f cache # Solo Redis
# Ver estado de servicios
docker-compose ps
# Detener servicios
docker-compose stop
# Detener y eliminar contenedores
docker-compose down
# Detener, eliminar contenedores Y VOLÚMENES (⚠️ borra datos)
docker-compose down -v
# Reiniciar un servicio específico
docker-compose restart db
docker-compose restart cachePostgreSQL:
# Desde host
psql -h localhost -p 5433 -U mediatracker_admin -d mediatracker
# Desde contenedor
docker exec -it mediatracker-db psql -U mediatracker_admin -d mediatrackerRedis:
# Desde host (necesitas redis-cli instalado)
redis-cli -h localhost -p 6380 -a redis_secret
# Desde contenedor
docker exec -it mediatracker-cache redis-cli -a redis_secretsrc/
├── main/
│ ├── java/com/bertomp/MediaTracker/
│ │ ├── modules/
│ │ │ ├── media/ # Módulo de medios
│ │ │ └── user/ # Módulo de usuarios
│ │ └── shared/ # Código compartido
│ │ └ config/ # Configuraciones generales
│ └── resources/
│ ├── db/migration/ # Migraciones Flyway
│ ├── application.yml
│ └── application-local.yml
└── test/
# Todos los tests
./mvnw test
# Tests específicos
./mvnw test -Dtest=NombreDelTest
# Empaquetar sin tests
./mvnw -DskipTests packageCrea un archivo application-local.yml (ya incluido en .gitignore) para configuración local:
spring:
datasource:
url: jdbc:postgresql://localhost:5433/mediatracker
username: mediatracker_admin
password: mediatracker_secret
data:
redis:
host: localhost
port: 6380
password: redis_secret
threads:
virtual:
enabled: true # Aprovecha Virtual Threads de Java 25flyway.url=jdbc:postgresql://localhost:5433/mediatracker
flyway.user=mediatracker_admin
flyway.password=mediatracker_secret
flyway.locations=filesystem:src/main/resources/db/migration# Empaquetar aplicación
./mvnw clean package -DskipTests
# Ejecutar JAR
java -jar target/mediatracker-*.jar
# Con perfil específico
java -jar target/mediatracker-*.jar --spring.profiles.active=production
# Habilitar Virtual Threads explícitamente
java -jar target/mediatracker-*.jar --spring.threads.virtual.enabled=true- Sistema de autenticación JWT completo
- Endpoints de registro y login
- Integración con APIs externas (TMDb, MyAnimeList, etc.)
- Sistema de recomendaciones
- Búsqueda y filtros avanzados
- Estadísticas y gráficas de consumo
- Notificaciones y recordatorios
- Métricas avanzadas con Micrometer
Este proyecto está bajo licencia MIT. Ver archivo LICENSE para más detalles.
Última actualización: 2025-12-27