Files
buzz-sheet/app/api/presence/admin/route.ts
T
gunshiz 87e6bcd96f
CI / Verify and audit (push) Successful in 2m33s
CI / Build, scan and deploy immutable images (push) Failing after 1m29s
feat : 6 astra improve it
2026-09-22 18:28:18 +07:00

33 lines
1.1 KiB
TypeScript

import { errorResponse, readJson, requireSameOrigin } from "@/lib/security/http";
import { limitRequest } from "@/lib/security/rate-limit";
import { connection } from "next/server";
import * as z from "zod";
import { requireAdmin } from "@/lib/auth/server";
import { updateAdminPresence } from "@/lib/presence";
const inputSchema = z.strictObject({
tabId: z.string().uuid(),
guideId: z.string().uuid().nullable(),
section: z.string().trim().min(1).max(100).nullable(),
active: z.boolean().default(true),
});
export async function POST(request: Request) {
await connection();
try {
requireSameOrigin(request);
const admin = await requireAdmin();
await limitRequest("admin-presence", admin.session.id, 120);
const parsed = inputSchema.safeParse(await readJson(request, 2048));
if (!parsed.success) return Response.json({ error: "invalid-presence" }, { status: 400 });
return Response.json(await updateAdminPresence({
...parsed.data,
memberId: `${admin.session.id}:${parsed.data.tabId}`,
user: admin.user,
}), { headers: { "Cache-Control": "no-store" } });
} catch (cause) {
return errorResponse(cause);
}
}