Skip to content

Commit 86dd4c9

Browse files
authored
Merge pull request #131 from YuStudy-Inc/user-online-status
Better check for if user is online
2 parents 6f247dc + d328ef6 commit 86dd4c9

File tree

7 files changed

+40
-241
lines changed

7 files changed

+40
-241
lines changed

Backend/controllers/userController.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,20 @@ const passwordMatch = (async(passwordFromUser, savedPasswordFromDB) => {
1717
return await bcrypt.compare(passwordFromUser, savedPasswordFromDB)
1818
})
1919

20-
const changeActiveStatus = (async (user) => {
21-
const active = user.isOnline;
22-
return await User.findOneAndUpdate({ username: user.username }, { isOnline: !active })
23-
})
20+
// const changeActiveStatus = (async (user) => {
21+
// const active = user.isOnline;
22+
// return await User.findOneAndUpdate({ username: user.username }, { isOnline: !active })
23+
// })
2424

2525
export const getUser = async(req, res) => {
2626
try {
2727
const userId = req.session.userID;
2828

2929
const user = await User.findById(userId);
30-
3130
if(!user) {
3231
return res.status(404).json({ error: "User not found" });
3332
}
34-
33+
// console.log(user);
3534
return res.status(200).json({
3635
message: "User found",
3736
user: user
@@ -114,7 +113,7 @@ export const loginUser = async(req, res) => {
114113
if (!passwordValidated)
115114
return res.status(400).json({ message: "Invalid Password" })
116115

117-
await changeActiveStatus(user)
116+
// await changeActiveStatus(user)
118117

119118
req.session.userID = user._id;
120119

@@ -258,7 +257,13 @@ export const getActiveFriends = async(req, res) => {
258257
try {
259258
const userId = req.params.id
260259
const user = await User.findOne({_id: userId }).populate("friendsList");
261-
const friends = user.friendsList.filter(friend => friend.isOnline === true);
260+
// const friends = user.friendsList.filter(friend => friend.isOnline === true);
261+
console.log(user.friendsList.length)
262+
console.log("Current date: " + Date.now());
263+
// user.friendsList.filter(friend => console.log(friend.lastSeen + " < " + (Date.now() - 1000 * 60 * 2)));
264+
265+
const friends = user.friendsList.filter(friend => friend.lastSeen > Date.now() - 1000 * 60 * 2); // Check if friend was online less than 2 min ago
266+
262267
res.status(200).json({friends})
263268
} catch (e) {
264269
res.status(500).json({error: 'Error retreiving active friends'})

Backend/index.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import express from 'express'
66
import bodyParser from 'body-parser'
77
import cors from 'cors'
88
import serverless from 'serverless-http';
9+
import User from './schemas/User.js'
910
//import mongoose from 'mongoose';
1011
//import path from 'path';
1112
//import { fileURLToPath } from 'url';
@@ -42,8 +43,6 @@ app.use(bodyParser.urlencoded({ extended: true }))
4243

4344
const tempClient = await DatabaseConnection(); // Ensure DatabaseConnection is an async function that connects to MongoDB
4445

45-
// dotenv.config();
46-
4746
const sessionStore = MongoStore.create({
4847
mongoUrl: process.env.MONGODB_URI,
4948
collectionName: "sessions"
@@ -61,6 +60,25 @@ app.use(session({
6160
}
6261
}));
6362

63+
app.use(async (req, res, next) => {
64+
let userId = "";
65+
if(req.session && req.session.userID) {
66+
userId = req.session.userID;
67+
}
68+
else if (req.params.id) {
69+
userId = req.params.id;
70+
}
71+
72+
if(userId != "") {
73+
await User.findOneAndUpdate(
74+
{ _id: userId },
75+
{ $set: { lastSeen: Date.now() } },
76+
{ new: true } // returns updated user object
77+
);
78+
}
79+
next();
80+
})
81+
6482
app.use("/users", userRoutes)
6583
app.use("/quizzes", quizRoutes)
6684
app.use("/questions", questionRoutes)

Backend/schemas/User.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ const UserSchema = new Schema({
1818
type: String,
1919
required: true
2020
},
21-
isOnline: {
22-
type: Boolean,
23-
default: false
21+
lastSeen: {
22+
type: Number,
23+
default: 0
2424
},
2525
pfp: {
2626
type: String,

Frontend/.env.development

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
VITE_APP_URI=https://00qy8vpnab.execute-api.us-east-1.amazonaws.com/
1+
# VITE_APP_URI=https://00qy8vpnab.execute-api.us-east-1.amazonaws.com/
2+
VITE_APP_URI=http://localhost:3000/
23
VITE_GAME_URI=https://quizslayergame.s3.us-east-1.amazonaws.com/QuizSlayerBuild/index.html?sessionId

Frontend/src/Components/Home/FriendsActive.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const FriendsActive = ({ className= "" }) => {
2727
}
2828
}
2929
fetchActiveFriends()
30-
}, [URI, userId])
30+
}, [])
3131

3232

3333
return (

Frontend/src/Pages/MainMenu/Home.jsx

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -20,43 +20,6 @@ const Home = () => {
2020

2121
const navigate = useNavigate()
2222

23-
useEffect(() => {
24-
const getUser = async () => {
25-
try {
26-
const response = await axios.get(`${URI}users/getUser/${userId}`, {
27-
withCredentials: true
28-
})
29-
if (response.status === 200) {
30-
setUserCharacter(response.data.user.selectedCharacter)
31-
setUserWeapon(response.data.user.selectedWeapon)
32-
setUserHat(response.data.user.selectedHat)
33-
setUserPfp(response.data.user.pfp)
34-
}
35-
}
36-
catch (e) {
37-
console.log(e)
38-
}
39-
}
40-
getUser()
41-
}, [URI, userId])
42-
// useEffect(() => {
43-
// const getUser = async () => {
44-
// try {
45-
// const user = await axios.get(`${URI}users/getUser/${userId}`, {
46-
// withCredentials: true
47-
// })
48-
// setUserCharacter(user.data.selectedCharacter)
49-
// setUserWeapon(user.data.selectedWeapon)
50-
// setUserHat(user.data.selectedHat)
51-
// setUserPfp(user.data.pfp)
52-
// }
53-
// catch (e) {
54-
// console.log(e)
55-
// }
56-
// }
57-
// getUser()
58-
// }, [URI, userId])
59-
6023
return(
6124
<>
6225
{/* <Alert text="Ready to Begin" buttonOneText="no" functionButtonOne={() => {}} buttonTwoText="yes" functionButtonTwo={() => {}}/> */}

Frontend/src/UserData.js

Lines changed: 1 addition & 189 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,10 @@
11
const UserData = (() => {
2-
// let userDataCookie = document.cookie
3-
// .split('; ')
4-
// .find(row => row.startsWith('userData='));
5-
62
let userData;
73

8-
// if (userDataCookie) {
9-
// userData = JSON.parse(decodeURIComponent(userDataCookie.split('=')[1]));
10-
// } else {
11-
// console.log('User data cookie not found');
12-
// }
13-
144
const updateUserData = (user) => {
155
localStorage.setItem('user', JSON.stringify(user));
166
localStorage.setItem('id', JSON.stringify(user._id));
177
userData = user;
18-
// userDataCookie = document.cookie
19-
// .split('; ')
20-
// .find(row => row.startsWith('userData='));
21-
// if (userDataCookie) {
22-
// userData = JSON.parse(decodeURIComponent(userDataCookie.split('=')[1]));
23-
// } else {
24-
// console.log('User data cookie not found');
25-
// }
268
};
279

2810
const loadUserData = () => {
@@ -31,12 +13,6 @@ const UserData = (() => {
3113
}
3214

3315

34-
// const getUsername = () => {
35-
// if (!userData) {
36-
// loadUserData();
37-
// }
38-
// return userData?.username;
39-
// };
4016
const createGetter = (key) => {
4117
return () => {
4218
if (!userData) {
@@ -49,6 +25,7 @@ const createGetter = (key) => {
4925
const getEmail = createGetter("email");
5026
const getPassword = createGetter("password");
5127
const getIsOnline = createGetter("isOnline");
28+
const getLastSeen = createGetter("lastSeen");
5229
const getUsername = createGetter("username")
5330
const getPfp = createGetter("pfp");
5431
const getDescription = createGetter("description");
@@ -63,171 +40,6 @@ const getXp = createGetter("xp");
6340
const getCoins = createGetter("coins");
6441
const getMonstersSlain = createGetter("monstersSlain");
6542

66-
// const getEmail = () => {
67-
// return userData?.email;
68-
// };
69-
70-
// const getPassword = () => {
71-
// return userData?.password;
72-
// };
73-
74-
// const getIsOnline = () => {
75-
// return userData?.isOnline;
76-
// };
77-
78-
// const getPfp = () => {
79-
// return userData?.pfp;
80-
// };
81-
82-
// const getDescription = () => {
83-
// return userData?.description;
84-
// };
85-
86-
// const getFriendsList = () => {
87-
// return userData?.friendsList;
88-
// };
89-
90-
// const getFriendRequests = () => {
91-
// return userData?.friendRequests;
92-
// };
93-
94-
// const getInventory = () => {
95-
// return userData?.inventory;
96-
// };
97-
98-
// const getCharacterList = () => {
99-
// return userData?.characterList;
100-
// };
101-
102-
// const getSelectedCharacter = () => {
103-
// return userData?.selectedCharacter;
104-
// };
105-
106-
// const getSelectedHat = () => {
107-
// return userData?.selectedHat;
108-
// };
109-
110-
// const getSelectedWeapon = () => {
111-
// return userData?.selectedWeapon;
112-
// };
113-
114-
// const getXp = () => {
115-
// return userData?.xp;
116-
// };
117-
118-
// const getCoins = () => {
119-
// return userData?.coins;
120-
// };
121-
122-
// const getMonstersSlain = () => {
123-
// return userData?.monstersSlain;
124-
// };
125-
126-
127-
// const getUsername = () => {
128-
// return userData?.username;
129-
// };
130-
// const setUsername = (value) => {
131-
// if (userData) userData.username = value;
132-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
133-
// };
134-
135-
// const getPfp = () => {
136-
// return userData?.pfp;
137-
// };
138-
// const setPfp = (value) => {
139-
// if (userData) userData.pfp = value;
140-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
141-
// };
142-
143-
// const getDescription = () => {
144-
// return userData?.description;
145-
// };
146-
// const setDescription = (value) => {
147-
// if (userData) userData.description = value;
148-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
149-
// };
150-
151-
// const getFriendsList = () => {
152-
// return userData?.friendsList;
153-
// };
154-
// const setFriendsList = (value) => {
155-
// if (userData) userData.friendsList = value;
156-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
157-
// };
158-
159-
// const getFriendRequests = () => {
160-
// return userData?.friendRequests;
161-
// };
162-
// const setFriendRequests = (value) => {
163-
// if (userData) userData.friendRequests = value;
164-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
165-
// };
166-
167-
// const getInventory = () => {
168-
// return userData?.inventory;
169-
// };
170-
// const setInventory = (value) => {
171-
// if (userData) userData.inventory = value;
172-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
173-
// };
174-
175-
// const getCharacterList = () => {
176-
// return userData?.characterList;
177-
// };
178-
// const setCharacterList = (value) => {
179-
// if (userData) userData.characterList = value;
180-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
181-
// };
182-
183-
// const getSelectedCharacter = () => {
184-
// return userData?.selectedCharacter;
185-
// };
186-
// const setSelectedCharacter = (value) => {
187-
// if (userData) userData.selectedCharacter = value;
188-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
189-
// };
190-
191-
// const getSelectedHat = () => {
192-
// return userData?.selectedHat;
193-
// };
194-
// const setSelectedHat = (value) => {
195-
// if (userData) userData.selectedHat = value;
196-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
197-
// };
198-
199-
// const getSelectedWeapon = () => {
200-
// return userData?.selectedWeapon;
201-
// };
202-
// const setSelectedWeapon = (value) => {
203-
// if (userData) userData.selectedWeapon = value;
204-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
205-
// };
206-
207-
// const getXp = () => {
208-
// return userData?.xp;
209-
// };
210-
// const setXp = (value) => {
211-
// if (userData) userData.xp = value;
212-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
213-
// };
214-
215-
// const getCoins = () => {
216-
// return userData?.coins;
217-
// };
218-
// const setCoins = (value) => {
219-
// if (userData) userData.coins = value;
220-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
221-
// };
222-
223-
// const getMonstersSlain = () => {
224-
// return userData?.monstersSlain;
225-
// };
226-
// const setMonstersSlain = (value) => {
227-
// if (userData) userData.monstersSlain = value;
228-
// document.cookie = `userData=${encodeURIComponent(JSON.stringify(userData))}`;
229-
// };
230-
23143
return {
23244
updateUserData,
23345
getUsername,

0 commit comments

Comments
 (0)