import { AuthError, authenticateRequest } from "@/lib/auth/server";
import { CatalogError, listGateModels } from "@/lib/chat/catalog";
import { isModelId } from "@/lib/chat/types";
import { getPool } from "@/lib/db/pool";
import { updateLastModelId } from "@/lib/db/users";
const noStoreHeaders = { "Cache-Control": "no-store" };
export async function PATCH(request: Request): Promise<Response> {
try {
const user = await authenticateRequest(request);
const authorization = request.headers.get("Authorization");
if (!authorization) throw new AuthError();
const body: unknown = await request.json();
const model =
typeof body === "object" && body !== null && "model" in body
? body.model
: undefined;
if (!isModelId(model)) {
return Response.json({ error: "Некорректный запрос" }, { status: 400, headers: noStoreHeaders });
}
const models = await listGateModels(authorization, request.signal);
if (!models.some((item) => item.id === model)) {
return Response.json({ error: "Некорректный запрос" }, { status: 400, headers: noStoreHeaders });
}
await updateLastModelId(getPool(), user.id, model);
return Response.json({ model }, { headers: noStoreHeaders });
} catch (error) {
const status =
error instanceof AuthError ||
(error instanceof CatalogError && error.reason === "unauthorized")
? 401
: 503;
return Response.json(
{ error: status === 401 ? "Unauthorized" : "Хранилище чатов временно недоступно" },
{ status, headers: noStoreHeaders },
);
}
}