MIF_E31220277/denta-api/app/api/auth/signup/route.ts

84 lines
2.0 KiB
TypeScript

import { Role } from "@/config/enum";
import { genUsername, getUserByEmail } from "@/helpers/user";
import db from "@/lib/db";
import { SignUpSchema } from "@/lib/schemas";
import { Prisma } from '@/prisma/generated/client';
import { NextResponse } from "next/server";
import bcrypt from "bcryptjs";
export async function POST(req: Request) {
const body = await req.json();
const { givenName, familyName, email, password, phone, role, profile } = body;
const validateFields = SignUpSchema.safeParse(body);
if (!validateFields.success) {
return NextResponse.json({ error: validateFields.error }, { status: 400 });
}
const existingUser = await getUserByEmail(email);
if (existingUser) {
return NextResponse.json(
{ error: "Email already in use." },
{ status: 400 }
);
}
try {
const name = await genUsername(givenName, familyName);
const hash = await bcrypt.hash(password, 10);
const newUser = await db.user.create({
data: {
givenName,
familyName,
name,
email,
password: hash,
phone,
role,
} as Prisma.UserCreateInput,
});
if (newUser.role === Role.Koas) {
await db.koasProfile.create({
data: {
...profile,
userId: newUser.id,
},
});
} else if (newUser.role === Role.Pasien) {
await db.pasienProfile.create({
data: {
...profile,
userId: newUser.id,
},
});
}
// const verificationToken = await generateVerificationToken(email);
// await sendVerificationEmail(
// verificationToken.email,
// verificationToken.token
// );
return NextResponse.json(
{
status: "Success",
message: "User created successfully",
data: { user: newUser },
},
{ status: 201 }
);
} catch (error) {
console.error("Error creating user", error);
return NextResponse.json(
{ error: "Internal Server Error" },
{ status: 500 }
);
}
}