import { eq } from "drizzle-orm"; import Image from "next/image"; import Link from "next/link"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { updateMotto } from "@/actions/user-settings"; import { Reveal } from "@/components/motion-reveal"; import { auth } from "@/lib/auth"; import { db, User } from "@/lib/db"; import { avatarImageUrl } from "@/lib/format"; export default async function SettingsPage() { const t = await getTranslations("pages.settings"); const session = await auth(); if (!session?.user?.id) redirect("/login"); const id = Number(session.user.id); let user: { username: string; motto: string; look: string; mail: string | null; } | null = null; try { const [row] = await db .select({ username: User.username, motto: User.motto, look: User.look, mail: User.mail, }) .from(User) .where(eq(User.id, id)) .limit(1); user = row ?? null; } catch { user = null; } if (!user) redirect("/login"); const avatar = avatarImageUrl(user.look, { size: "l" }); return (
{t("accountSettingsSubtitle")}
{user.motto || ( {t("noMotto")} )}
{user.mail || t("noEmail")}
{t("changeMottoSubtitle")}
{t("securityDescription")}
{t("twoFactorLink")}View active sessions and sign out everywhere