diff --git a/frontend/src/app/(auth)/signup/page.tsx b/frontend/src/app/(auth)/signup/page.tsx index ba990a4..3315912 100644 --- a/frontend/src/app/(auth)/signup/page.tsx +++ b/frontend/src/app/(auth)/signup/page.tsx @@ -21,9 +21,36 @@ export default function SignUpPage() { setPasswordShown(!passwordShown); }; - const handleSignUp = () => { + const handleSignUp = async () => { // CHANGE THIS TO NAVIGATE TO NEW PAGE console.log("Email", email); + try { + const resUserExists = await fetch("api/userExists", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ email }), + }); + + const { user } = await resUserExists.json(); + + if (user) { + // user exists so return + console.log("User already exists"); + return; + } + // calling the registration api + await fetch("api/signUp", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ email, password }), + }); + } catch (error) { + console.log("Error during registration"); + } }; return ( diff --git a/frontend/src/app/api/checkUser/[email]/route.ts b/frontend/src/app/api/checkUser/[email]/route.ts new file mode 100644 index 0000000..785fce8 --- /dev/null +++ b/frontend/src/app/api/checkUser/[email]/route.ts @@ -0,0 +1,20 @@ +import connectDB from "@/database/db"; +import User from "@/database/userSchema"; +import { NextResponse } from "next/server"; + +type IParams = { + params: { + email: string; + }; +}; + +export async function GET(req: Request, { params }: IParams) { + await connectDB(); + const { email } = params; + try { + const user = await User.findOne({ email }).orFail(); + return NextResponse.json(user); + } catch (err) { + return NextResponse.json("Error retrieving user.", { status: 404 }); + } +} diff --git a/frontend/src/app/api/signUp/route.ts b/frontend/src/app/api/signUp/route.ts new file mode 100644 index 0000000..17d1c9f --- /dev/null +++ b/frontend/src/app/api/signUp/route.ts @@ -0,0 +1,18 @@ +import connectDB from "@/database/db"; +import User from "@/database/userSchema"; +import { NextResponse } from "next/server"; + +export async function POST(req: Request) { + try { + const { email, password } = await req.json(); + await connectDB(); + await User.create({ email, password }); + + return NextResponse.json({ message: "User registered." }, { status: 201 }); + } catch (error) { + return NextResponse.json( + { message: "An error occurred while registering." }, + { status: 500 }, + ); + } +} diff --git a/frontend/src/app/api/userExists/route.ts b/frontend/src/app/api/userExists/route.ts new file mode 100644 index 0000000..bccd14a --- /dev/null +++ b/frontend/src/app/api/userExists/route.ts @@ -0,0 +1,15 @@ +import connectDB from "@/database/db"; +import User from "@/database/userSchema"; +import { NextResponse } from "next/server"; + +export async function POST(req: Request) { + try { + await connectDB(); + // sending email in POST request + const { email } = await req.json(); + const user = await User.findOne({ email }).select("_id"); + return NextResponse.json({ user }); + } catch (error) { + console.log(error); + } +} diff --git a/frontend/src/database/userSchema.ts b/frontend/src/database/userSchema.ts new file mode 100644 index 0000000..0007631 --- /dev/null +++ b/frontend/src/database/userSchema.ts @@ -0,0 +1,9 @@ +import mongoose, { Schema } from "mongoose"; + +const UserSchema = new Schema({ + name: { type: String, required: false }, + email: { type: String, required: true }, + password: { type: String, required: true }, +}); + +export default mongoose.models.User || mongoose.model("User", UserSchema);