sanket3280/code-execution
0
1const User = require('../models/User');2const Problem = require('../models/Problem');3 4/**5 * Update user's progress when they solve a problem6 * @param {String} userId - User ID7 * @param {String} problemId - Problem ID8 * @returns {Promise<Boolean>} - Returns true if problem was newly solved9 */10async function markProblemAsSolved(userId, problemId) {11 try {12 const user = await User.findById(userId);13 if (!user) {14 console.error('User not found:', userId);15 return false;16 }17 18 // Check if problem is already in solved list19 const problemIdStr = problemId.toString();20 const alreadySolved = user.solvedProblems.some(21 id => id.toString() === problemIdStr22 );23 24 if (alreadySolved) {25 console.log(`Problem ${problemId} already solved by user ${userId}`);26 return false;27 }28 29 // Add problem to solved list and increment counter30 user.solvedProblems.push(problemId);31 user.problemsSolved = user.solvedProblems.length;32 33 await user.save();34 35 console.log(`✅ User ${userId} solved problem ${problemId}. Total solved: ${user.problemsSolved}`);36 return true;37 } catch (error) {38 console.error('Error marking problem as solved:', error);39 return false;40 }41}42 43/**44 * Check if user has solved a specific problem45 * @param {String} userId - User ID46 * @param {String} problemId - Problem ID47 * @returns {Promise<Boolean>}48 */49async function hasUserSolvedProblem(userId, problemId) {50 try {51 const user = await User.findById(userId).select('solvedProblems');52 if (!user) return false;53 54 const problemIdStr = problemId.toString();55 return user.solvedProblems.some(id => id.toString() === problemIdStr);56 } catch (error) {57 console.error('Error checking if problem is solved:', error);58 return false;59 }60}61 62/**63 * Get user's solved problems list64 * @param {String} userId - User ID65 * @returns {Promise<Array>}66 */67async function getUserSolvedProblems(userId) {68 try {69 const user = await User.findById(userId).select('solvedProblems');70 if (!user) return [];71 72 return user.solvedProblems.map(id => id.toString());73 } catch (error) {74 console.error('Error getting user solved problems:', error);75 return [];76 }77}78 79module.exports = {80 markProblemAsSolved,81 hasUserSolvedProblem,82 getUserSolvedProblems83};84 