import { error } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; import { requireUser } from '#lib/server/auth.js'; import { getPiece, getTaxonomy } from '#lib/server/content.js'; import { renderMarkdown } from '#lib/server/markdown.js'; import { buildEmbedUrl, type PresentationContent } from '#lib/server/presentation.js'; export const load: PageServerLoad = ({ locals, params }) => { requireUser(locals.user); const piece = getPiece(params.id); if (!piece) error(404, 'Piece nicht gefunden'); const source = piece.presentationSourcePosition === null ? null : (piece.sources[piece.presentationSourcePosition] ?? null); const content: PresentationContent & { sources: typeof piece.sources; images: { id: string; altText: string }[]; } = { mode: piece.presentationMode, topics: getTaxonomy() .topics.filter((topic) => piece.topicIds.includes(topic.id)) .map((topic) => topic.name), title: piece.outputTitle || piece.title, html: renderMarkdown(piece.presentationText), source, previewTitle: piece.presentationTitle, description: piece.presentationDescription, imageUrl: piece.presentationImageUrl, siteName: piece.presentationSiteName, provider: piece.presentationProvider === 'youtube' || piece.presentationProvider === 'tiktok' ? piece.presentationProvider : '', providerId: piece.presentationProviderId, embedUrl: buildEmbedUrl( piece.presentationProvider === 'youtube' || piece.presentationProvider === 'tiktok' ? piece.presentationProvider : '', piece.presentationProviderId, source?.timecodeSeconds ?? null ), sources: [], images: piece.media .filter((item) => item.id === piece.presentationMediaId) .map((item) => ({ id: item.id, altText: item.altText })) }; return { pieceId: piece.id, content }; };