8 Commits

Author SHA1 Message Date
deivid b4cc8770a7 reproduce ganador en dispositivo seleccionado si lo permite
- play_winner acepta device_id del formulario y verifica que el
  dispositivo exista y no sea restringido antes de reproducir
- corrige construcción del URI según spotify_type del ganador
  (antes siempre usaba spotify:playlist: independiente del tipo)
- errores se muestran en la página admin en lugar de HTTPException cruda
- template sincroniza device_id activo al campo oculto del formulario
- dispositivos restringidos se marcan en el selector del admin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 19:29:29 -04:00
David Inostroza d88547e310 reinicia votos al activar ventana de votación y al reproducir ganador
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 18:51:38 -04:00
deivid 36a40938c7 corrige zona horaria en votación: TZ=America/Santiago en contenedor
El contenedor corría en UTC causando que la ventana horaria no
coincidiera con la hora local. Se agrega TZ en docker-compose y se
muestra la hora actual del servidor en el panel de votación.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 18:16:39 -04:00
deivid 2abe7b47fd corrige nombre de playlists curadas: elimina fields= en llamada a API
El parámetro fields="name,description,images" causaba error en playlists
curadas de Spotify (ej. "This Is ..."), haciendo que el nombre cayera
al fallback con el spotify_id.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 18:06:03 -04:00
deivid d47f6f4a52 soporta URLs de Spotify con prefijo de idioma (intl-es, intl-pt, etc.)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 17:55:45 -04:00
deivid 01f04c44d9 persiste datos en ./data/ montado como volumen del host
Reemplaza los bind mounts individuales de cantina.db y .spotify_cache
por un único directorio ./data/ montado en /app/data. El entrypoint
crea el directorio y los archivos vacíos si no existen, evitando que
Docker los cree como directorios al hacer un despliegue limpio.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 17:54:38 -04:00
deivid 808ddd889d agrega botón Admin en navbar con detección de sesión
- Nuevo endpoint GET /admin/status devuelve si el usuario está logueado como admin
- Navbar muestra botón "Admin" que lleva a /admin/login si no hay sesión,
  o "⚙ Admin" → /admin/playlists si ya está autenticado

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 13:59:16 -04:00
deivid a1b9c0139d commit inicial 2026-04-23 00:39:58 -04:00