From 1d399e7b72e0ef89a6346fe387035104ae9393ec Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 10 Oct 2025 12:56:39 -0700 Subject: [PATCH 1/5] completed activity generation --- middlewareNode/scheduler/activitiesScheduler.js | 12 +++++------- middlewareNode/server.js | 3 +++ middlewareNode/utils/activities.js | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/middlewareNode/scheduler/activitiesScheduler.js b/middlewareNode/scheduler/activitiesScheduler.js index e2dab66a..ea3b4626 100644 --- a/middlewareNode/scheduler/activitiesScheduler.js +++ b/middlewareNode/scheduler/activitiesScheduler.js @@ -15,9 +15,9 @@ async function getDb() { return cachedClient.db("ystem"); // returned cached client } -const activityScheduler = async () => { - return schedule.scheduleJob('0 0 * * *', async function () { - /*const db = await getDb(); +const activityScheduler = schedule.scheduleJob('0 0 * * *', + async function () { + const db = await getDb(); const activities = db.collection("activities"); const activitiesArray = await (activities.find({})).toArray(); for(const userActivity of activitiesArray) { @@ -27,8 +27,6 @@ const activityScheduler = async () => { { _id: id}, { $set: { activities: newActivities } } ) - }*/ + } console.log(`Resetting activities (${new Date().toLocaleString()})`); -})} - -module.exports = { activityScheduler }; \ No newline at end of file +}) diff --git a/middlewareNode/server.js b/middlewareNode/server.js index 2bbb6a5f..31f13ef8 100644 --- a/middlewareNode/server.js +++ b/middlewareNode/server.js @@ -7,6 +7,9 @@ const app = express(); const cors = require("cors"); const config = require("config"); +// Enable scheduler +require("./scheduler/activitiesScheduler.js"); + // Enable Cors app.use(cors(config.get("corsOptions"))); diff --git a/middlewareNode/utils/activities.js b/middlewareNode/utils/activities.js index 13887531..b8b674cd 100644 --- a/middlewareNode/utils/activities.js +++ b/middlewareNode/utils/activities.js @@ -26,4 +26,4 @@ const selectActivities = async () => { return newActivities; } -module.exports = selectActivities; \ No newline at end of file +module.exports = { selectActivities }; \ No newline at end of file From 122e9a86f5a57da4d824efbaabefcb862370c531 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 10 Oct 2025 15:20:12 -0700 Subject: [PATCH 2/5] updated activity document creation --- middlewareNode/models/activities.js | 2 +- middlewareNode/routes/users.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/middlewareNode/models/activities.js b/middlewareNode/models/activities.js index 182328a8..72d60273 100644 --- a/middlewareNode/models/activities.js +++ b/middlewareNode/models/activities.js @@ -29,4 +29,4 @@ const ActivitiesSchema = new Schema({ } }) -module.exports = activities = model("activities", ActivitiesSchema); \ No newline at end of file +module.exports = Activities = model("activities", ActivitiesSchema); \ No newline at end of file diff --git a/middlewareNode/routes/users.js b/middlewareNode/routes/users.js index a9408a4a..ba1e3a0a 100644 --- a/middlewareNode/routes/users.js +++ b/middlewareNode/routes/users.js @@ -4,7 +4,7 @@ const router = express.Router(); const crypto = require("crypto"); const { check, validationResult } = require("express-validator"); const users = require("../models/users"); -const activities = require("../models/activities"); +const Activities = require("../models/activities"); const { selectActivities } = require("../utils/activities"); const { ChangePasswordTemplateForUser, @@ -123,9 +123,9 @@ router.post( console.error('Error saving student: ', err); } else { - console.log(user.id); + console.log(user._id); const newActivities = await selectActivities(); - const activitiesEntry = new activities({ + const activitiesEntry = new Activities({ userId: user.id, activities: newActivities, completedDates: [], From 34214ce4568aca64714f47125d72528de8c8502e Mon Sep 17 00:00:00 2001 From: Brandon Yu Date: Sun, 12 Oct 2025 21:48:04 -0700 Subject: [PATCH 3/5] fixed error with activity generation and mongoose model schema --- middlewareNode/routes/users.js | 4 +++- middlewareNode/utils/activities.js | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/middlewareNode/routes/users.js b/middlewareNode/routes/users.js index ba1e3a0a..966b6d93 100644 --- a/middlewareNode/routes/users.js +++ b/middlewareNode/routes/users.js @@ -130,7 +130,9 @@ router.post( activities: newActivities, completedDates: [], }); - await activitiesEntry.save(); + await activitiesEntry.save(function (err, activity) { + console.error('Error creating activities for student: ', err); + }); } }); }), diff --git a/middlewareNode/utils/activities.js b/middlewareNode/utils/activities.js index b8b674cd..d0d8cdb6 100644 --- a/middlewareNode/utils/activities.js +++ b/middlewareNode/utils/activities.js @@ -16,11 +16,17 @@ async function getDb() { const selectActivities = async () => { const db = await getDb(); const activityList = await (db.collection("activityTypes").find({})).toArray(); + const chosenActivites = []; const newActivities = []; while (newActivities.length < 4) { + const activity = {}; const selectedActivity = activityList[Math.floor(Math.random() * activityList.length)]; - if(!newActivities.includes(selectedActivity._id)) { - newActivities.push(selectedActivity._id); + if(!chosenActivites.includes(selectedActivity._id)) { + chosenActivites.push(selectedActivity._id); + activity.name = selectedActivity._id; + activity.type = selectedActivity.type; + activity.completed = false; + newActivities.push(activity); } } return newActivities; From 08788be4817683455d3aca922967d68fbb21eb61 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 24 Oct 2025 13:42:18 -0700 Subject: [PATCH 4/5] added route for comparing game moves and activities --- middlewareNode/routes/activities.js | 60 +++++++++++++++++------------ 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/middlewareNode/routes/activities.js b/middlewareNode/routes/activities.js index 7c9c0f10..5cf6a6a6 100644 --- a/middlewareNode/routes/activities.js +++ b/middlewareNode/routes/activities.js @@ -17,6 +17,18 @@ async function getDb() { return cachedClient.db("ystem"); // returned cached client } +async function getUserId(db, username) { + const users = db.collection("users"); + const currentUser = await users.findOne( + { username }, + ); + if(!currentUser) { + return res.status(404).json({error: "User not found!"}); + } + const userId = currentUser._id; + return userId; +} + router.get("/", async (req, res) => { try { const db = await getDb(); @@ -24,14 +36,7 @@ router.get("/", async (req, res) => { if(!username) { return res.status(401).json({error:'Authentication required'}); } - const users = db.collection("users"); - const currentUser = await users.findOne( - { username }, - ); - if(!currentUser) { - return res.status(404).json({error: "User not found!"}); - } - const userId = currentUser._id; + const userId = getUserId(db, username); const activities = db.collection("activities"); const userActivities = await activities.findOne( { userId }, { projection: {activities: 1, _id: 0}} @@ -51,14 +56,7 @@ router.get("/dates", async (req, res) => { if(!username) { return res.status(401).json({error: "User not found"}); } - const users = db.collection("users"); - const currentUser = await users.findOne({ - username , - }); - if(!currentUser) { - return res.status(401).json({error: "User not found"}); - } - const userId = currentUser._id; + const userId = getUserId(db, username); const activities = db.collection("activities"); const completedDates = await activities.findOne( { userId }, {projection: {_id: 0, completedDates: 1}} @@ -78,14 +76,7 @@ router.put("/activity/:activityName", async (req, res) => { if(!username) { return res.status(401).json({error:'Authentication required'}); } - const users = db.collection("users"); - const currentUser = await users.findOne( - { username }, - ); - if(!currentUser) { - return res.status(404).json({error:"User not found!"}); - } - const userId = currentUser._id; + const userId = getUserId(db, username); const activities = db.collection("activities"); await activities.updateOne( { userId, "activities.name": activityName }, @@ -98,6 +89,27 @@ router.put("/activity/:activityName", async (req, res) => { } }) +router.put("/activity/check", async (req, res) => { + try { + const db = await getDb(); + const { username } = req.params; + const { moveData } = req.body; + if(!username) { + return res.status(401).json({error:'Authentication required'}); + } + const userId = getUserId(db, username); + const activities = db.collection("activities"); + const userActivities = await activities.findOne( + { userId }, { projection: {activities: 1, _id: 0}} + ); + //compare move data with activities + } + catch (err) { + console.error('Error checking move: ', err); + res.status(500).json({error: 'Server error'}); + } +}) + router.post("/activity/complete", async (req, res) => { try { const db = await getDb(); From 2bcae8461240f2e620b193eaaf36bd9ceab67ac3 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 24 Oct 2025 13:42:41 -0700 Subject: [PATCH 5/5] removed /activity/complete route for activities --- middlewareNode/routes/activities.js | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/middlewareNode/routes/activities.js b/middlewareNode/routes/activities.js index 5cf6a6a6..a767af10 100644 --- a/middlewareNode/routes/activities.js +++ b/middlewareNode/routes/activities.js @@ -110,32 +110,4 @@ router.put("/activity/check", async (req, res) => { } }) -router.post("/activity/complete", async (req, res) => { - try { - const db = await getDb(); - const { username } = req.params; - if(!username) { - return res.status(401).json({error:'Authentication required'}); - } - const users = db.collection("users"); - const currentUser = await users.findOne( - { username }, - ); - if(!currentUser) { - return res.status(404).json({error:"User not found!"}); - } - const userId = currentUser._id; - const activities = db.collection("activities"); - await activities.updateOne( - { userId }, - { $push: { lastCompleted: new Date() } } - ); - return res.status(200); - } catch (err) { - console.error('Error updating activity completion: ', err); - res.status(500).json({error: 'Server error'}); - } -}) - - module.exports = router; \ No newline at end of file