Files
buzz-sheet/app/api/presence/admin/route.ts
T
gunshiz 770c60c4a2
CI / Verify (push) Successful in 1m14s
CI / Build immutable images and deploy (push) Successful in 4m51s
feat : update
2026-09-06 17:41:16 +07:00

35 lines
1.2 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(),
section: z.string().trim().min(1).max(100).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" },
});
}
}