Mixes are their own concept, not playlists: they live in their own Mixes/MixItems tables, cannot be edited and never show up among the user's playlists. Each item is either a Musify track or a YouTube Music reference, so YouTube songs stream directly instead of being downloaded. A daily Hangfire job seeds the mixes from the listening history: one discovery mix, one daily mix and one per top artist. The per-user YouTube filler query was already in the working tree and rides along here because it shares files with this change.
29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
import type { PageServerLoad, Actions } from './$types';
|
|
import { createApiClient, requireUser, unwrapOrError } from '$lib/server/api';
|
|
import { addTrackAction, addYouTubeToPlaylistAction } from '$lib/server/playlistActions';
|
|
import { PLAYLIST_PICKER_PAGE_SIZE } from '$lib/config';
|
|
|
|
export const load: PageServerLoad = async ({ params, locals, url, fetch }) => {
|
|
const user = requireUser(locals, url);
|
|
const api = createApiClient({ fetch, accessToken: locals.accessToken ?? undefined });
|
|
|
|
const [mixRes, playlistsRes] = await Promise.all([
|
|
api.GET('/mixes/{id}', { params: { path: { id: params.id } } }),
|
|
api.GET('/playlists/users/{userId}', {
|
|
params: {
|
|
path: { userId: user.sub },
|
|
query: { pageNumber: 1, pageSize: PLAYLIST_PICKER_PAGE_SIZE }
|
|
}
|
|
})
|
|
]);
|
|
|
|
const mix = unwrapOrError(mixRes, 'Mezcla no encontrada.', 404);
|
|
|
|
return { mix, playlists: playlistsRes.data?.items ?? [] };
|
|
};
|
|
|
|
export const actions: Actions = {
|
|
addTrack: addTrackAction,
|
|
addYouTubeToPlaylist: addYouTubeToPlaylistAction
|
|
};
|