import Link from "next/link"; import { redirect } from "next/navigation"; import { getServerSession } from "next-auth"; import { authOptions } from "@/lib/auth"; import { isAdminEmail, listAdminEmails } from "@/lib/admin"; import { prisma } from "@/lib/prisma"; import type { Prisma } from "@/app/generated/prisma/client"; import { AdminFilterBar } from "@/features/admin/components/admin-filter-bar"; const ENTITY_TYPES = [ "Refund", "Payout", "Trip", "User", "OrganizerVerification", "Payment", ] as const; interface PageProps { searchParams: Promise<{ entityType?: string; action?: string; reviewer?: string; dateFrom?: string; dateTo?: string; }>; } function parseDate(value: string | undefined): Date | undefined { if (!value) return undefined; const d = new Date(value); return Number.isNaN(d.getTime()) ? undefined : d; } export default async function AdminAuditLogPage({ searchParams }: PageProps) { const session = await getServerSession(authOptions); if (!session?.user) redirect("/login?callbackUrl=/admin/audit-log"); if (!isAdminEmail(session.user.email)) { return (
Halaman ini hanya untuk admin SeTrip.
Catatan semua aksi admin lintas entity (refund, payout, trip cancel, user suspend, dst). Append-only. Maksimal 200 baris terbaru per query — pakai filter untuk drill-down.
Tidak ada audit log yang cocok dengan filter ini.
| Waktu | Admin | Action | Entity | Entity ID | Payload |
|---|---|---|---|---|---|
| {row.createdAt.toLocaleString("id-ID", { day: "2-digit", month: "short", year: "numeric", hour: "2-digit", minute: "2-digit", })} | {row.adminEmail} {!row.adminId && ( (deleted) )} | {row.action} | {row.entityType} |
|
{row.payload ? (
{JSON.stringify(row.payload)}
) : (
"—"
)}
|