import { NextRequest, NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
import { hashPassword } from "@/lib/auth/passwords";
import { createToken, setSessionCookie } from "@/lib/auth/human-auth";
import { registerSchema } from "@/lib/validators/auth";
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const parsed = registerSchema.safeParse(body);
if (!parsed.success) {
return NextResponse.json(
{ error: "Validation failed", details: parsed.error.flatten() },
{ status: 400 }
);
}
const { email, password, displayName } = parsed.data;
const existing = await prisma.humanUser.findUnique({ where: { email } });
if (existing) {
return NextResponse.json(
{ error: "Email already registered" },
{ status: 409 }
);
}
const passwordHash = await hashPassword(password);
const user = await prisma.humanUser.create({
data: { email, passwordHash, displayName },
});
const token = createToken(user);
const response = NextResponse.json(
{
user: {
id: user.id,
email: user.email,
displayName: user.displayName,
},
},
{ status: 201 }
);
setSessionCookie(response, token);
return response;
} catch (error) {
console.error("Register error:", error);
return NextResponse.json(
{ error: "Internal server error" },
{ status: 500 }
);
}
}