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/activities.js b/middlewareNode/routes/activities.js index 7c9c0f10..a767af10 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,32 +89,25 @@ router.put("/activity/:activityName", async (req, res) => { } }) -router.post("/activity/complete", 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 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 }, - { $push: { lastCompleted: new Date() } } + const userActivities = await activities.findOne( + { userId }, { projection: {activities: 1, _id: 0}} ); - return res.status(200); - } catch (err) { - console.error('Error updating activity completion: ', err); + //compare move data with activities + } + catch (err) { + console.error('Error checking move: ', err); res.status(500).json({error: 'Server error'}); } }) - module.exports = router; \ No newline at end of file diff --git a/middlewareNode/routes/users.js b/middlewareNode/routes/users.js index a9408a4a..966b6d93 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,14 +123,16 @@ 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: [], }); - await activitiesEntry.save(); + await activitiesEntry.save(function (err, activity) { + console.error('Error creating activities for student: ', err); + }); } }); }), 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 de0097c8..6235ace4 100644 --- a/middlewareNode/server.js +++ b/middlewareNode/server.js @@ -8,6 +8,9 @@ const cors = require("cors"); const config = require("config"); const streakRoutes = require('./routes/streak'); +// 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..d0d8cdb6 100644 --- a/middlewareNode/utils/activities.js +++ b/middlewareNode/utils/activities.js @@ -16,14 +16,20 @@ 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; } -module.exports = selectActivities; \ No newline at end of file +module.exports = { selectActivities }; \ No newline at end of file