export const runtime = "nodejs"; import { NextResponse } from "next/server"; import { z } from "zod"; import { db } from "@/lib/db/client"; import { users } from "@/lib/db/schema"; import { hashPassword } from "@/lib/auth/password"; import { createSession, setSessionCookie } from "@/lib/auth/session"; const registerSchema = z.object({ name: z.string().min(1).max(100), email: z.string().email(), password: z.string().min(8, "Пароль должен быть не короче 8 символов"), }); export async function POST(request: Request) { const body = await request.json().catch(() => null); const parsed = registerSchema.safeParse(body); if (!parsed.success) { return NextResponse.json({ error: parsed.error.issues[0]?.message ?? "Invalid input" }, { status: 400 }); } const email = parsed.data.email.toLowerCase().trim(); const passwordHash = await hashPassword(parsed.data.password); let user; try { [user] = await db .insert(users) .values({ name: parsed.data.name, email, passwordHash }) .returning(); } catch { return NextResponse.json({ error: "Такой email уже используется" }, { status: 409 }); } const token = await createSession(user.id); await setSessionCookie(token); return NextResponse.json({ ok: true, user: { id: user.id, name: user.name } }); }