import type { Metadata } from "next"; import { cookies } from "next/headers"; import { redirect } from "next/navigation"; import { AdminPanelTabs } from "@/components/admin/AdminPanelTabs"; import Header from "@/components/Header"; import { searchAdminItems } from "@/lib/prisma/queries/items"; import { getAllSubscriptionTiers } from "@/lib/prisma/queries/subscription-tiers"; import { getUserById } from "@/lib/prisma/queries/users"; import { getSession } from "@/lib/redis/session"; export async function generateMetadata(): Promise { return { title: "Painel Administrativo", description: "Gerencie assinaturas, permissões e catalogação de itens exclusivos do Tibia Trade.", }; } export default async function AdminPage({ params, searchParams, }: { params: Promise<{ locale: string }>; searchParams: | Promise> | Record; }) { const { locale } = await params; const resolvedSearchParams = searchParams instanceof Promise ? await searchParams : searchParams; const tabParam = resolvedSearchParams?.tab; const initialTab = typeof tabParam === "string" && ["overview", "subscriptions", "items"].includes(tabParam) ? (tabParam as "overview" | "subscriptions" | "items") : "overview"; const cookieStore = await cookies(); const sessionId = cookieStore.get("sessionId")?.value; if (!sessionId) { redirect(`/${locale}`); } const session = await getSession(sessionId); if (!session || session.userId !== 1) { redirect(`/${locale}`); } const [tiers, adminUser, initialItems] = await Promise.all([ getAllSubscriptionTiers(true), getUserById(session.userId), searchAdminItems({ page: 1, pageSize: 50 }), ]); const normalizedTiers = tiers.map((tier) => { const featureList = (tier.features ?? []) as Array>; return { ...tier, price_monthly: tier.price_monthly ? Number(tier.price_monthly) : null, price_yearly: tier.price_yearly ? Number(tier.price_yearly) : null, created_at: tier.created_at instanceof Date ? tier.created_at.toISOString() : tier.created_at, updated_at: tier.updated_at instanceof Date ? tier.updated_at.toISOString() : tier.updated_at, features: featureList.map((feature) => ({ ...feature, created_at: feature.created_at instanceof Date ? feature.created_at.toISOString() : (feature.created_at ?? null), updated_at: feature.updated_at instanceof Date ? feature.updated_at.toISOString() : (feature.updated_at ?? null), })), }; }); return (

Painel administrativo

Centralize a gestão de planos, permissões e o catálogo de itens. Utilize as abas para acessar cada área temática.

); }