diff --git a/backend/models/user.js b/backend/models/user.js index f467b4d..d7210b5 100644 --- a/backend/models/user.js +++ b/backend/models/user.js @@ -38,9 +38,14 @@ const userSchema = new Schema( }, methods: { async getFriends() { - await this.populate("friends", "username"); + await this.populate("friends", "username email"); // console.log(this.friends); - return this.friends.map(friend => friend.username); + return this.friends.map((friend) => { + return { + username: friend.username, + email: friend.email, + }; + }); }, }, } diff --git a/backend/routes/user.js b/backend/routes/user.js index 925f884..8dc18bc 100644 --- a/backend/routes/user.js +++ b/backend/routes/user.js @@ -1,5 +1,6 @@ const router = require("express").Router(); const { User } = require("../models/user"); +const { checkAuth } = require("../util/auth"); const { pendingChallenges } = require("./room"); // TODO @@ -13,11 +14,15 @@ router.get("/:username", async (req, res, next) => { router.post("/:username", async (req, res, next) => {}); // get friends of the user -router.get("/:username/friends", async (req, res, next) => { +router.get("/:username/friends", checkAuth, async (req, res, next) => { const username = req.params.username; const user = await User.findOne({ username }); - const friends = await user.getFriends(); - return res.json({ success: true, friends }); + if (user) { + const friends = await user.getFriends(); + return res.json({ success: true, friends }); + } else { + return res.json({ success: false, error: "Invalid username" }); + } }); // TODO @@ -37,7 +42,7 @@ router.get("/:username/challenges", async (req, res, next) => { let username = req.params.username; let challenges = pendingChallenges.get(username); if (!challenges) challenges = []; - console.log(username,challenges); + console.log(username, challenges); res.json({ success: true, challenges: challenges }); }); diff --git a/frontend/src/components/FriendsList.jsx b/frontend/src/components/FriendsList.jsx index 829939d..13435a2 100644 --- a/frontend/src/components/FriendsList.jsx +++ b/frontend/src/components/FriendsList.jsx @@ -1,50 +1,49 @@ import { Avatar, Flex, Image, Loader, NavLink, Text, Title } from '@mantine/core'; import { Link } from 'react-router-dom'; import React, { useEffect, useState } from 'react'; +import { getAuthToken, getUserData } from '../../utils/auth' const FriendsList = () => { const [friends, setFriends] = useState(null); + const user = getUserData(); + let { username } = user; useEffect(() => { - const abortController = new AbortController(); let response = null; const fetchData = async () => { - let url = `${import.meta.env.VITE_BACKEND_HOST}/api/user/user1/friends`; + let url = `${import.meta.env.VITE_BACKEND_HOST}/api/user/${username}/friends`; try { - response = await fetch(url, { signal: abortController.signal }); + response = await fetch(url, { + headers: { + 'Authorization': `Bearer ${getAuthToken()}` + } + }); const data = await response.json(); if (data.success) { setFriends(data.friends); } else { - throw data; + throw data.error; } } catch (error) { - if (error.message === 'The user aborted a request.'); - else { - console.log('Error fetching data'); - throw error; - } + console.error(error) } } fetchData(); - return () => { - if (!response) { - abortController.abort(); - } - } }, []); + if (!friends) { + return ( + + ) + } + return ( Friends - { - friends ? - friends.map((friend, index) => } label={{friend}} />) - : - + friends.map((friend, index) => } label={{friend.username}} />) } ) diff --git a/frontend/src/pages/Chess/ChessGame.jsx b/frontend/src/pages/Chess/ChessGame.jsx index 61234c0..b0f6a52 100644 --- a/frontend/src/pages/Chess/ChessGame.jsx +++ b/frontend/src/pages/Chess/ChessGame.jsx @@ -1,6 +1,6 @@ import { Avatar, Button, Flex, Image, Loader, MediaQuery, NavLink, Text, Title } from '@mantine/core' import React, { useEffect, useState } from 'react' -import ChessBoard from '../Play/ChessBoard' +import ChessBoard from '../Chess/ChessBoard' import { useNavigate, useParams } from 'react-router-dom' import { socket } from '../../socket' import { getUserData } from '../../../utils/auth'