CoolFace
Apppublic

sanket3280/code-execution

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
updateUserProgress.js84 linesDownload Raw Back to utils
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