Skip to content

BertoMP/mediatracker

Repository files navigation

🎬 MediaTracker — Backend

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.


📖 ¿Qué es MediaTracker?

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

🏗️ Arquitectura técnica

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

🚀 Inicio rápido

Prerrequisitos

  • 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.

Configuración inicial

  1. Clona el repositorio
   git clone <repo-url>
   cd mediatracker-backend
  1. Verifica tu versión de Java
   java -version
   # Debe mostrar: openjdk version "25" o superior
  1. Configura Flyway
   cp flyway.conf.example flyway.conf
   # Edita flyway.conf si necesitas cambiar credenciales

Configuración por defecto del docker-compose.yml:

  • Base de datos: mediatracker
  • Usuario: mediatracker_admin
  • Password: mediatracker_secret
  • Puerto: 5433 (host) → 5432 (contenedor)
  1. Levanta los servicios auxiliares
   docker-compose up -d
   docker-compose ps

Servicios disponibles:

Servicio Imagen Puerto Host Credenciales
PostgreSQL 18 postgres:18-alpine 5433 user: mediatracker_admin
pass: 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.

  1. Aplica las migraciones
   ./mvnw -Dflyway.configFiles=./flyway.conf flyway:migrate
  1. Arranca la aplicación
   ./mvnw spring-boot:run

🌐 Endpoints disponibles

  • 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

🗄️ Gestión de base de datos con Flyway

Comandos principales

# 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

Comandos avanzados

# 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

Usar plugin sin declararlo en pom.xml

./mvnw org.flywaydb:flyway-maven-plugin:10.6.0:<goal> \
  -Dflyway.configFiles=./flyway.conf

🐳 Gestión de Docker Compose

Comandos útiles

# 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 cache

Conectarse a los servicios

PostgreSQL:

# Desde host
psql -h localhost -p 5433 -U mediatracker_admin -d mediatracker

# Desde contenedor
docker exec -it mediatracker-db psql -U mediatracker_admin -d mediatracker

Redis:

# 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_secret

🛠️ Desarrollo

Estructura del proyecto

src/
├── 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/

Ejecutar tests

# Todos los tests
./mvnw test

# Tests específicos
./mvnw test -Dtest=NombreDelTest

# Empaquetar sin tests
./mvnw -DskipTests package

Variables de entorno

Crea 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 25

Archivo flyway.conf de ejemplo

flyway.url=jdbc:postgresql://localhost:5433/mediatracker
flyway.user=mediatracker_admin
flyway.password=mediatracker_secret
flyway.locations=filesystem:src/main/resources/db/migration

📦 Despliegue

# 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

🧪 Próximas mejoras

  • 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

📄 Licencia

Este proyecto está bajo licencia MIT. Ver archivo LICENSE para más detalles.


Última actualización: 2025-12-27

About

Media tracking application with hexagonal architecture and Domain-Driven Design (DDD)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages