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 (
| Date | Action | Acteur | Objet | Mé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.