import { auth } from "@/auth"; import { getDomains } from "@/lib/mailcow"; import { canAccessDomain } from "@/lib/users"; import { formatBytes } from "@/lib/format"; export default async function DashboardPage() { const session = await auth(); const role = session?.user?.role; const userDomains = session?.user?.domains ?? []; const allDomains = await getDomains(); const visibleDomains = allDomains.filter((d) => canAccessDomain(userDomains, d.domain_name)); const totalMailboxes = visibleDomains.reduce((sum, d) => sum + d.mboxes_in_domain, 0); const totalAliases = visibleDomains.reduce((sum, d) => sum + d.aliases_in_domain, 0); return ( <>

Dashboard

Hoş geldiniz, {session?.user?.name} 👋

} /> } /> } /> {role === "SUPER_ADMIN" && ( } /> )}
{/* Domain durum tablosu */} {visibleDomains.length > 0 && (

Domain Durumu

{visibleDomains.map((d) => { const quotaUsed = Number(d.quota_used_in_domain); const quotaTotal = d.max_quota_for_domain; const pct = quotaTotal > 0 ? Math.min((quotaUsed / quotaTotal) * 100, 100) : 0; return ( ); })}
Domain Mail Kutuları Kota Kullanımı Durum
{d.domain_name}
{d.mboxes_in_domain} / {d.max_num_mboxes_for_domain}
{formatBytes(quotaUsed)} / {formatBytes(quotaTotal)}
80 ? "danger" : ""}`} style={{ width: `${pct}%` }} />
{Math.round(pct)}%
{String(d.active) === "1" ? "● Aktif" : "● Pasif"}
)} {/* Quick actions */}

Hızlı İşlemler

{role === "SUPER_ADMIN" && ( } title="Domain Yönetimi" desc="Domain ekle, sil, yönet" color="var(--accent)" /> )} } title="Mail Hesapları" desc="Yeni hesap oluştur, şifre değiştir, sil" color="var(--success)" /> {role === "SUPER_ADMIN" && ( } title="Kullanıcılar" desc=".env'den tanımlı panel kullanıcılarını görüntüle" color="var(--warning)" /> )}
); } function StatCard({ label, value, sub, color, icon }: { label: string; value: number | string; sub?: string; color: string; icon: React.ReactNode; }) { return (
{icon}
{label}
{value}
{sub &&
{sub}
}
); } function QuickItem({ href, icon, title, desc, color }: { href: string; icon: React.ReactNode; title: string; desc: string; color: string; }) { return (
{icon}
{title}
{desc}
); } // Icons function GlobeIcon() { return ; } function MailIcon() { return ; } function AtIcon() { return ; } function UsersIcon() { return ; }