Skip to content

Commit

Permalink
Merge pull request #91 from shuyi320/main
Browse files Browse the repository at this point in the history
favorite
  • Loading branch information
bradleyhung authored Dec 9, 2024
2 parents a376007 + 401274a commit c7c4ab3
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 1 deletion.
25 changes: 24 additions & 1 deletion backend/database/models/userInfo.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const userModel = new Schema({
userName: String,
imageUrl: String,
petPreference: Object,
favoritePets: [String],
favorites: { type: [String], default: [] },
friends: { type: [String], default: [] }
});

Expand Down Expand Up @@ -47,6 +47,29 @@ export async function addFriend(user, friend) {

}

export async function addPetToFavorites(userId, petId) {
const user = await users.findOne({ userId });
if (!user) throw new Error("User not found");

if (user.favorites.includes(petId)) {
throw new Error("Pet is already in favorites");
}

user.favorites.push(petId);
await user.save();
return user.favorites; // Return updated favorites
}

export async function removePetFromFavorites(userId, petId) {
const user = await users.findOne({ userId });
if (!user) throw new Error("User not found");

user.favorites = user.favorites.filter((id) => id !== petId);
await user.save();
return user.favorites; // Return updated favorites
}


// export async function addPetToUser(userID, petID) {
// const user = await getUserByID(userID);
// if (!user)
Expand Down
48 changes: 48 additions & 0 deletions backend/routes/api.users.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import {
getUserByName,
getFriends,
addFriend,
addPetToFavorites,
removePetFromFavorites,
create,
} from "../database/models/userInfo.js";
import { createClerkClient } from "@clerk/backend";
Expand Down Expand Up @@ -82,4 +84,50 @@ router.post("/addFriend", async (req, res) => {
}
});

router.post("/addFavorite", async (req, res) => {
try {
const { userId, petId } = req.body;

if (!userId || !petId) {
return res.status(400).json({ error: "Missing userId or petId" });
}

const updatedFavorites = await addPetToFavorites(userId, petId);
res.status(200).json({ message: "Pet added to favorites", favorites: updatedFavorites });
} catch (error) {
res.status(400).json({ error: error.message });
}
});

router.post("/removePetFromFavorites", async (req, res) => {
try {
const { userId, petId } = req.body;

if (!userId || !petId) {
return res.status(400).json({ error: "Missing userId or petId" });
}

const updatedFavorites = await removePetFromFavorites(userId, petId);
res.status(200).json({ message: "Pet removed from favorites", favorites: updatedFavorites });
} catch (error) {
res.status(400).json({ error: error.message });
}
});

router.get("/getFavorites/:userId", async (req, res) => {
try {
const { userId } = req.params;
const user = await getUserById(userId);

if (!user) {
return res.status(404).json({ error: "User not found" });
}

res.status(200).json({ favorites: user.favorites });
} catch (error) {
res.status(400).json({ error: error.message });
}
});


export default router;
1 change: 1 addition & 0 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c7c4ab3

Please sign in to comment.