Files
sendewerk/src/routes/suche/+page.server.ts
T
2026-10-27 19:22:31 +01:00

35 lines
1.2 KiB
TypeScript

import type { PageServerLoad } from './$types';
import { requireUser } from '#lib/server/auth.js';
import { listGlobalSearchFacets, searchWorkspace } from '#lib/server/global-search.js';
import type { GlobalSearchFilters } from '#lib/server/global-search.js';
export const load: PageServerLoad = ({ locals, url }) => {
requireUser(locals.user);
const query = (url.searchParams.get('q') ?? '').trim().slice(0, 200);
const rawType = url.searchParams.get('type');
const filters: GlobalSearchFilters & {
type: NonNullable<GlobalSearchFilters['type']>;
status: string;
topicId: string;
formatId: string;
} = {
type: rawType === 'pieces' || rawType === 'shows' ? rawType : ('all' as const),
status: (url.searchParams.get('status') ?? '').slice(0, 30),
topicId: (url.searchParams.get('topic') ?? '').slice(0, 100),
formatId: (url.searchParams.get('format') ?? '').slice(0, 100)
};
const results = searchWorkspace(query, filters);
const countResults =
filters.type === 'all' ? results : searchWorkspace(query, { ...filters, type: 'all' });
return {
query,
filters,
facets: listGlobalSearchFacets(),
results,
counts: {
pieces: countResults.pieces.length,
shows: countResults.shows.length
}
};
};