import type { PageServerLoad } from './$types'; import { backendFetch } from '$lib/server/scraper'; import { log } from '$lib/server/logger'; import { listBooks } from '$lib/server/pocketbase'; export interface ImageModelInfo { id: string; label: string; provider: string; supports_ref: boolean; recommended_for: string[]; // "cover" | "chapter" description: string; } export interface BookSummary { slug: string; title: string; summary: string; cover: string; } export const load: PageServerLoad = async () => { // parent layout already guards admin role const [modelsResult, books] = await Promise.allSettled([ (async () => { const res = await backendFetch('/api/admin/image-gen/models'); if (!res.ok) throw new Error(`status ${res.status}`); const data = await res.json(); return (data.models ?? []) as ImageModelInfo[]; })(), listBooks() ]); if (modelsResult.status === 'rejected') { log.warn('admin/image-gen', 'failed to load models', { err: String(modelsResult.reason) }); } return { models: modelsResult.status === 'fulfilled' ? modelsResult.value : ([] as ImageModelInfo[]), books: (books.status === 'fulfilled' ? books.value : []).map((b) => ({ slug: b.slug, title: b.title, summary: b.summary ?? '', cover: b.cover ?? '' })) as BookSummary[] }; };