export const dynamic = 'force-dynamic'; import { prisma } from '@/lib/db'; import Header from '@/components/Header'; import MediaWall from '@/components/MediaWall'; async function getInitialMedia() { try { const items = await prisma.mediaItem.findMany({ where: { published: true }, take: 51, orderBy: [ { featured: 'desc' }, { sortOrder: 'asc' }, { createdAt: 'desc' }, ], include: { _count: { select: { likes: true } } }, }); let nextCursor: number | null = null; if (items.length > 50) { const extra = items.pop(); nextCursor = extra!.id; } // Fetch voting status for the client const settings = await prisma.appSettings.findUnique({ where: { id: 1 } }); // Fetch available directories for filtering const dirs = await prisma.mediaItem.findMany({ where: { published: true }, select: { directory: true }, distinct: ['directory'], orderBy: { directory: 'asc' } }); const directories = dirs.map(d => d.directory).filter(Boolean); // Serialize BigInt values for client return { items: JSON.parse(JSON.stringify(items, (_key, value) => typeof value === 'bigint' ? Number(value) : value )), nextCursor, votingOpen: settings?.votingOpen ?? false, directories, }; } catch (error) { console.error('[Page] Error fetching initial media:', error); return { items: [], nextCursor: null, votingOpen: false, directories: [] }; } } export default async function HomePage() { const data = await getInitialMedia(); return (
); }