From 74c5905c3974e44e3d740bf044310bf27a91b2c5 Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Fri, 18 Oct 2024 11:56:36 -0400 Subject: [PATCH 01/11] work on prisma schema --- prisma/schema.prisma | 45 ++++++++++++++++++++++++++------ src/app/api/user/route.client.ts | 5 +++- src/app/api/user/route.ts | 12 ++++++--- src/components/ExampleButton.tsx | 3 +++ 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0445b71..a18425d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -19,15 +19,44 @@ enum Role { } model User { - id String @id @default(auto()) @map("_id") @db.ObjectId - firstName String @default("") - email String @default("") - EventIds String[] @db.ObjectId - Events Event[] @relation(fields: [EventIds], references: [id]) + id String @id @default(auto()) @map("_id") @db.ObjectId + role String @default("") + firstName String @default("") + lastName String @default("") + email String @default("") + volunteerDetails VolunteerDetails? + volunteerDetailsId String? @unique @db.ObjectId + EventIds String[] @db.ObjectId + Events Event[] @relation(fields: [EventIds], references: [id]) +} + +model VolunteerDetails { + id String @id @default(auto()) @map("_id") @db.ObjectId + firstName String @default("") + lastName String @default("") + email String @default("") + ageOver14 Boolean @default(false) + country Boolean @default(false) + address String @default("") + city String @default("") + state String @default("") + zipCode Int? + hasLicense Boolean @default(false) + speaksEsp Boolean @default(false) + volunteerType String @default("") + daysAvailable String @default("") + timeAvailable String @default("") + basis String @default("") + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId + EventIds String[] @db.ObjectId + Events Event[] @relation(fields: [EventIds], references: [id]) } model Event { - id String @id @default(auto()) @map("_id") @db.ObjectId - UserIds String[] @db.ObjectId - Users User[] @relation(fields: [UserIds], references: [id]) + id String @id @default(auto()) @map("_id") @db.ObjectId + UserIds String[] @db.ObjectId + Users User[] @relation(fields: [UserIds], references: [id]) + VolunteerIds String[] @db.ObjectId + Volunteers VolunteerDetails[] @relation(fields: [UserIds], references: [id]) } \ No newline at end of file diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index 267f843..265c9dc 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -1,5 +1,8 @@ export const addUser = async (request: { - body: { user: { firstName: string; email: string } }; + body: { + user: { firstName: string; email: string }; + volunteerDetails: { ageOver14: boolean }; + }; }) => { const { body, ...options } = request; const response = await fetch("/api/user", { diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index a714c56..b12b2e9 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -7,12 +7,18 @@ export const POST = async (request: NextRequest) => { try { /* @TODO: Add auth */ - const { user } = await request.json(); + const { User, VolunteerDetails } = await request.json(); const savedUser = await prisma.user.create({ - data: user, + data: { + User, + volunteerDetails: { + create: { + VolunteerDetails, + }, + }, + }, }); - return NextResponse.json({ code: "SUCCESS", message: savedUser.email, diff --git a/src/components/ExampleButton.tsx b/src/components/ExampleButton.tsx index 9fb60aa..8e56953 100644 --- a/src/components/ExampleButton.tsx +++ b/src/components/ExampleButton.tsx @@ -16,6 +16,9 @@ const ExampleButton = ({ buttonText }: ExampleButtonProps) => { firstName: "Johnny", email: "johnny.tan.best.pm@tufts.edu", }, + volunteerDetails: { + ageOver14: true, + }, }, }); console.log(response); From ffeb6119babb07a12546f333af5f3a5b5c61f542 Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Fri, 18 Oct 2024 14:34:55 -0400 Subject: [PATCH 02/11] fix prisma after meeting --- prisma/schema.prisma | 7 ------- 1 file changed, 7 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index a18425d..bbd426e 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -32,9 +32,6 @@ model User { model VolunteerDetails { id String @id @default(auto()) @map("_id") @db.ObjectId - firstName String @default("") - lastName String @default("") - email String @default("") ageOver14 Boolean @default(false) country Boolean @default(false) address String @default("") @@ -49,14 +46,10 @@ model VolunteerDetails { basis String @default("") user User @relation(fields: [userId], references: [id]) userId String @unique @db.ObjectId - EventIds String[] @db.ObjectId - Events Event[] @relation(fields: [EventIds], references: [id]) } model Event { id String @id @default(auto()) @map("_id") @db.ObjectId UserIds String[] @db.ObjectId Users User[] @relation(fields: [UserIds], references: [id]) - VolunteerIds String[] @db.ObjectId - Volunteers VolunteerDetails[] @relation(fields: [UserIds], references: [id]) } \ No newline at end of file From 4b139f39f79487933bb04d6e9b3b853073f3613e Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Sun, 20 Oct 2024 21:28:11 -0400 Subject: [PATCH 03/11] create user --- prisma/schema.prisma | 1 - src/app/api/user/route.ts | 17 ++++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bbd426e..5ebf418 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -25,7 +25,6 @@ model User { lastName String @default("") email String @default("") volunteerDetails VolunteerDetails? - volunteerDetailsId String? @unique @db.ObjectId EventIds String[] @db.ObjectId Events Event[] @relation(fields: [EventIds], references: [id]) } diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index b12b2e9..0fb4841 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -7,18 +7,21 @@ export const POST = async (request: NextRequest) => { try { /* @TODO: Add auth */ - const { User, VolunteerDetails } = await request.json(); + const { user, VolunteerDetails } = await request.json(); const savedUser = await prisma.user.create({ data: { - User, - volunteerDetails: { - create: { - VolunteerDetails, - }, - }, + ...user, // Ensure User contains properties needed to create a User }, }); + + await prisma.volunteerDetails.create({ + data: { + ...VolunteerDetails, + userId: savedUser.id, // Link to the newly created User's ID + }, + }); + return NextResponse.json({ code: "SUCCESS", message: savedUser.email, From f010c6e9544ffb3661f300188caa7c9b56129009 Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Fri, 25 Oct 2024 13:32:09 -0400 Subject: [PATCH 04/11] fix routes for user CRUD --- prisma/schema.prisma | 2 +- src/app/api/user/route.client.ts | 48 ++++-- src/app/api/user/route.ts | 78 ++++++++- src/app/page.tsx | 35 ++++- src/components/ExampleButton.tsx | 33 ++-- src/components/createUserForm.tsx | 252 ++++++++++++++++++++++++++++++ 6 files changed, 407 insertions(+), 41 deletions(-) create mode 100644 src/components/createUserForm.tsx diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 5ebf418..1fd7512 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -32,7 +32,7 @@ model User { model VolunteerDetails { id String @id @default(auto()) @map("_id") @db.ObjectId ageOver14 Boolean @default(false) - country Boolean @default(false) + country String @default("") address String @default("") city String @default("") state String @default("") diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index 265c9dc..4f5a7f3 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -1,17 +1,41 @@ -export const addUser = async (request: { - body: { - user: { firstName: string; email: string }; - volunteerDetails: { ageOver14: boolean }; - }; -}) => { - const { body, ...options } = request; - const response = await fetch("/api/user", { - method: "POST", +import { Prisma } from "@prisma/client"; + +export const fetchApi = async ( + endpoint: string, + method: "POST" | "GET" | "DELETE", + body?: Record +) => { + console.log(method); + const response = await fetch(endpoint, { + method, + headers: { "Content-Type": "application/json" }, body: JSON.stringify(body), - ...options, }); - const json = await response.json(); + if (!response.ok) { + throw new Error("API Error: $(response.statusText)"); + } + + return response.json(); +}; + +export const addUser = async ( + user: Prisma.UserCreateInput, + volunteerDetails: Prisma.VolunteerDetailsCreateInput +) => fetchApi("/api/user", "POST", { user, volunteerDetails }); + +export const getUser = async (user: Prisma.UserWhereUniqueInput) => { + const queryString = new URLSearchParams( + user as Record + ).toString(); + const url = `/api/user?${queryString}`; + return fetchApi(url, "GET"); +}; - return json; +export const deleteUser = async (user: Prisma.UserWhereUniqueInput) => { + const queryString = new URLSearchParams( + user as Record + ).toString(); + const url = `/api/user?${queryString}`; + return fetchApi(url, "DELETE"); }; diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index 0fb4841..db7ff68 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -7,24 +7,92 @@ export const POST = async (request: NextRequest) => { try { /* @TODO: Add auth */ - const { user, VolunteerDetails } = await request.json(); + const { user, volunteerDetails } = await request.json(); + + console.log("USER IN POST: ", user); + console.log("VOLUNTEERDET IN POST: ", volunteerDetails); const savedUser = await prisma.user.create({ data: { - ...user, // Ensure User contains properties needed to create a User + ...user, }, }); await prisma.volunteerDetails.create({ data: { - ...VolunteerDetails, - userId: savedUser.id, // Link to the newly created User's ID + ...volunteerDetails, + userId: savedUser.id, }, }); return NextResponse.json({ code: "SUCCESS", - message: savedUser.email, + message: `User created with email: ${savedUser.email}`, + data: savedUser, + }); + } catch (error) { + console.error("Error:", error); + return NextResponse.json({ + code: "ERROR", + message: error, + }); + } +}; + +export const DELETE = async (request: NextRequest) => { + const { searchParams } = new URL(request.url); + const id = searchParams.get("id"); // Assuming the user is queried by 'id' + try { + const deletedUser = await prisma.user.delete({ + where: { id }, // `user` must include a unique field (e.g., { id: "some-object-id" }) + }); + + return NextResponse.json({ + code: "SUCCESS", + message: "User deleted successfully", + data: deletedUser, + }); + } catch (error) { + console.error("Error:", error); + return NextResponse.json({ + code: "ERROR", + message: error, + }); + } +}; + +export const GET = async (request: NextRequest) => { + const { searchParams } = new URL(request.url); + const id = searchParams.get("id"); // Assuming the user is queried by 'id' + + // Check if id is null + if (!id) { + return NextResponse.json( + { + code: "BAD_REQUEST", + message: "User ID is required.", + }, + { status: 400 } + ); + } + try { + const fetchedUser = await prisma.user.findUnique({ + where: { id }, + }); + + if (!fetchedUser) { + return NextResponse.json( + { + code: "NOT_FOUND", + message: "User not found", + }, + { status: 404 } + ); + } + + return NextResponse.json({ + code: "SUCCESS", + data: fetchedUser, }); } catch (error) { console.error("Error:", error); diff --git a/src/app/page.tsx b/src/app/page.tsx index 254069d..d767e91 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,12 +1,45 @@ "use client"; import ExampleButton from "@components/ExampleButton"; +import CreateUserForm from "@components/createUserForm"; +import { useState } from "react"; +import { getUser, deleteUser } from "@api/user/route.client"; export default function Home() { + const [userID, setUserID] = useState(""); + const [user, setUser] = useState(null); + + const getUserButton = async () => { + try { + const fetchedUser = await getUser({ + id: userID, + }); + console.log("THIS IS USER: ", fetchedUser); + setUser(fetchedUser.data.firstName); + console.log("User fetched successfully."); + } catch (error) { + console.error("Error fetching user:", error); + } + }; + + const deleteUserButton = async () => { + try { + await deleteUser({ + id: userID, + }); + setUser(null); + console.log("User deleted successfully."); + } catch (error) { + console.error("Error deleting user:", error); + } + }; return (
+ {/* Example Button (ExampleButton.tsx in components folder) */} - + + {user ? {user} : No user...} +
); } diff --git a/src/components/ExampleButton.tsx b/src/components/ExampleButton.tsx index 8e56953..c6f16b8 100644 --- a/src/components/ExampleButton.tsx +++ b/src/components/ExampleButton.tsx @@ -1,32 +1,21 @@ -import { addUser } from "@api/user/route.client"; import { Icon } from "@iconify/react/dist/iconify.js"; interface ExampleButtonProps { buttonText: string; + callBack: () => void; } -const ExampleButton = ({ buttonText }: ExampleButtonProps) => { +const ExampleButton = ({ buttonText, callBack }: ExampleButtonProps) => { return ( - + + + ); }; diff --git a/src/components/createUserForm.tsx b/src/components/createUserForm.tsx new file mode 100644 index 0000000..d049f5a --- /dev/null +++ b/src/components/createUserForm.tsx @@ -0,0 +1,252 @@ +import { useState } from "react"; +import { addUser } from "@api/user/route.client"; + +interface CreateUserForm { + setUserID: (id: string) => void; +} + +const CreateUserForm = ({ setUserID }: CreateUserForm) => { + const [formData, setFormData] = useState({ + firstName: "", + lastName: "", + email: "", + role: "VOLUNTEER", + ageOver14: false, + country: "", + address: "", + city: "", + state: "", + zipCode: "", + hasLicense: false, + speaksEsp: false, + volunteerType: "", + daysAvailable: "", + timeAvailable: "", + basis: "", + }); + + const handleChange = ( + e: React.ChangeEvent< + HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement + > + ) => { + const { name, value, type, checked } = e.target; + setFormData((prevData) => ({ + ...prevData, + [name]: type === "checkbox" ? checked : value, + })); + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + try { + const response = await addUser( + { + firstName: formData.firstName, + lastName: formData.lastName, + email: formData.email, + role: formData.role, + }, + { + ageOver14: formData.ageOver14, + country: formData.country, + address: formData.address, + city: formData.city, + state: formData.state, + zipCode: formData.zipCode ? parseInt(formData.zipCode) : null, + hasLicense: formData.hasLicense, + speaksEsp: formData.speaksEsp, + volunteerType: formData.volunteerType, + daysAvailable: formData.daysAvailable, + timeAvailable: formData.timeAvailable, + basis: formData.basis, + } + ); + setUserID(response.data.id); + console.log("User added successfully:", response); + } catch (error) { + console.error("Error adding user:", error); + } + }; + + return ( +
+

Create User

+ + {/* User Details */} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + {/* Volunteer Details */} +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+ ); +}; + +export default CreateUserForm; From 61697688593a69451cb742702dea86eab6894219 Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Fri, 25 Oct 2024 14:36:48 -0400 Subject: [PATCH 05/11] start update --- src/app/api/user/route.client.ts | 23 +++++++++-------- src/app/api/user/route.ts | 42 ++++++++++++++++++++++++++++++++ src/app/page.tsx | 37 ++++++++++++++++++++-------- 3 files changed, 82 insertions(+), 20 deletions(-) diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index 4f5a7f3..8841595 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -1,8 +1,8 @@ -import { Prisma } from "@prisma/client"; +import { Prisma, User, VolunteerDetails } from "@prisma/client"; export const fetchApi = async ( endpoint: string, - method: "POST" | "GET" | "DELETE", + method: "POST" | "GET" | "DELETE" | "PUT", body?: Record ) => { console.log(method); @@ -19,23 +19,26 @@ export const fetchApi = async ( return response.json(); }; -export const addUser = async ( - user: Prisma.UserCreateInput, - volunteerDetails: Prisma.VolunteerDetailsCreateInput -) => fetchApi("/api/user", "POST", { user, volunteerDetails }); +export const addUser = async (user: User, volunteerDetails: VolunteerDetails) => + fetchApi("/api/user", "POST", { user, volunteerDetails }); -export const getUser = async (user: Prisma.UserWhereUniqueInput) => { +export const getUser = async (userID: string) => { const queryString = new URLSearchParams( - user as Record + userID as Record ).toString(); const url = `/api/user?${queryString}`; return fetchApi(url, "GET"); }; -export const deleteUser = async (user: Prisma.UserWhereUniqueInput) => { +export const deleteUser = async (userID: string) => { const queryString = new URLSearchParams( - user as Record + userID as Record ).toString(); const url = `/api/user?${queryString}`; return fetchApi(url, "DELETE"); }; + +export const updateUser = async ( + user: User, + volunteerDetails: VolunteerDetails +) => fetchApi("/api/user", "PUT", { user, volunteerDetails }); diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index db7ff68..799e4d8 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -102,3 +102,45 @@ export const GET = async (request: NextRequest) => { }); } }; + +export const PUT = async (request: NextRequest) => { + try { + /* @TODO: Add auth */ + + const { user, volunteerDetails } = await request.json(); + + console.log("USER IN PUT: ", user); + console.log("VOLUNTEERDET IN PUT: ", volunteerDetails); + + const updatedUser = await prisma.user.update({ + where: { + id: user.id + }, + data: { + ...user, + } + }); + + + await prisma.volunteerDetails.update({ + where: { + id: user.id + }, + data: { + ...volunteerDetails, + }, + }); + + return NextResponse.json({ + code: "SUCCESS", + message: `User created with email: ${updatedUser.email}`, + data: updatedUser, + }); + } catch (error) { + console.error("Error:", error); + return NextResponse.json({ + code: "ERROR", + message: error, + }); + } +}; \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index d767e91..ce29428 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -4,18 +4,19 @@ import ExampleButton from "@components/ExampleButton"; import CreateUserForm from "@components/createUserForm"; import { useState } from "react"; import { getUser, deleteUser } from "@api/user/route.client"; +import { Prisma, User, VolunteerDetails } from "@prisma/client"; export default function Home() { const [userID, setUserID] = useState(""); - const [user, setUser] = useState(null); + const [user, setUser] = useState(); + const [volunteerDetails, setVolunteerDetails] = useState(); const getUserButton = async () => { try { - const fetchedUser = await getUser({ - id: userID, - }); + const fetchedUser = await getUser(userID); console.log("THIS IS USER: ", fetchedUser); - setUser(fetchedUser.data.firstName); + setUser(fetchedUser); + setVolunteerDetails() console.log("User fetched successfully."); } catch (error) { console.error("Error fetching user:", error); @@ -24,21 +25,37 @@ export default function Home() { const deleteUserButton = async () => { try { - await deleteUser({ - id: userID, - }); - setUser(null); + await deleteUser(userID); + setUser(undefined); console.log("User deleted successfully."); } catch (error) { console.error("Error deleting user:", error); } }; + + const updateUserButton = async () => { + try { + // const fetchedUser = await + let updatedUser = { + firstname: "Justin", + ...user, + }; + + const fetchedUser = await getUser(userID); + console.log("THIS IS USER: ", fetchedUser); + setUser(fetchedUser.data.firstName); + console.log("User fetched successfully."); + } catch (error) { + console.error("Error fetching user:", error); + } + }; + return (
{/* Example Button (ExampleButton.tsx in components folder) */} - {user ? {user} : No user...} + {user ? {user.email} : No user...}
); From 91621b2a942e49e74b2ccd772a2feb9f0c795136 Mon Sep 17 00:00:00 2001 From: jpaik03 Date: Sun, 27 Oct 2024 20:09:39 -0400 Subject: [PATCH 06/11] Changes --- src/app/api/user/route.client.ts | 5 +++-- src/app/api/user/route.ts | 22 +++++++++++++++------- src/app/page.tsx | 5 +++-- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index 8841595..e37951e 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -26,15 +26,16 @@ export const getUser = async (userID: string) => { const queryString = new URLSearchParams( userID as Record ).toString(); - const url = `/api/user?${queryString}`; + const url = `/api/user?id=${queryString}`; return fetchApi(url, "GET"); }; export const deleteUser = async (userID: string) => { + const queryString = new URLSearchParams( userID as Record ).toString(); - const url = `/api/user?${queryString}`; + const url = `/api/user?id=${queryString}`; return fetchApi(url, "DELETE"); }; diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index 799e4d8..f45272a 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -7,10 +7,7 @@ export const POST = async (request: NextRequest) => { try { /* @TODO: Add auth */ - const { user, volunteerDetails } = await request.json(); - - console.log("USER IN POST: ", user); - console.log("VOLUNTEERDET IN POST: ", volunteerDetails); + const { user, VolunteerDetails } = await request.json(); const savedUser = await prisma.user.create({ data: { @@ -20,10 +17,11 @@ export const POST = async (request: NextRequest) => { await prisma.volunteerDetails.create({ data: { - ...volunteerDetails, + ...VolunteerDetails, userId: savedUser.id, }, }); + console.log(savedUser) return NextResponse.json({ code: "SUCCESS", @@ -65,6 +63,8 @@ export const GET = async (request: NextRequest) => { const { searchParams } = new URL(request.url); const id = searchParams.get("id"); // Assuming the user is queried by 'id' + console.log(id) + // Check if id is null if (!id) { return NextResponse.json( @@ -78,9 +78,15 @@ export const GET = async (request: NextRequest) => { try { const fetchedUser = await prisma.user.findUnique({ where: { id }, + include: {volunteerDetails: true} }); - if (!fetchedUser) { + // const fetchedVD = await prisma.volunteerDetails.findUnique({ + // where: { id } + // }) + const fetchedVD = fetchedUser?.volunteerDetails + + if (!fetchedUser || !fetchedVD) { return NextResponse.json( { code: "NOT_FOUND", @@ -90,9 +96,11 @@ export const GET = async (request: NextRequest) => { ); } + console.log("IN GET: ", fetchedUser) + return NextResponse.json({ code: "SUCCESS", - data: fetchedUser, + data: { fetchedUser, fetchedVD } }); } catch (error) { console.error("Error:", error); diff --git a/src/app/page.tsx b/src/app/page.tsx index ce29428..ac88dfe 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -13,10 +13,11 @@ export default function Home() { const getUserButton = async () => { try { - const fetchedUser = await getUser(userID); + console.log(userID) + const { fetchedUser, fetchedVD } = await getUser(userID); console.log("THIS IS USER: ", fetchedUser); setUser(fetchedUser); - setVolunteerDetails() + setVolunteerDetails(fetchedVD) console.log("User fetched successfully."); } catch (error) { console.error("Error fetching user:", error); From 073518144d8450b20e71a17e7a87589f81b40894 Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Sun, 27 Oct 2024 23:01:22 -0400 Subject: [PATCH 07/11] fix get NEED TO FIX POST VOLUNTEER DETAILS AND UPDATING --- src/app/api/user/route.client.ts | 18 +++------ src/app/api/user/route.ts | 48 ++++++++++++----------- src/app/page.tsx | 65 ++++++++++++++++++++++---------- 3 files changed, 78 insertions(+), 53 deletions(-) diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index e37951e..c458fe7 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -1,11 +1,10 @@ -import { Prisma, User, VolunteerDetails } from "@prisma/client"; +import { User, VolunteerDetails } from "@prisma/client"; export const fetchApi = async ( endpoint: string, method: "POST" | "GET" | "DELETE" | "PUT", body?: Record ) => { - console.log(method); const response = await fetch(endpoint, { method, headers: { "Content-Type": "application/json" }, @@ -23,23 +22,18 @@ export const addUser = async (user: User, volunteerDetails: VolunteerDetails) => fetchApi("/api/user", "POST", { user, volunteerDetails }); export const getUser = async (userID: string) => { - const queryString = new URLSearchParams( - userID as Record - ).toString(); - const url = `/api/user?id=${queryString}`; + const url = `/api/user?id=${userID}`; return fetchApi(url, "GET"); }; export const deleteUser = async (userID: string) => { - - const queryString = new URLSearchParams( - userID as Record - ).toString(); - const url = `/api/user?id=${queryString}`; + const url = `/api/user?id=${userID}`; return fetchApi(url, "DELETE"); }; export const updateUser = async ( user: User, volunteerDetails: VolunteerDetails -) => fetchApi("/api/user", "PUT", { user, volunteerDetails }); +) => { + return fetchApi("/api/user", "PUT", { user, volunteerDetails }); +}; diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index f45272a..0f9f9e9 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -7,7 +7,8 @@ export const POST = async (request: NextRequest) => { try { /* @TODO: Add auth */ - const { user, VolunteerDetails } = await request.json(); + const { user, volunteerDetails } = await request.json(); + console.log() const savedUser = await prisma.user.create({ data: { @@ -17,11 +18,12 @@ export const POST = async (request: NextRequest) => { await prisma.volunteerDetails.create({ data: { - ...VolunteerDetails, + ...volunteerDetails, userId: savedUser.id, }, }); - console.log(savedUser) + console.log(savedUser); + console.log() return NextResponse.json({ code: "SUCCESS", @@ -63,7 +65,7 @@ export const GET = async (request: NextRequest) => { const { searchParams } = new URL(request.url); const id = searchParams.get("id"); // Assuming the user is queried by 'id' - console.log(id) + console.log(id); // Check if id is null if (!id) { @@ -78,13 +80,13 @@ export const GET = async (request: NextRequest) => { try { const fetchedUser = await prisma.user.findUnique({ where: { id }, - include: {volunteerDetails: true} + include: { volunteerDetails: true }, }); // const fetchedVD = await prisma.volunteerDetails.findUnique({ // where: { id } // }) - const fetchedVD = fetchedUser?.volunteerDetails + const fetchedVD = fetchedUser?.volunteerDetails; if (!fetchedUser || !fetchedVD) { return NextResponse.json( @@ -96,11 +98,14 @@ export const GET = async (request: NextRequest) => { ); } - console.log("IN GET: ", fetchedUser) + console.log("IN GET: ", fetchedUser); + const { volunteerDetails, ...user } = fetchedUser; + + console.log(user); return NextResponse.json({ code: "SUCCESS", - data: { fetchedUser, fetchedVD } + data: { user, fetchedVD }, }); } catch (error) { console.error("Error:", error); @@ -121,28 +126,29 @@ export const PUT = async (request: NextRequest) => { console.log("VOLUNTEERDET IN PUT: ", volunteerDetails); const updatedUser = await prisma.user.update({ - where: { - id: user.id - }, - data: { - ...user, - } - }); - + where: { + id: user.id, + }, + data: { + ...user, + id: undefined, + }, + }); - await prisma.volunteerDetails.update({ + const updatedVD = await prisma.volunteerDetails.update({ where: { - id: user.id + id: volunteerDetails.id, }, data: { ...volunteerDetails, + id: undefined, }, }); return NextResponse.json({ code: "SUCCESS", - message: `User created with email: ${updatedUser.email}`, - data: updatedUser, + message: `User update with email: ${updatedUser.email}`, + data: { user: updatedUser, volunteerDetails: updatedVD }, }); } catch (error) { console.error("Error:", error); @@ -151,4 +157,4 @@ export const PUT = async (request: NextRequest) => { message: error, }); } -}; \ No newline at end of file +}; diff --git a/src/app/page.tsx b/src/app/page.tsx index ac88dfe..52eb0bc 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,22 +3,27 @@ import ExampleButton from "@components/ExampleButton"; import CreateUserForm from "@components/createUserForm"; import { useState } from "react"; -import { getUser, deleteUser } from "@api/user/route.client"; -import { Prisma, User, VolunteerDetails } from "@prisma/client"; +import { getUser, deleteUser, updateUser } from "@api/user/route.client"; +import { User, VolunteerDetails } from "@prisma/client"; export default function Home() { const [userID, setUserID] = useState(""); - const [user, setUser] = useState(); - const [volunteerDetails, setVolunteerDetails] = useState(); + const [user, setUser] = useState(null); + const [volunteerDetails, setVolunteerDetails] = + useState(null); const getUserButton = async () => { try { - console.log(userID) - const { fetchedUser, fetchedVD } = await getUser(userID); - console.log("THIS IS USER: ", fetchedUser); + console.log("userID:", userID); + const response = await getUser(userID); + const fetchedUser = response.data.user; + const fetchedVD = response.data.fetchedVD; + + console.log(fetchedUser.firstName); + console.log(fetchedVD); + setUser(fetchedUser); - setVolunteerDetails(fetchedVD) - console.log("User fetched successfully."); + setVolunteerDetails(fetchedVD); } catch (error) { console.error("Error fetching user:", error); } @@ -27,7 +32,7 @@ export default function Home() { const deleteUserButton = async () => { try { await deleteUser(userID); - setUser(undefined); + setUser(null); console.log("User deleted successfully."); } catch (error) { console.error("Error deleting user:", error); @@ -37,15 +42,23 @@ export default function Home() { const updateUserButton = async () => { try { // const fetchedUser = await - let updatedUser = { - firstname: "Justin", + const updatedUser: User = { + firstName: "Justin", ...user, }; - const fetchedUser = await getUser(userID); - console.log("THIS IS USER: ", fetchedUser); - setUser(fetchedUser.data.firstName); - console.log("User fetched successfully."); + const updatedVD: VolunteerDetails = { + country: "Mexico", + ...volunteerDetails, + }; + console.log(updatedVD); + console.log(updatedUser); + + const response = await updateUser(updatedUser, updatedVD); + console.log("THIS IS UPDATED USER: ", response.data.user); + setUser(response.data.user); + setVolunteerDetails(response.data.volunteerDetails); + console.log("User updated successfully."); } catch (error) { console.error("Error fetching user:", error); } @@ -53,10 +66,22 @@ export default function Home() { return (
- - {/* Example Button (ExampleButton.tsx in components folder) */} - - {user ? {user.email} : No user...} + +
+ + {user ? ( +
+
  • + {user.firstName} {user.lastName} -{" "} + {volunteerDetails?.country || "Country not set"} +
  • + {user.email} +
    + ) : ( +
    No user...
    + )} +
    +
    ); From 52a185b63eb730951db43a05a382b0554eed6d9c Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Mon, 28 Oct 2024 17:20:20 -0400 Subject: [PATCH 08/11] clean route.ts and page.ts --- src/app/api/user/route.client.ts | 10 +++++ src/app/api/user/route.ts | 63 +++++++++++++++++++++----------- src/app/page.tsx | 12 ++---- 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index c458fe7..a936022 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -1,5 +1,15 @@ import { User, VolunteerDetails } from "@prisma/client"; +/** + * Sends an HTTP request to the specified endpoint with the provided method and body. + * + * @param {string} endpoint - The URL endpoint to which the request will be sent. + * @param {"POST" | "GET" | "DELETE" | "PUT"} method - The HTTP method for the request. + * @param {Record} [body] - The optional request body, used for POST and PUT requests. + * + * @returns {Promise} - Resolves to the response data in JSON format if the request is successful. + * @throws {Error} - Throws an error if the response status is not OK (status code outside the 200-299 range). + */ export const fetchApi = async ( endpoint: string, method: "POST" | "GET" | "DELETE" | "PUT", diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index 0f9f9e9..73df23f 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -3,12 +3,16 @@ import { NextRequest, NextResponse } from "next/server"; const prisma = new PrismaClient(); +/** + * Creates a new user with associated volunteerDetails. + * @param {NextRequest} request - The incoming request. + * @returns {NextResponse} - JSON response with user data or error. + */ export const POST = async (request: NextRequest) => { try { /* @TODO: Add auth */ const { user, volunteerDetails } = await request.json(); - console.log() const savedUser = await prisma.user.create({ data: { @@ -22,8 +26,6 @@ export const POST = async (request: NextRequest) => { userId: savedUser.id, }, }); - console.log(savedUser); - console.log() return NextResponse.json({ code: "SUCCESS", @@ -39,12 +41,33 @@ export const POST = async (request: NextRequest) => { } }; +/** + * Deletes a user and its associated volunteerDetails. + * @param {NextRequest} request - The incoming request with user ID. + * @returns {NextResponse} - JSON response indicating success or error. + */ export const DELETE = async (request: NextRequest) => { const { searchParams } = new URL(request.url); - const id = searchParams.get("id"); // Assuming the user is queried by 'id' + const id = searchParams.get("id"); + + // Check if id is null + if (!id) { + return NextResponse.json( + { + code: "BAD_REQUEST", + message: "User ID is required.", + }, + { status: 400 } + ); + } + try { + await prisma.volunteerDetails.delete({ + where: { userId: id }, + }); + const deletedUser = await prisma.user.delete({ - where: { id }, // `user` must include a unique field (e.g., { id: "some-object-id" }) + where: { id }, }); return NextResponse.json({ @@ -61,12 +84,15 @@ export const DELETE = async (request: NextRequest) => { } }; +/** + * Fetches a user with associated volunteerDetails. + * @param {NextRequest} request - The incoming request with user ID. + * @returns {NextResponse} - JSON response with user and volunteerDetails or error. + */ export const GET = async (request: NextRequest) => { const { searchParams } = new URL(request.url); const id = searchParams.get("id"); // Assuming the user is queried by 'id' - console.log(id); - // Check if id is null if (!id) { return NextResponse.json( @@ -83,12 +109,7 @@ export const GET = async (request: NextRequest) => { include: { volunteerDetails: true }, }); - // const fetchedVD = await prisma.volunteerDetails.findUnique({ - // where: { id } - // }) - const fetchedVD = fetchedUser?.volunteerDetails; - - if (!fetchedUser || !fetchedVD) { + if (!fetchedUser) { return NextResponse.json( { code: "NOT_FOUND", @@ -98,14 +119,12 @@ export const GET = async (request: NextRequest) => { ); } - console.log("IN GET: ", fetchedUser); + // Do not include volunteerDetails in user we return const { volunteerDetails, ...user } = fetchedUser; - console.log(user); - return NextResponse.json({ code: "SUCCESS", - data: { user, fetchedVD }, + data: { user, volunteerDetails }, }); } catch (error) { console.error("Error:", error); @@ -116,22 +135,23 @@ export const GET = async (request: NextRequest) => { } }; +/** + * Updates a user and associated volunteerDetails. + * @param {NextRequest} request - The incoming request with user and volunteerDetails data. + * @returns {NextResponse} - JSON response with updated data or error. + */ export const PUT = async (request: NextRequest) => { try { /* @TODO: Add auth */ const { user, volunteerDetails } = await request.json(); - console.log("USER IN PUT: ", user); - console.log("VOLUNTEERDET IN PUT: ", volunteerDetails); - const updatedUser = await prisma.user.update({ where: { id: user.id, }, data: { ...user, - id: undefined, }, }); @@ -141,7 +161,6 @@ export const PUT = async (request: NextRequest) => { }, data: { ...volunteerDetails, - id: undefined, }, }); diff --git a/src/app/page.tsx b/src/app/page.tsx index 52eb0bc..2595a29 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -42,23 +42,19 @@ export default function Home() { const updateUserButton = async () => { try { // const fetchedUser = await - const updatedUser: User = { - firstName: "Justin", + const updatedUser = { ...user, + firstName: "Justin", }; - const updatedVD: VolunteerDetails = { - country: "Mexico", + const updatedVD = { ...volunteerDetails, + country: "Mexico", }; - console.log(updatedVD); - console.log(updatedUser); const response = await updateUser(updatedUser, updatedVD); - console.log("THIS IS UPDATED USER: ", response.data.user); setUser(response.data.user); setVolunteerDetails(response.data.volunteerDetails); - console.log("User updated successfully."); } catch (error) { console.error("Error fetching user:", error); } From b2767ec8a5efb269cc366d5a68d60f1b4cfd5002 Mon Sep 17 00:00:00 2001 From: ManuP6789 Date: Tue, 29 Oct 2024 21:04:16 -0400 Subject: [PATCH 09/11] fix PUT --- src/app/api/user/route.ts | 3 +++ src/app/page.tsx | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index 73df23f..fe15c45 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -146,12 +146,14 @@ export const PUT = async (request: NextRequest) => { const { user, volunteerDetails } = await request.json(); + // id: undefined for data because we cannot modify the id const updatedUser = await prisma.user.update({ where: { id: user.id, }, data: { ...user, + id: undefined, }, }); @@ -161,6 +163,7 @@ export const PUT = async (request: NextRequest) => { }, data: { ...volunteerDetails, + id: undefined, }, }); diff --git a/src/app/page.tsx b/src/app/page.tsx index 2595a29..a332863 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -17,7 +17,7 @@ export default function Home() { console.log("userID:", userID); const response = await getUser(userID); const fetchedUser = response.data.user; - const fetchedVD = response.data.fetchedVD; + const fetchedVD = response.data.volunteerDetails; console.log(fetchedUser.firstName); console.log(fetchedVD); @@ -51,6 +51,7 @@ export default function Home() { ...volunteerDetails, country: "Mexico", }; + console.log(updatedVD); const response = await updateUser(updatedUser, updatedVD); setUser(response.data.user); From 4d564366eea2edec4d70e2cf4290cefb58e37c02 Mon Sep 17 00:00:00 2001 From: wkim10 Date: Wed, 30 Oct 2024 14:21:58 -0400 Subject: [PATCH 10/11] small changes (e.g. adding hours worked, moving example user routes calling to new file, etc) --- prisma/schema.prisma | 6 +- src/app/api/user/route.client.ts | 14 +++- src/app/page.tsx | 82 +------------------ src/components/ExampleCallingUserRoutes.tsx | 90 +++++++++++++++++++++ src/components/createUserForm.tsx | 61 +++++--------- 5 files changed, 125 insertions(+), 128 deletions(-) create mode 100644 src/components/ExampleCallingUserRoutes.tsx diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 1fd7512..d6c42be 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -20,7 +20,7 @@ enum Role { model User { id String @id @default(auto()) @map("_id") @db.ObjectId - role String @default("") + role Role @default(VOLUNTEER) firstName String @default("") lastName String @default("") email String @default("") @@ -40,9 +40,7 @@ model VolunteerDetails { hasLicense Boolean @default(false) speaksEsp Boolean @default(false) volunteerType String @default("") - daysAvailable String @default("") - timeAvailable String @default("") - basis String @default("") + hoursWorked Int @default(0) user User @relation(fields: [userId], references: [id]) userId String @unique @db.ObjectId } diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index a936022..d279265 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -1,5 +1,11 @@ import { User, VolunteerDetails } from "@prisma/client"; +type CreateUserInput = Omit; +type CreateVolunteerDetailsInput = Omit< + VolunteerDetails, + "id" | "user" | "userId" +>; + /** * Sends an HTTP request to the specified endpoint with the provided method and body. * @@ -13,7 +19,7 @@ import { User, VolunteerDetails } from "@prisma/client"; export const fetchApi = async ( endpoint: string, method: "POST" | "GET" | "DELETE" | "PUT", - body?: Record + body?: Record ) => { const response = await fetch(endpoint, { method, @@ -28,8 +34,10 @@ export const fetchApi = async ( return response.json(); }; -export const addUser = async (user: User, volunteerDetails: VolunteerDetails) => - fetchApi("/api/user", "POST", { user, volunteerDetails }); +export const addUser = async ( + user: CreateUserInput, + volunteerDetails: CreateVolunteerDetailsInput +) => fetchApi("/api/user", "POST", { user, volunteerDetails }); export const getUser = async (userID: string) => { const url = `/api/user?id=${userID}`; diff --git a/src/app/page.tsx b/src/app/page.tsx index a332863..fea65d9 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,85 +1,5 @@ "use client"; -import ExampleButton from "@components/ExampleButton"; -import CreateUserForm from "@components/createUserForm"; -import { useState } from "react"; -import { getUser, deleteUser, updateUser } from "@api/user/route.client"; -import { User, VolunteerDetails } from "@prisma/client"; - export default function Home() { - const [userID, setUserID] = useState(""); - const [user, setUser] = useState(null); - const [volunteerDetails, setVolunteerDetails] = - useState(null); - - const getUserButton = async () => { - try { - console.log("userID:", userID); - const response = await getUser(userID); - const fetchedUser = response.data.user; - const fetchedVD = response.data.volunteerDetails; - - console.log(fetchedUser.firstName); - console.log(fetchedVD); - - setUser(fetchedUser); - setVolunteerDetails(fetchedVD); - } catch (error) { - console.error("Error fetching user:", error); - } - }; - - const deleteUserButton = async () => { - try { - await deleteUser(userID); - setUser(null); - console.log("User deleted successfully."); - } catch (error) { - console.error("Error deleting user:", error); - } - }; - - const updateUserButton = async () => { - try { - // const fetchedUser = await - const updatedUser = { - ...user, - firstName: "Justin", - }; - - const updatedVD = { - ...volunteerDetails, - country: "Mexico", - }; - console.log(updatedVD); - - const response = await updateUser(updatedUser, updatedVD); - setUser(response.data.user); - setVolunteerDetails(response.data.volunteerDetails); - } catch (error) { - console.error("Error fetching user:", error); - } - }; - - return ( -
    - -
    - - {user ? ( -
    -
  • - {user.firstName} {user.lastName} -{" "} - {volunteerDetails?.country || "Country not set"} -
  • - {user.email} -
    - ) : ( -
    No user...
    - )} -
    - - -
    - ); + return
    ; } diff --git a/src/components/ExampleCallingUserRoutes.tsx b/src/components/ExampleCallingUserRoutes.tsx new file mode 100644 index 0000000..865387a --- /dev/null +++ b/src/components/ExampleCallingUserRoutes.tsx @@ -0,0 +1,90 @@ +"use client"; + +import ExampleButton from "@components/ExampleButton"; +import CreateUserForm from "@components/createUserForm"; +import { useState } from "react"; +import { getUser, deleteUser, updateUser } from "@api/user/route.client"; +import { User, VolunteerDetails } from "@prisma/client"; + +export default function ExampleCallingUserRoutes() { + const [userID, setUserID] = useState(""); + const [user, setUser] = useState(null); + const [volunteerDetails, setVolunteerDetails] = + useState(null); + + const getUserButton = async () => { + try { + console.log("userID:", userID); + const response = await getUser(userID); + const fetchedUser = response.data.user; + const fetchedVD = response.data.volunteerDetails; + + console.log(fetchedUser.firstName); + console.log(fetchedVD); + + setUser(fetchedUser); + setVolunteerDetails(fetchedVD); + } catch (error) { + console.error("Error fetching user:", error); + } + }; + + const deleteUserButton = async () => { + try { + await deleteUser(userID); + setUser(null); + console.log("User deleted successfully."); + } catch (error) { + console.error("Error deleting user:", error); + } + }; + + const updateUserButton = async () => { + try { + console.log(user); + console.log(volunteerDetails); + if (!user || !volunteerDetails) { + throw new Error("User data is incomplete"); + } + + const updatedUser = { + ...user, + firstName: "Justin", + }; + + const updatedVD = { + ...volunteerDetails, + country: "Mexico", + }; + console.log(updatedVD); + + const response = await updateUser(updatedUser, updatedVD); + setUser(response.data.user); + setVolunteerDetails(response.data.volunteerDetails); + } catch (error) { + console.error("Error fetching user:", error); + } + }; + + return ( +
    + +
    + + {user ? ( +
    +
  • + {user.firstName} {user.lastName} -{" "} + {volunteerDetails?.country || "Country not set"} +
  • + {user.email} +
    + ) : ( +
    No user...
    + )} +
    + + +
    + ); +} diff --git a/src/components/createUserForm.tsx b/src/components/createUserForm.tsx index d049f5a..0b55832 100644 --- a/src/components/createUserForm.tsx +++ b/src/components/createUserForm.tsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { addUser } from "@api/user/route.client"; +import { Role } from "@prisma/client"; interface CreateUserForm { setUserID: (id: string) => void; @@ -10,7 +11,7 @@ const CreateUserForm = ({ setUserID }: CreateUserForm) => { firstName: "", lastName: "", email: "", - role: "VOLUNTEER", + role: Role.VOLUNTEER, ageOver14: false, country: "", address: "", @@ -20,9 +21,7 @@ const CreateUserForm = ({ setUserID }: CreateUserForm) => { hasLicense: false, speaksEsp: false, volunteerType: "", - daysAvailable: "", - timeAvailable: "", - basis: "", + hoursWorked: 0, }); const handleChange = ( @@ -30,10 +29,17 @@ const CreateUserForm = ({ setUserID }: CreateUserForm) => { HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement > ) => { - const { name, value, type, checked } = e.target; + const { name, value, type } = e.target; + const newValue = + type === "checkbox" && e.target instanceof HTMLInputElement + ? e.target.checked + : name === "hoursWorked" + ? parseInt(value) || 0 + : value; + setFormData((prevData) => ({ ...prevData, - [name]: type === "checkbox" ? checked : value, + [name]: newValue, })); }; @@ -57,9 +63,7 @@ const CreateUserForm = ({ setUserID }: CreateUserForm) => { hasLicense: formData.hasLicense, speaksEsp: formData.speaksEsp, volunteerType: formData.volunteerType, - daysAvailable: formData.daysAvailable, - timeAvailable: formData.timeAvailable, - basis: formData.basis, + hoursWorked: formData.hoursWorked, } ); setUserID(response.data.id); @@ -203,40 +207,17 @@ const CreateUserForm = ({ setUserID }: CreateUserForm) => {
    - -
    -
    - - -
    -
    - - +
    - + From 09a2fbefb02d02894fb007d4cf8908169b788590 Mon Sep 17 00:00:00 2001 From: wkim10 Date: Wed, 30 Oct 2024 14:26:44 -0400 Subject: [PATCH 11/11] remove import --- src/components/ExampleButton.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/ExampleButton.tsx b/src/components/ExampleButton.tsx index 592c85d..c6f16b8 100644 --- a/src/components/ExampleButton.tsx +++ b/src/components/ExampleButton.tsx @@ -1,5 +1,4 @@ import { Icon } from "@iconify/react/dist/iconify.js"; -import { addEvent } from "@api/event/route.client"; interface ExampleButtonProps { buttonText: string;