import { AdminNav } from "@/components/admin/admin-nav"; import { Card } from "@/components/ui/card"; import { requireAdmin } from "@/lib/auth/current-user"; import { prisma } from "@/lib/db"; export default async function AdminLogsPage() { await requireAdmin(); const [audits, credits, ingestJobs, exportJobs, sessions] = await Promise.all([ prisma.adminAuditLog.findMany({ orderBy: { createdAt: "desc" }, take: 100 }), prisma.creditTransaction.findMany({ include: { user: { select: { email: true } }, actor: { select: { email: true } } }, orderBy: { createdAt: "desc" }, take: 100 }), prisma.ingestJob.findMany({ orderBy: { createdAt: "desc" }, take: 50 }), prisma.exportJob.findMany({ include: { user: { select: { email: true } } }, orderBy: { createdAt: "desc" }, take: 50 }), prisma.authSession.findMany({ include: { user: { select: { email: true } } }, orderBy: { createdAt: "desc" }, take: 50 }) ]); return (

Log Merkezi

Admin audit, kredi hareketleri, veri işleri ve oturum kayıtları.

Admin audit logları

{audits.map((log) =>
{log.action}{log.createdAt.toLocaleString("tr-TR")}

{log.summary}

{log.actorEmail} · {log.ipAddress || "IP yok"}
)}{!audits.length &&

Audit kaydı yok.

}

Kredi hareketleri

{credits.map((tx) => )}
KullanıcıTürMiktarBakiyeNedenTarih
{tx.user.email}{tx.type}= 0 ? "font-bold text-emerald-600" : "font-bold text-rose-600"}>{tx.amount > 0 ? "+" : ""}{tx.amount}{tx.balanceAfter}{tx.reason}{tx.createdAt.toLocaleString("tr-TR")}

Ingest işleri

{ingestJobs.map((job) =>
{job.source} · {job.type}
{job.status} · {job.recordsImported} başarılı · {job.recordsFailed} hatalı
{job.errorMessage &&
{job.errorMessage}
}
)}

Export işleri

{exportJobs.map((job) =>
{job.user.email} · {job.module}
{job.status} · {job.createdAt.toLocaleString("tr-TR")}
{job.errorMessage &&
{job.errorMessage}
}
)}

Son oturumlar

{sessions.map((session) =>
{session.user.email}
Açılış: {session.createdAt.toLocaleString("tr-TR")} · Bitiş: {session.expiresAt.toLocaleString("tr-TR")}
)}
); }