Filter library tracks on the server and add track publishing, bulk delete and album types

This commit is contained in:
2026-09-25 01:49:44 +02:00
parent 93d7a23c53
commit 9f592cfdb8
21 changed files with 505 additions and 204 deletions
@@ -1,16 +1,24 @@
import type { PageServerLoad, Actions } from './$types';
import { fail } from '@sveltejs/kit';
import { fail, isActionFailure } from '@sveltejs/kit';
import { apiFor } from '$lib/server/api';
import { requireUser } from '$lib/server/guards';
import { formIds } from '$lib/server/forms/fields';
import { formIds, formString } from '$lib/server/forms/fields';
import { tagged } from '$lib/server/actions/tagged';
import { loadLibraryTracks } from '$lib/server/albums';
import { deleteTracks } from '$lib/server/tracks';
import { loadLibraryTracks, loadStatusCounts } from '$lib/server/libraryTracks';
import { deleteTracks, setTracksPublished } from '$lib/server/tracks';
import { parseTrackFilter } from '$lib/data/libraryTracks';
export const load: PageServerLoad = async ({ locals, url, fetch }) => {
const user = requireUser(locals, url);
const api = apiFor({ fetch, locals });
return { tracks: await loadLibraryTracks(api, user.sub) };
const q = url.searchParams.get('q')?.trim() ?? '';
const filter = parseTrackFilter(url.searchParams.get('status'));
const [tracks, counts] = await Promise.all([
loadLibraryTracks(api, user.sub, { q, filter }),
loadStatusCounts(api, user.sub)
]);
return { tracks, counts, q, filter };
};
export const actions: Actions = {
@@ -26,5 +34,15 @@ export const actions: Actions = {
? 'No se pudo borrar la canción.'
: `No se pudieron borrar ${failed} de ${trackIds.length} canciones.`
});
}),
setPublished: tagged('setPublished', async ({ api, form }) => {
const trackIds = formIds(form, 'trackIds');
if (trackIds.length === 0) return fail(400, { message: 'Falta la canción.' });
const isPublished = formString(form, 'isPublished') === 'true';
const result = await setTracksPublished(api, trackIds, isPublished);
if (isActionFailure(result)) return result;
return { ...result, isPublished };
})
};