diff --git a/server/controllers/userControllers.js b/server/controllers/userControllers.js index b58020a..e665e08 100644 --- a/server/controllers/userControllers.js +++ b/server/controllers/userControllers.js @@ -61,4 +61,50 @@ userController.verifyUser = async (req, res, next) => { } }; +//adding new method updateUserScore for new feature Scoreboard +userController.updateUserScore = async (req, res, next) => { + const { bestTime, highestLevel } = req.body; + const username = req.user?.username; // provided by tokenController.verifyUserToken, or maybe use ._id? + + try { + const user = await User.findOne({ username }); + + if (!user) return res.status(404).json({ error: 'User not found' }); + + // Update only if new score is better + if (!user.bestTime || bestTime < user.bestTime) { + user.bestTime = bestTime; + } + if (!user.highestLevel || highestLevel > user.highestLevel) { + user.highestLevel = highestLevel; + } + + const updatedUser = await user.save(); + res.locals.user = updatedUser; + return next(); + } catch (err) { + return next({ + log: 'Error in updateUserScore', + status: 500, + message: { err: 'Failed to update user score' }, + }); + } +}; +// this below is for after the Dropdown Scoreboard layout is done +// userController.getScoreboard = async (req, res, next) => { +// try { +// const scoreboard = await User.find() +// .sort({ highestLevel: -1, bestTime: 1 }) +// .select('username highestLevel bestTime -_id') +// .limit(10); +// res.locals.scoreboard = scoreboard; +// return next(); +// } catch (err) { +// return next({ +// log: 'Error in getScoreboard', +// status: 500, +// message: { err: 'Failed to fetch scoreboard' }, +// }); +// } +// }; export default userController; diff --git a/server/routes/users.js b/server/routes/users.js index dbb5b71..487fca4 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -35,4 +35,18 @@ router.post( } ); +router.put( + '/updateScore', + tokenController.verifyUserToken, + userController.updateUserScore, + (_req, res) => res.status(200).json({ updatedUser: res.locals.user }) +); + +// router.get( +// '/scoreboard', +// userController.getScoreboard, +// (_req, res) => res.status(200).json(res.locals.scoreboard) +// ); + + export default router;