Files
buzz-sheet/app/api/presence/admin/route.ts
T
gunshiz 5aa0ae80c1
CI / Verify (push) Successful in 1m28s
CI / Build immutable images and deploy (push) Successful in 2m5s
feat : update
2026-09-05 18:15:06 +07:00

34 lines
1.1 KiB
TypeScript

import { connection } from "next/server";
import * as z from "zod";
import { AdminAuthorizationError, requireAdmin } from "@/lib/auth/server";
import { updateAdminPresence } from "@/lib/presence";
const inputSchema = z.strictObject({
tabId: z.string().uuid(),
guideId: z.string().uuid().nullable(),
active: z.boolean().default(true),
});
export async function POST(request: Request) {
await connection();
try {
const admin = await requireAdmin();
const parsed = inputSchema.safeParse(await request.json().catch(() => null));
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) {
if (cause instanceof AdminAuthorizationError) {
return Response.json({ error: "unauthorized" }, { status: 401 });
}
return Response.json({ error: "presence-unavailable" }, {
status: 503,
headers: { "Cache-Control": "no-store" },
});
}
}