diff --git a/frontend/src/routes/explore/+page.server.ts b/frontend/src/routes/explore/+page.server.ts new file mode 100644 index 0000000..d6754e6 --- /dev/null +++ b/frontend/src/routes/explore/+page.server.ts @@ -0,0 +1,21 @@ +import type { PageServerLoad } from './$types'; +import { error } from '@sveltejs/kit'; +import { createApiClient } from '$lib/server/api'; + +const PAGE_SIZE = 24; + +export const load: PageServerLoad = async ({ url, locals, fetch }) => { + const query = url.searchParams.get('q')?.trim() ?? ''; + const page = Math.max(1, Number(url.searchParams.get('page')) || 1); + + const api = createApiClient({ fetch, accessToken: locals.accessToken ?? undefined }); + const { data, error: err } = await api.GET('/tracks', { + params: { query: { name: query || undefined, pageNumber: page, pageSize: PAGE_SIZE } } + }); + + if (err || !data) { + error(502, 'No se pudieron cargar las canciones.'); + } + + return { tracks: data, query }; +}; diff --git a/frontend/src/routes/explore/+page.svelte b/frontend/src/routes/explore/+page.svelte new file mode 100644 index 0000000..280f986 --- /dev/null +++ b/frontend/src/routes/explore/+page.svelte @@ -0,0 +1,112 @@ + + + + Explorar · Musify + + + +
+

Explorar

+

Descubre canciones o busca por nombre.

+ +
+
+ 🔍 + +
+ +
+ +

+ {#if data.query} + {total} + {total === 1 ? 'resultado' : 'resultados'} para «{data.query}» + {:else} + {total} + {total === 1 ? 'canción' : 'canciones'} + {/if} +

+ + {#if tracks.items.length === 0} +
+
🎵
+

+ {#if data.query} + No hay canciones que coincidan con «{data.query}». + {:else} + Todavía no hay canciones. ¡Sé el primero en subir una! + {/if} +

+
+ {:else} + + + {#if tracks.hasPreviousPage || tracks.hasNextPage} + + {/if} + {/if} +