diff --git a/feedMicroservice/Dockerfile b/feedMicroservice/Dockerfile index b875f4e76eb1cfb6389849019f6023c2b6d9bb4c..257c8e060c3e6f44b320bca4d39964121a9078a2 100644 --- a/feedMicroservice/Dockerfile +++ b/feedMicroservice/Dockerfile @@ -6,7 +6,7 @@ COPY . /app RUN pip install flask==2.2.3 RUN pip install flask-cors -RUN pip install requests +RUN pip install requests==2.28.2 EXPOSE 5051 diff --git a/feedMicroservice/app.py b/feedMicroservice/app.py index 238621fa590a255a6db49fcf68fc3be7865083d7..23546cf43404f62b1e1b349c04a2f5280b4e52e0 100644 --- a/feedMicroservice/app.py +++ b/feedMicroservice/app.py @@ -16,7 +16,7 @@ def getFeed(): headers = {"accessToken": accessToken} - followings = (requests.post('http://localhost:3002/followings/getFollowings', + followings = (requests.post('http://userMicroservice_c:3002/followings/getFollowings', json={"userID": userID}, headers=headers)).json() @@ -32,12 +32,12 @@ def getFeed(): for i in range (len(followingsID)): id = int(followingsID[i]) # person your followings ID # followerRatings = that users all ratings for all songs - followerRatings = (requests.get(f'http://localhost:5050/all_ratings?userID={id}')).json() - user = (requests.post(f'http://localhost:3002/auth/getUser', json={"userID": id}, headers=headers)).json() + followerRatings = (requests.get(f'http://musicMicroservice_c:5050/all_ratings?userID={id}')).json() + user = (requests.post(f'http://userMicroservice_c:3002/auth/getUser', json={"userID": id}, headers=headers)).json() name = (user['username']) for j in range (len(followerRatings)): - song = (requests.get(f'http://localhost:5050/search_id/{followerRatings[j][0]}')).json() + song = (requests.get(f'http://musicMicroservice_c:5050/search_id/{followerRatings[j][0]}')).json() song.append(followerRatings[j][1]) song.append(followerRatings[j][2]) song.append(name) @@ -48,9 +48,9 @@ def getFeed(): @app.route('/getFeedGeneric') def getFeedGeneric(): feed = [] - topRatings = (requests.get('http://localhost:5050/top_ratings/')).json() + topRatings = (requests.get('http://musicMicroservice_c:5050/top_ratings/')).json() for i in range(len(topRatings)): - song = (requests.get(f'http://localhost:5050/search_id/{topRatings[i][0]}')).json() + song = (requests.get(f'http://musicMicroservice_c:5050/search_id/{topRatings[i][0]}')).json() song.append(topRatings[i][1]) feed.append(song) return feed diff --git a/front-end/package-lock.json b/front-end/package-lock.json index e5c76beb1988ef220d0b7463b5ce7d08b6d5ba59..a37cb27bef7bcdb6bcd4a0198f065c5bb438b189 100644 --- a/front-end/package-lock.json +++ b/front-end/package-lock.json @@ -23,6 +23,7 @@ "react-flip-move": "^3.0.4", "react-router-dom": "^6.9.0", "react-scripts": "^5.0.1", + "react-toastify": "^9.1.2", "react-twitter-embed": "^3.0.3", "yup": "^1.0.2" } @@ -18514,6 +18515,18 @@ "react": "^16.13.1" } }, + "node_modules/react-toastify": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.2.tgz", + "integrity": "sha512-PBfzXO5jMGEtdYR5jxrORlNZZe/EuOkwvwKijMatsZZm8IZwLj01YvobeJYNjFcA6uy6CVrx2fzL9GWbhWPTDA==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/react-transition-group": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", diff --git a/front-end/package.json b/front-end/package.json index a2f404f56180d0639d9b9c40f67c5a4493e10348..5b79d5f2ee6e1cbe2a9aa1fe6342b3a39cdb1fbd 100644 --- a/front-end/package.json +++ b/front-end/package.json @@ -19,11 +19,12 @@ "react-flip-move": "^3.0.4", "react-router-dom": "^6.9.0", "react-scripts": "^5.0.1", + "react-toastify": "^9.1.2", "react-twitter-embed": "^3.0.3", "yup": "^1.0.2" }, "scripts": { - "start": "react-scripts start", + "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" diff --git a/front-end/src/App.js b/front-end/src/App.js index 97a164449b83c53c273394e4fc367b6d982af177..8bb47cd44e12a90fc108a29aeb323acc5398acef 100644 --- a/front-end/src/App.js +++ b/front-end/src/App.js @@ -18,6 +18,9 @@ import Login from "./Login"; import Register from "./Register"; import Song from "./Song"; import Header from "./Header"; +import { ToastContainer, toast } from "react-toastify"; +import "react-toastify/dist/ReactToastify.css"; + function App() { const [authState, setAuthState] = useState(false); const [userID, setUserID] = useState(false); @@ -85,6 +88,7 @@ const Root = () => { <Header /> <Sidebar /> <Outlet /> + <ToastContainer /> </> ); }; diff --git a/front-end/src/Feed.js b/front-end/src/Feed.js index ff0cce97b659ecf354d3a10f39d9834229e5a727..333e44723dea0e7d5a37c609ec87a22bddb74656 100644 --- a/front-end/src/Feed.js +++ b/front-end/src/Feed.js @@ -2,29 +2,21 @@ import React, { useState, useEffect, useContext } from "react"; import "./Feed.css"; import { AuthContext } from "./helpers/AuthContext"; import axios from "axios"; +import { ToastContainer, toast } from "react-toastify"; function Feed() { const { userID, authState } = useContext(AuthContext); const [feedData, setFeedData] = useState([]); - - function getFeedData() { - if (authState == true) { - axios - .get(`http://localhost:5051/getFeed?userID=${userID}`, { - headers: { - accessToken: localStorage.getItem("accessToken"), - }, - }) - .then((response) => { - if (response.data.error) { - alert(response.data.error); - } else { - console.log(response.data); - setFeedData(response.data); - } - }); - } else { - axios.get(`http://localhost:5051/getFeedGeneric`).then((response) => { + const [notified, setNotified] = useState(false); + + async function getFeed() { + await axios + .get(`http://localhost:5051/getFeed?userID=${userID}`, { + headers: { + accessToken: localStorage.getItem("accessToken"), + }, + }) + .then((response) => { if (response.data.error) { alert(response.data.error); } else { @@ -32,15 +24,38 @@ function Feed() { setFeedData(response.data); } }); + } + + async function getGenericFeed() { + await axios.get(`http://localhost:5051/getFeedGeneric`).then((response) => { + if (response.data.error) { + alert(response.data.error); + } else { + console.log(response.data); + setFeedData(response.data); + } + }); + } + + async function getFeedData() { + if (authState == true) { + getFeed(); + } else { + getGenericFeed(); } } - useEffect(() => { - getFeedData(); - }, []); + // useEffect(() => { + // getFeedData(); + // }, []); useEffect(() => { getFeedData(); + if (authState && notified == false && feedData.length === 0) { + setNotified(true); + notify(); + getGenericFeed(); + } }, [authState]); function timeSince(date) { @@ -90,7 +105,9 @@ function Feed() { <div className="userRating"> <div className="profilecard userPostProfile"> - <div data-initials={result[3].charAt(0).toUpperCase()}></div> + <div + data-initials={result[3] && result[3].charAt(0).toUpperCase()} + ></div> <div className="postUser">{result[3]}</div> </div> @@ -117,19 +134,31 @@ function Feed() { ); } + const notify = () => { + toast("You are not following anyone!"); + }; + return ( <div className="feed"> <div className="feed__header"> <h2>Home</h2> </div> + {/* {feedData.length === 0 && <div>You are not following anyone</div>} */} + <div className="feedContainer"> {feedData && feedData.map((post) => { return ( <div className="search-result-links"> {authState == true ? ( - <ListPost result={post} /> + <> + {notified ? ( + <GenericPost result={post} /> + ) : ( + <ListPost result={post} /> + )} + </> ) : ( <GenericPost result={post} /> )}