From 7c5b3f96e7d25251392c71e206d56253d39b1658 Mon Sep 17 00:00:00 2001 From: Kyla Date: Thu, 24 Apr 2025 21:35:31 -0700 Subject: [PATCH 01/11] added profile page --- backend/package-lock.json | 14 +++--- backend/package.json | 2 +- backend/src/controllers/products.ts | 4 +- backend/src/controllers/users.ts | 2 +- backend/src/models/user.ts | 11 ++-- frontend/src/App.tsx | 9 ++++ frontend/src/components/Navbar.tsx | 5 ++ frontend/src/pages/ProfilePage.tsx | 78 +++++++++++++++++++++++++++++ 8 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 frontend/src/pages/ProfilePage.tsx diff --git a/backend/package-lock.json b/backend/package-lock.json index 3efc828..1814cb4 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -22,7 +22,7 @@ "mongodb": "^5.7.0", "mongoose": "^8.9.5", "multer": "^1.4.5-lts.1", - "nodemailer": "^6.10.0", + "nodemailer": "^6.10.1", "uuid": "^11.0.5" }, "devDependencies": { @@ -5018,9 +5018,9 @@ } }, "node_modules/nodemailer": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.0.tgz", - "integrity": "sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz", + "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==", "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -10344,9 +10344,9 @@ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "nodemailer": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.0.tgz", - "integrity": "sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==" + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz", + "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==" }, "nodemon": { "version": "3.0.1", diff --git a/backend/package.json b/backend/package.json index 548f9ab..cfb70bf 100644 --- a/backend/package.json +++ b/backend/package.json @@ -13,7 +13,7 @@ "mongodb": "^5.7.0", "mongoose": "^8.9.5", "multer": "^1.4.5-lts.1", - "nodemailer": "^6.10.0", + "nodemailer": "^6.10.1", "uuid": "^11.0.5" }, "name": "backend", diff --git a/backend/src/controllers/products.ts b/backend/src/controllers/products.ts index bab3c55..d1063e9 100644 --- a/backend/src/controllers/products.ts +++ b/backend/src/controllers/products.ts @@ -122,7 +122,7 @@ export const deleteProductById = async (req: AuthenticatedRequest, res: Response if (!user) { return res.status(404).json({ message: "User not found" }); } - if (!user.productList.includes(id)) { + if (!user.productList.includes(new mongoose.Types.ObjectId(id))) { return res.status(400).json({ message: "User does not own this product" }); } @@ -162,7 +162,7 @@ export const updateProductById = [ console.log("in the terminal4"); - if (!user.productList.includes(id)) { + if (!user.productList.includes(new mongoose.Types.ObjectId(id))) { return res.status(400).json({ message: "User does not own this product" }); } diff --git a/backend/src/controllers/users.ts b/backend/src/controllers/users.ts index 7ddbf5b..2d122c9 100644 --- a/backend/src/controllers/users.ts +++ b/backend/src/controllers/users.ts @@ -16,7 +16,7 @@ export const getUserById = async (req: Request, res: Response) => { try { const firebaseUid = req.params.firebaseUid; - const user = await UserModel.findOne({ firebaseUid: firebaseUid }); + const user = await UserModel.findOne({ firebaseUid: firebaseUid }).populate("productList"); if (!user) { return res.status(404).json({ message: "User not found" }); diff --git a/backend/src/models/user.ts b/backend/src/models/user.ts index 640b18a..9ab3628 100644 --- a/backend/src/models/user.ts +++ b/backend/src/models/user.ts @@ -16,11 +16,12 @@ const userSchema = new Schema({ type: Date, required: true, }, - productList: { - type: [String], - required: true, - default: [], - }, + productList: [ + { + type: Schema.Types.ObjectId, + ref: "Product", + }, + ], firebaseUid: { type: String, required: true, diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index b93157e..ae3cd27 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -10,6 +10,7 @@ import { AddProduct } from "../src/pages/AddProduct"; import { EditProduct } from "../src/pages/EditProduct"; import { IndividualProductPage } from "../src/pages/Individual-product-page"; import { PageNotFound } from "../src/pages/PageNotFound"; +import { ProfilePage } from "../src/pages/ProfilePage"; import FirebaseProvider from "../src/utils/FirebaseProvider"; const router = createBrowserRouter([ @@ -53,6 +54,14 @@ const router = createBrowserRouter([ path: "*", element: , }, + { + path: "/user-profile", + element: ( + + + + ), + }, ]); export default function App() { diff --git a/frontend/src/components/Navbar.tsx b/frontend/src/components/Navbar.tsx index a94ed2d..3becdbb 100644 --- a/frontend/src/components/Navbar.tsx +++ b/frontend/src/components/Navbar.tsx @@ -65,6 +65,11 @@ export function Navbar() { Products +
  • + {user ? ( + + ) : null} +
  • {user ? (
  • {user ? ( - + ) : null}
  • @@ -120,6 +126,17 @@ export function Navbar() { Products
  • +
  • + {user ? ( + + ) : null} +
  • {user ? ( + +
    +

    + {profile?.displayName || profile?.email}

    +
    +

    Products

    +
    {profile?.productList.length === 0 && (

    No posted products yet.

    )} From 13f96c938116d95bbb89b5a573cdbd5527bb8146 Mon Sep 17 00:00:00 2001 From: Kyla Date: Mon, 5 May 2025 13:49:13 -0700 Subject: [PATCH 03/11] added profile picture and biography --- backend/src/models/user.ts | 6 +++++ frontend/public/profile-pic-default.png | Bin 0 -> 21133 bytes frontend/src/components/Navbar.tsx | 6 ++--- frontend/src/pages/ProfilePage.tsx | 28 +++++++++++++++++++----- 4 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 frontend/public/profile-pic-default.png diff --git a/backend/src/models/user.ts b/backend/src/models/user.ts index 9ab3628..42320e4 100644 --- a/backend/src/models/user.ts +++ b/backend/src/models/user.ts @@ -26,6 +26,12 @@ const userSchema = new Schema({ type: String, required: true, }, + profilePic: { + type: String, + }, + biography: { + type: String, + }, }); export type User = HydratedDocument>; diff --git a/frontend/public/profile-pic-default.png b/frontend/public/profile-pic-default.png new file mode 100644 index 0000000000000000000000000000000000000000..7a12fef5659c6cc5a9eb99b0dc565ae5ba9d8f63 GIT binary patch literal 21133 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 k
  • {user ? (