From 108afc76f7c2413fab99ef66371516c49b63c52c Mon Sep 17 00:00:00 2001 From: Brandon Yu Date: Thu, 22 Jan 2026 21:35:52 -0800 Subject: [PATCH 1/4] extracted logic for activity completion --- chessServer/src/api/completeActivity.js | 24 +++++++++++++++++++++++ chessServer/src/managers/EventHandlers.js | 19 ++++-------------- middlewareNode/src/routes/activities.js | 2 +- 3 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 chessServer/src/api/completeActivity.js diff --git a/chessServer/src/api/completeActivity.js b/chessServer/src/api/completeActivity.js new file mode 100644 index 00000000..3a660bbc --- /dev/null +++ b/chessServer/src/api/completeActivity.js @@ -0,0 +1,24 @@ +/** + * Helper function to send API requests to complete activities + * @param {username} - Username for student whose activity is completed + * @param {credentials} - User's cookie + * @param {activityName} - Name of the activity being completed + * + * activityTypes collection contains list of activities + */ +module.exports = completeActivity = async (username, credentials, activityName) => { + const response = await fetch(`${process.env.MIDDLEWARE_URL}/activities/${username}/activity`, { + method: "PUT", + headers: { + 'Content-Type': 'application/json', + 'Authentication' : `Bearer ${credentials}`, + }, + body: JSON.stringify({ + activityName: activityName, + }) + }); + if(!response.ok) { + throw Error('Could not submit completed activity to database'); + } + return response; +} \ No newline at end of file diff --git a/chessServer/src/managers/EventHandlers.js b/chessServer/src/managers/EventHandlers.js index e2d1f19e..9b53638e 100644 --- a/chessServer/src/managers/EventHandlers.js +++ b/chessServer/src/managers/EventHandlers.js @@ -1,4 +1,5 @@ const GameManager = require("./GameManager"); +const completeActivity = require("../api/completeActivity"); const gameManager = new GameManager(); @@ -45,14 +46,12 @@ const registerSocketHandlers = (socket, io) => { socket.on("newPuzzle", (msg) => { try { const parsed = JSON.parse(msg); - console.log('data',parsed, msg); // create the new puzzle gameManager.createOrJoinPuzzle({ student: parsed.student, mentor: parsed.mentor, role: parsed.role, socketId: socket.id, - credentials: parsed.credentials, }, io); } catch (err) { @@ -82,22 +81,12 @@ const registerSocketHandlers = (socket, io) => { }; console.log('Payload', payload); const studentSocket = io.sockets.sockets.get(studentId); - //console.log('student socket', studentSocket); if (studentSocket) { try { - console.log('route:', `${process.env.MIDDLEWARE_URL}/activities/${username}/activity`); - const response = await fetch(`${process.env.MIDDLEWARE_URL}/activities/${username}/activity`, { - method: "PUT", - headers: { - 'Content-Type': 'application/json', - 'Authentication' : `Bearer ${credentials}`, - }, - body: JSON.stringify({ - activityName: payload.activities[0].name, - }) - }); + const activityName = payload.activities[0].name; + const response = await completeActivity(username, credentials, activityName); console.log('response',response); - socket.emit("completeActivity"); + //socket.emit("completeActivity"); } catch (e) { console.log('Error: ', e); } diff --git a/middlewareNode/src/routes/activities.js b/middlewareNode/src/routes/activities.js index 9310a029..233e8e0b 100644 --- a/middlewareNode/src/routes/activities.js +++ b/middlewareNode/src/routes/activities.js @@ -108,7 +108,7 @@ router.put("/:username/activity", async (req, res) => { { activities: {$elemMatch: { name: activityName }}, _id:0}, ); if(activityIncomplete) { - console.log('incomplete activity: ', activityName); + console.log(username + ' completed: ', activityName, (new Date())); } await activities.updateOne( { userId, "activities.name": activityName }, From 6aa5a61656d7055a85d31fc81b60ef10b1a9e9d4 Mon Sep 17 00:00:00 2001 From: yubrandon <113136838+yubrandon@users.noreply.github.com> Date: Fri, 23 Jan 2026 08:06:34 -0800 Subject: [PATCH 2/4] Update activities logging --- middlewareNode/src/routes/activities.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middlewareNode/src/routes/activities.js b/middlewareNode/src/routes/activities.js index 233e8e0b..aaea33ff 100644 --- a/middlewareNode/src/routes/activities.js +++ b/middlewareNode/src/routes/activities.js @@ -108,7 +108,7 @@ router.put("/:username/activity", async (req, res) => { { activities: {$elemMatch: { name: activityName }}, _id:0}, ); if(activityIncomplete) { - console.log(username + ' completed: ', activityName, (new Date())); + console.log(username + ' submitted: ', activityName, (new Date())); } await activities.updateOne( { userId, "activities.name": activityName }, From a9f5f3f1d410f0b7d6db56a32fc1e76b16968891 Mon Sep 17 00:00:00 2001 From: yubrandon <113136838+yubrandon@users.noreply.github.com> Date: Wed, 4 Feb 2026 21:26:30 -0800 Subject: [PATCH 3/4] Added conditional logic for query --- middlewareNode/src/routes/activities.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/middlewareNode/src/routes/activities.js b/middlewareNode/src/routes/activities.js index aaea33ff..d26b3a82 100644 --- a/middlewareNode/src/routes/activities.js +++ b/middlewareNode/src/routes/activities.js @@ -108,12 +108,13 @@ router.put("/:username/activity", async (req, res) => { { activities: {$elemMatch: { name: activityName }}, _id:0}, ); if(activityIncomplete) { - console.log(username + ' submitted: ', activityName, (new Date())); + console.log(username, 'submitted activity:', activityName, new Date()); + await activities.updateOne( + { userId, "activities.name": activityName }, + { $set: { "activities.$.completed": true } } + ); } - await activities.updateOne( - { userId, "activities.name": activityName }, - { $set: { "activities.$.completed": true } } - ); + return res.status(200).json({message:'success'}); } catch (err) { console.error('Error updating activities: ', err); @@ -122,4 +123,4 @@ router.put("/:username/activity", async (req, res) => { }) -module.exports = router; \ No newline at end of file +module.exports = router; From 9c9f64a866d5067bcf382917beb475353ad7fca8 Mon Sep 17 00:00:00 2001 From: yubrandon <113136838+yubrandon@users.noreply.github.com> Date: Wed, 4 Feb 2026 21:53:35 -0800 Subject: [PATCH 4/4] Added check for full activity completion --- middlewareNode/src/routes/activities.js | 30 ++++++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/middlewareNode/src/routes/activities.js b/middlewareNode/src/routes/activities.js index d26b3a82..4ab1c395 100644 --- a/middlewareNode/src/routes/activities.js +++ b/middlewareNode/src/routes/activities.js @@ -108,13 +108,31 @@ router.put("/:username/activity", async (req, res) => { { activities: {$elemMatch: { name: activityName }}, _id:0}, ); if(activityIncomplete) { - console.log(username, 'submitted activity:', activityName, new Date()); - await activities.updateOne( - { userId, "activities.name": activityName }, - { $set: { "activities.$.completed": true } } - ); + console.log(username, 'submitted activity:', activityName, new Date()); + await activities.updateOne( + { userId, "activities.name": activityName }, + { $set: { "activities.$.completed": true } } + ); + const completionCheck = await activities.findOne( + { userId }, + { activities: {$elemMatch: { name: activityName }}, _id:0}, + ); + console.log('checking completion',completionCheck.activities); + let activitiesCompleted = true; + for(activity of completionCheck.activities) { + if(!activity.completed) { + activitiesCompleted = false; + } + } + if(activitiesCompleted) { + console.log(username, 'completed all activities', new Date()); + await activities.updateOne( + { userId }, + { $push: { lastCompleted: new Date() } } + ); + } } - + return res.status(200).json({message:'success'}); } catch (err) { console.error('Error updating activities: ', err);