import { getTranslations } from "next-intl/server"; import { ContentCard, EmptyState } from "@/components/public/ui"; import { PhotoLightbox, type LightboxPhoto } from "@/components/public/photo-lightbox"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; export const metadata = { title: "Photos" }; type Photo = { id: number; userId: number; roomId: number; timestamp: number; url: string; }; function formatDate(timestamp: number): string { return new Date(timestamp * 1000) .toISOString() .slice(0, 16) .replace("T", " "); } export default async function PhotosPage() { const t = await getTranslations("pages.photos"); let photos: Photo[] = []; try { photos = await prisma.cameraWeb.findMany({ orderBy: { timestamp: "desc" }, take: 48, }); } catch { photos = []; } // Pre-shape for the client lightbox: translate captions server-side so the // client component stays free of i18n/prisma dependencies. const items: LightboxPhoto[] = photos.map((p) => ({ id: String(p.id), url: p.url, alt: t("photoAlt", { id: p.userId }), date: formatDate(p.timestamp), user: t("byUser", { id: p.userId }), })); return (
{items.length === 0 ? ( {t("noPhotos")} ) : ( )}
); }