feat(frontend): music player component with separated controls and stream proxy

This commit is contained in:
2026-07-06 02:40:44 +02:00
parent 812913156b
commit 9b34f2db84
8 changed files with 308 additions and 0 deletions
+4
View File
@@ -3,6 +3,8 @@
import favicon from '$lib/assets/favicon.svg';
import Navbar from '$lib/components/Navbar.svelte';
import Footer from '$lib/components/Footer.svelte';
import PlayerBar from '$lib/components/player/PlayerBar.svelte';
import { player } from '$lib/player/player.svelte';
let { children, data } = $props();
</script>
@@ -13,4 +15,6 @@
<Navbar user={data.user} />
<main class="flex-1">{@render children()}</main>
<Footer />
<div class:pb-20={player.current}></div>
<PlayerBar />
</div>
@@ -0,0 +1,20 @@
import type { RequestHandler } from './$types';
import { json, error } from '@sveltejs/kit';
import { createApiClient } from '$lib/server/api';
export const GET: RequestHandler = async ({ params, locals, fetch }) => {
if (!locals.accessToken) {
error(401, 'Inicia sesión para reproducir.');
}
const api = createApiClient({ fetch, accessToken: locals.accessToken });
const { data, error: err, response } = await api.GET('/tracks/{id}/stream', {
params: { path: { id: params.id } }
});
if (err || !data) {
error(response?.status ?? 502, 'No se pudo obtener el stream de la pista.');
}
return json(data);
};