From 8255109b7503e0ceba1df082baf9cf5734e8228d Mon Sep 17 00:00:00 2001 From: Karol Krawczykiewicz <26karol26@gmail.com> Date: Mon, 26 Feb 2024 14:52:44 +0100 Subject: [PATCH 001/291] Add friend suggestion endpoint --- backend/src/routes/usersFriendsRoute.ts | 34 ++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/backend/src/routes/usersFriendsRoute.ts b/backend/src/routes/usersFriendsRoute.ts index 4dbcba75..910a9ab4 100644 --- a/backend/src/routes/usersFriendsRoute.ts +++ b/backend/src/routes/usersFriendsRoute.ts @@ -2,7 +2,7 @@ import { Router, Request, Response } from "express"; import { Session } from "neo4j-driver"; import driver from "../driver/driver"; import User from "../models/User"; -import { OkErrorResponse, FriendsErrorResponse } from "../types/userResponse"; +import { OkErrorResponse, FriendsErrorResponse, UsersErrorResponse } from "../types/userResponse"; const friendshipRouter = Router(); @@ -85,6 +85,38 @@ friendshipRouter.get( }, ); +friendshipRouter.get( + "/:userId/friend-suggestions", + async (req: Request, res: UsersErrorResponse) => { + try { + const session: Session = driver.session(); + const userId: string = req.params.userId; + + const user = await userExists(session, res, userId); + if ("json" in user) { + await session.close(); + return res; + } + + const friendSuggestionsQuery = await session.run( + `MATCH (u:User {id: $userId})-[:IS_FRIENDS_WITH]->(friend:User)-[:IS_FRIENDS_WITH]->(suggested:User) + WHERE NOT (u)-[:IS_FRIENDS_WITH]->(suggested) AND suggested.id <> $userId + RETURN DISTINCT suggested + ORDER BY suggested.last_name, suggested.first_name`, + { userId }, + ); + await session.close(); + + const users: User[] = friendSuggestionsQuery.records.map((record) => record.get("suggested").properties); + return res.json({ status: "ok", users }); + } catch (err) { + console.log("Error:", err); + return res.status(404).json({ status: "error", errors: err as object }); + } + }, +); + + friendshipRouter.delete( "/:userId1/remove/:userId2", async (req: Request, res: OkErrorResponse) => { From 6aebf441a630be234f991ba82e9c4b9e0ea69bed Mon Sep 17 00:00:00 2001 From: Karol Krawczykiewicz <26karol26@gmail.com> Date: Mon, 26 Feb 2024 15:42:26 +0100 Subject: [PATCH 002/291] Add suggested friend display --- frontend/src/pages/FriendsPage.tsx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/frontend/src/pages/FriendsPage.tsx b/frontend/src/pages/FriendsPage.tsx index 8435a64c..57eb002e 100644 --- a/frontend/src/pages/FriendsPage.tsx +++ b/frontend/src/pages/FriendsPage.tsx @@ -16,6 +16,7 @@ import User from "../models/User"; import setUserFriends from "../redux/actions/setUserFriends"; import dataService from "../services/data"; import Transition from "../components/Transition"; +import FoundUser from "../components/FoundUser"; function FriendsPage() { const navigate = useNavigate(); @@ -26,6 +27,8 @@ function FriendsPage() { const [friendsRequests, setFriendsRequests] = useState([]); const [refresh, setRefresh] = useState(false); + const [friendSuggestions, setFriendSuggestions] = useState([]); + const [showDeleteModal, setShowDeleteModal] = useState(false); const [friendToDelete, setFriendToDelete] = useState(null); @@ -43,6 +46,21 @@ function FriendsPage() { }, 100); }, []); + useEffect(()=>{ + const fetchFriendSuggestions = async () => { + if (user) { + const friendsRequestsResponse = await dataService.fetchData( + `/users/${user.id}/friend-suggestions`, + "GET", + {}, + ); + setFriendSuggestions(friendsRequestsResponse.users); + } + }; + fetchFriendSuggestions(); + + },[]) + useEffect(() => { const fetchFriendRequests = async () => { if (user) { @@ -205,6 +223,15 @@ function FriendsPage() { +
+
+

Friends Suggestions:

+ {user && friendSuggestions && friendSuggestions.map((suggsetion: User, index: number) => ( + + ))} +
+ +