From f15e0b931d4fcc601a91dfeee90c2e744570f051 Mon Sep 17 00:00:00 2001 From: Jack Date: Mon, 6 Sep 2021 14:01:12 +0100 Subject: [PATCH] added little worker file to run operations on the database --- backend/worker.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 backend/worker.js diff --git a/backend/worker.js b/backend/worker.js new file mode 100644 index 000000000..b78690bea --- /dev/null +++ b/backend/worker.js @@ -0,0 +1,75 @@ +const express = require("express"); +const { config } = require("dotenv"); +const path = require("path"); +const MonkeyError = require("./handlers/error"); +config({ path: path.join(__dirname, ".env") }); + +const cors = require("cors"); +const admin = require("firebase-admin"); + +const serviceAccount = require("./credentials/serviceAccountKey.json"); +const { connectDB, mongoDB } = require("./init/mongodb"); + +const PORT = process.env.PORT || 5005; + +async function main() { + await connectDB(); + await admin.initializeApp({ + credential: admin.credential.cert(serviceAccount), + }); + console.log("Database Connected"); + refactor(); +} + +main(); + +async function refactor() { + console.log("getting all users"); + let users = await mongoDB().collection("users").find({}).toArray(); + console.log(users.length); + for (let user of users) { + let obj = user.personalBests; + + lbPb = { + time: { + 15: {}, + 60: {}, + }, + }; + let bestForEveryLanguage = {}; + if (obj?.time?.[15]) { + obj.time[15].forEach((pb) => { + if (!bestForEveryLanguage[pb.language]) { + bestForEveryLanguage[pb.language] = pb; + } else { + if (bestForEveryLanguage[pb.language].wpm < pb.wpm) { + bestForEveryLanguage[pb.language] = pb; + } + } + }); + Object.keys(bestForEveryLanguage).forEach((key) => { + lbPb.time[15][key] = bestForEveryLanguage[key]; + }); + bestForEveryLanguage = {}; + } + if (obj?.time?.[60]) { + obj.time[60].forEach((pb) => { + if (!bestForEveryLanguage[pb.language]) { + bestForEveryLanguage[pb.language] = pb; + } else { + if (bestForEveryLanguage[pb.language].wpm < pb.wpm) { + bestForEveryLanguage[pb.language] = pb; + } + } + }); + Object.keys(bestForEveryLanguage).forEach((key) => { + lbPb.time[60][key] = bestForEveryLanguage[key]; + }); + } + + await mongoDB() + .collection("users") + .updateOne({ _id: user._id }, { $set: { lbPersonalBests: lbPb } }); + console.log(`updated ${user.name}`); + } +}