39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { createUserSession, registerUser, setSessionCookie } from "@/lib/server/auth";
|
|
|
|
export const runtime = "nodejs";
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const body = (await request.json()) as {
|
|
name?: string;
|
|
email?: string;
|
|
password?: string;
|
|
rememberMe?: boolean;
|
|
};
|
|
|
|
const name = (body.name || "").trim();
|
|
const email = (body.email || "").trim();
|
|
const password = body.password || "";
|
|
const rememberMe = Boolean(body.rememberMe);
|
|
|
|
if (!name || !email || !password) {
|
|
return NextResponse.json({ error: "Name, email, and password are required" }, { status: 400 });
|
|
}
|
|
|
|
const user = await registerUser({ name, email, password });
|
|
const session = await createUserSession(user.id, rememberMe);
|
|
await setSessionCookie(session.token, rememberMe);
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
user,
|
|
session: { expiresAt: session.expiresAt, rememberMe },
|
|
});
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : "Registration failed";
|
|
const status = message.includes("exists") ? 409 : 400;
|
|
return NextResponse.json({ error: message }, { status });
|
|
}
|
|
}
|