import { desc } from "drizzle-orm"; import { db } from "@/db/client"; import { auditEvents } from "@/db/schema"; export const dynamic = "force-dynamic"; export default async function Journal() { const rows = await db().select().from(auditEvents).orderBy(desc(auditEvents.createdAt)).limit(300); return (

Journal d'audit (300 derniers)

{rows.map((r) => )}
DateActionActeurObjetMéta (minimisées)
{r.createdAt.toLocaleString("fr-CA", { timeZone: "America/Toronto" })}{r.action}{r.actorId?.slice(0, 8) ?? "—"}{r.objectType ? `${r.objectType} ${String(r.objectId ?? "").slice(0, 12)}` : "—"}{JSON.stringify(r.metadataRedacted).slice(0, 80)}

Append-only : aucune route ne modifie ni ne supprime ces lignes ; adresses IP hachées, aucun code ni jeton.

); }