diff --git a/app/api/signup/route.ts b/app/api/signup/route.ts index 9aceda98f6bc309f010ed1a97c9264e7b0c4454b..124f2fdc5cef381eafdba1e9e08508adc245c308 100644 --- a/app/api/signup/route.ts +++ b/app/api/signup/route.ts @@ -3,17 +3,43 @@ import { hash } from 'bcrypt' import { NextResponse } from 'next/server' export async function POST(req: Request) { - console.log("aaaa", req) - try { const { username, email, password } = await req.json() const hashed = await hash(password, 12) + let usernameCheck = username.toLowerCase() + const emailCheck = email.toLowerCase() + + const existingUser = await db.user.findUnique({ + where: { + email: emailCheck + } + }) + + if (existingUser) { + throw new Error('email already exists') + } + + let isUnique = false; + while (!isUnique) { + const existingUserName = await db.user.findUnique({ + where: { + username: usernameCheck + } + }) + + if (existingUserName) { + usernameCheck = `${username}${Math.floor(Math.random() * 1000)}` + } else { + isUnique = true; + } + } + const user = await db.user.create({ data: { name: username, - username: username.toLowerCase(), - email: email.toLowerCase(), + username: usernameCheck, + email: emailCheck, password: hashed } }) @@ -22,24 +48,17 @@ export async function POST(req: Request) { usernameOrEmail: user.email }) } catch (err: any) { - return new NextResponse(JSON.stringify({ - error: err.message - }), { status: 500 } + if (err.message === 'email already exists') { + return new NextResponse(JSON.stringify({ + error: err.message + }), { status: 422 } + ) + } + + return new NextResponse( + JSON.stringify({ + error: err.message + }), { status: 500 } ) } -} - -// let isUnique = false; -// while (!isUnique) { -// const existingUserName = await db.user.findUnique({ -// where: { -// username: credentials.username -// } -// }) - -// if (existingUserName) { -// credentials.username = `${credentials.username}${Math.floor(Math.random() * 1000)}` -// } else { -// isUnique = true; -// } -// } \ No newline at end of file +} \ No newline at end of file diff --git a/components/user-auth-form.tsx b/components/user-auth-form.tsx index d02458f15db99a99f38b95217b5442852a195037..05955881f56481e1e9bf2a2223e4d408195b5452 100644 --- a/components/user-auth-form.tsx +++ b/components/user-auth-form.tsx @@ -25,6 +25,7 @@ export function UserAuthForm({ type, className, ...props }: UserAuthFormProps) { const { register, handleSubmit, + setError, formState: { errors }, } = useForm<FormData>({ resolver: zodResolver(userAuthSchema), @@ -49,8 +50,12 @@ export function UserAuthForm({ type, className, ...props }: UserAuthFormProps) { }) if (!res.ok) { + if (res.status === 422) { + setError('email', { type: 'manual', message: 'This email is already in use. Please choose another one.' }); + } + setIsLoading(false) - toast({ + return toast({ variant: "destructive", title: "Uh oh! Something went wrong.", description: "Your sign up request failed. Please try again.",