"use server"; import { LOG_TYPE, prisma } from "@repo/db"; import { getServerSession } from "api/auth/[...nextauth]/auth"; import { randomUUID } from "crypto"; import { cookies, headers } from "next/headers"; export async function getOrSetDeviceId() { const store = await cookies(); let deviceId = store.get("device_id")?.value; if (!deviceId) { deviceId = randomUUID(); store.set("device_id", deviceId, { httpOnly: true, secure: true, sameSite: "lax", path: "/", maxAge: 60 * 60 * 24 * 365, // 1 Jahr }); } return deviceId; } export const logAction = async ( type: LOG_TYPE, otherValues?: { field: string; oldValue: string; newValue: string; }, ) => { const headersList = await headers(); const user = await getServerSession(); console.log("headers"); const deviceId = await getOrSetDeviceId(); await prisma.log.create({ data: { type, browser: headersList.get("user-agent") || "unknown", userId: user?.user.id, deviceId: deviceId, ip: headersList.get("X-Forwarded-For") || headersList.get("Forwarded") || headersList.get("X-Real-IP"), ...otherValues, }, }); };