import Image from "next/image"; import Link from "next/link"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { cached } from "@/lib/cache"; import { avatarImageUrl } from "@/lib/format"; import { formatDate } from "@/lib/format-date"; import { prisma } from "@/lib/prisma"; import { resolveHotelName } from "@/lib/hotel-name"; import { siteSettings } from "@/lib/services/site-settings"; import { auth } from "@/lib/auth"; import { ThemeSwitcher } from "@/components/theme-switcher"; import { LanguageSwitcher } from "@/components/language-switcher"; export const revalidate = 120; async function getHotelData() { const [hotelName, imagerRaw] = await Promise.all([ resolveHotelName(), siteSettings.get( "habbo_imaging_url", "https://www.habbo.com/habbo-imaging/avatarimage", ), ]); const imager = imagerRaw ?? "https://www.habbo.com/habbo-imaging/avatarimage"; const [online, users, rooms, articles, recentUsers, recentPhotos, latestUsers] = await Promise.all([ cached("online_count", 10_000, () => prisma.user.count({ where: { online: "1" } }), ).catch(() => 0), cached("total_users", 30_000, () => prisma.user.count()).catch(() => 0), cached("total_rooms", 30_000, () => prisma.rooms.count()).catch(() => 0), prisma.websiteArticles .findMany({ orderBy: { createdAt: "desc" }, take: 5 }) .catch(() => []), prisma.user .findMany({ where: { online: "1" }, select: { username: true, look: true }, take: 30, }) .catch(() => []), prisma.cameraWeb .findMany({ orderBy: { timestamp: "desc" }, take: 4 }) .catch(() => []), prisma.user .findMany({ orderBy: { accountCreated: "desc" }, select: { username: true, look: true }, take: 8, }) .catch(() => []), ]); return { hotelName, imager, online, users, rooms, articles, recentUsers, recentPhotos, latestUsers, }; } export default async function Home() { const session = await auth(); if (session?.user?.id) redirect("/me"); const tp = await getTranslations("pages.home"); const th = await getTranslations("header"); const { hotelName, imager, online, users, rooms, articles, recentUsers, recentPhotos, latestUsers, } = await getHotelData(); return (
{th("tagline")}
{f.desc}
{formatDate(a.createdAt, "date", "")}
{tp("noArticles")}
)}{tp("welcomeBody")}