From 57c135705445f65d21d6b027efc76c3ecaf4ca0b Mon Sep 17 00:00:00 2001 From: Sophia Peckner Date: Wed, 7 Feb 2024 20:39:18 -0800 Subject: [PATCH 1/7] feat: modify handleSignUp to include POST request --- frontend/src/app/(auth)/signup/page.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/(auth)/signup/page.tsx b/frontend/src/app/(auth)/signup/page.tsx index ba990a4..5be0271 100644 --- a/frontend/src/app/(auth)/signup/page.tsx +++ b/frontend/src/app/(auth)/signup/page.tsx @@ -21,9 +21,20 @@ export default function SignUpPage() { setPasswordShown(!passwordShown); }; - const handleSignUp = () => { + const handleSignUp = async () => { // CHANGE THIS TO NAVIGATE TO NEW PAGE console.log("Email", email); + try { + await fetch("api/signUp", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ email, password }), + }); + } catch (error) { + console.log("Error during registration"); + } }; return ( From 17a9f9a0cbd72e2c3c41731da57e8885b51ff9b3 Mon Sep 17 00:00:00 2001 From: Sophia Peckner Date: Wed, 7 Feb 2024 20:39:58 -0800 Subject: [PATCH 2/7] feat: add barebone POST api route --- frontend/src/app/api/signUp/route.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 frontend/src/app/api/signUp/route.ts diff --git a/frontend/src/app/api/signUp/route.ts b/frontend/src/app/api/signUp/route.ts new file mode 100644 index 0000000..2265e0f --- /dev/null +++ b/frontend/src/app/api/signUp/route.ts @@ -0,0 +1,15 @@ +import { NextResponse } from "next/server"; + +export async function POST(req: Request) { + try { + const { email, password } = await req.json(); + console.log("Email: ", email); + console.log("Password: ", password); + return NextResponse.json({ message: "User registered." }, { status: 201 }); + } catch (error) { + return NextResponse.json( + { message: "An error occurred while registering." }, + { status: 500 }, + ); + } +} From f8dc4adc240c4e227c2eefe3bf7105bbe549e6fc Mon Sep 17 00:00:00 2001 From: Sophia Peckner Date: Thu, 8 Feb 2024 17:18:34 -0800 Subject: [PATCH 3/7] feat: add mongoose db user schema --- frontend/src/database/userSchema.ts | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 frontend/src/database/userSchema.ts 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); From 836d348dc1eb81cde118982a0d6af73d3bbd6af4 Mon Sep 17 00:00:00 2001 From: Sophia Peckner Date: Thu, 8 Feb 2024 17:19:28 -0800 Subject: [PATCH 4/7] feat: add mongo db connection and create user --- frontend/src/app/api/signUp/route.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/api/signUp/route.ts b/frontend/src/app/api/signUp/route.ts index 2265e0f..17d1c9f 100644 --- a/frontend/src/app/api/signUp/route.ts +++ b/frontend/src/app/api/signUp/route.ts @@ -1,10 +1,13 @@ +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(); - console.log("Email: ", email); - console.log("Password: ", password); + await connectDB(); + await User.create({ email, password }); + return NextResponse.json({ message: "User registered." }, { status: 201 }); } catch (error) { return NextResponse.json( From f4fcfeba1a1bcde629e7153b4c08085640c12175 Mon Sep 17 00:00:00 2001 From: Sophia Peckner Date: Thu, 8 Feb 2024 17:36:20 -0800 Subject: [PATCH 5/7] feat: add POST request that checks if user already exists --- frontend/src/app/api/userExists/route.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 frontend/src/app/api/userExists/route.ts 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); + } +} From 12b7a211822d2f83b704b652fdfbc8f32a04f263 Mon Sep 17 00:00:00 2001 From: Sophia Peckner Date: Thu, 8 Feb 2024 17:37:28 -0800 Subject: [PATCH 6/7] feat: check if user already exists to prevent duplicate accounts --- frontend/src/app/(auth)/signup/page.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/frontend/src/app/(auth)/signup/page.tsx b/frontend/src/app/(auth)/signup/page.tsx index 5be0271..3315912 100644 --- a/frontend/src/app/(auth)/signup/page.tsx +++ b/frontend/src/app/(auth)/signup/page.tsx @@ -25,6 +25,22 @@ export default function SignUpPage() { // 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: { From 8f3949270690c7454fa6f04807c0534fc87f342a Mon Sep 17 00:00:00 2001 From: Sophia Peckner Date: Thu, 8 Feb 2024 21:26:48 -0800 Subject: [PATCH 7/7] feat: add GET api --- .../src/app/api/checkUser/[email]/route.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 frontend/src/app/api/checkUser/[email]/route.ts 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 }); + } +}