From e3aa496ad9c7013affb7bea8dd432fe530c8d375 Mon Sep 17 00:00:00 2001 From: Miodec Date: Sat, 5 Jun 2021 20:10:52 +0100 Subject: [PATCH 1/6] typo --- backend/migrate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/migrate.js b/backend/migrate.js index 45248201c..4780f53ab 100644 --- a/backend/migrate.js +++ b/backend/migrate.js @@ -88,7 +88,7 @@ db.collection("bot-commands") .get() .then((botCommandsSnapshot) => { botCommandsSnapshot.forEach((bcDoc) => { - let newBotCommand = new BotCommand(botCommandDoc); + let newBotCommand = new BotCommand(bcDoc); newBotCommand.save(); }); }); From 82f696c2a48c1a362a25009371806c492d0ee4d4 Mon Sep 17 00:00:00 2001 From: Miodec Date: Sat, 5 Jun 2021 20:15:35 +0100 Subject: [PATCH 2/6] need to get data --- backend/migrate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/migrate.js b/backend/migrate.js index 4780f53ab..b7e13940c 100644 --- a/backend/migrate.js +++ b/backend/migrate.js @@ -78,7 +78,7 @@ db.collection("leaderboards") .get() .then((leaderboardsSnapshot) => { leaderboardsSnapshot.forEach((lbDoc) => { - let newLb = new Leaderboard(lbDoc); + let newLb = new Leaderboard(lbDoc.data()); newLb.save(); }); }); @@ -88,7 +88,7 @@ db.collection("bot-commands") .get() .then((botCommandsSnapshot) => { botCommandsSnapshot.forEach((bcDoc) => { - let newBotCommand = new BotCommand(bcDoc); + let newBotCommand = new BotCommand(bcDoc.data()); newBotCommand.save(); }); }); From 6ff1c1693c5a01ee764a44e81e58395d4435be7d Mon Sep 17 00:00:00 2001 From: Miodec Date: Sat, 5 Jun 2021 20:21:37 +0100 Subject: [PATCH 3/6] some very old lb entries will have no consistency, or have a '-' --- backend/models/leaderboard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/models/leaderboard.js b/backend/models/leaderboard.js index edcecca8d..5c4694bef 100644 --- a/backend/models/leaderboard.js +++ b/backend/models/leaderboard.js @@ -6,7 +6,7 @@ const leaderboardEntrySchema = new Schema({ wpm: { type: Number }, raw: { type: Number }, acc: { type: Number }, - consistency: { type: Number }, //can be null + consistency: { type: {} }, //can be null mode: { type: String }, //not sure why mode and mode2 are needed mode2: { type: Number }, timestamp: { type: Date }, From 697b23f1be00b7bdc6090653105ad204658d93df Mon Sep 17 00:00:00 2001 From: Miodec Date: Sat, 5 Jun 2021 20:21:48 +0100 Subject: [PATCH 4/6] npm i --- functions/package-lock.json | 2 ++ package-lock.json | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/functions/package-lock.json b/functions/package-lock.json index e4984d612..b845ed32c 100644 --- a/functions/package-lock.json +++ b/functions/package-lock.json @@ -1500,6 +1500,8 @@ "dependencies": { "@firebase/database": "^0.10.0", "@firebase/database-types": "^0.7.2", + "@google-cloud/firestore": "^4.5.0", + "@google-cloud/storage": "^5.3.0", "@types/node": ">=12.12.47", "dicer": "^0.3.0", "jsonwebtoken": "^8.5.1", diff --git a/package-lock.json b/package-lock.json index c5431c22a..fd0215d35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "monkeytype", "version": "1.5.6", "hasInstallScript": true, "license": "GPL-3.0", @@ -3355,6 +3354,7 @@ "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", + "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -5710,6 +5710,8 @@ "dependencies": { "@firebase/database": "^0.10.0", "@firebase/database-types": "^0.7.2", + "@google-cloud/firestore": "^4.5.0", + "@google-cloud/storage": "^5.3.0", "@types/node": ">=12.12.47", "dicer": "^0.3.0", "jsonwebtoken": "^8.5.1", @@ -6344,6 +6346,7 @@ "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", + "fsevents": "^1.2.7", "glob-parent": "^3.1.0", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", @@ -9341,7 +9344,8 @@ "bson": "^1.1.4", "denque": "^1.4.1", "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2" + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" }, "engines": { "node": ">=4" From 69383a0cc3857b7b34adcac3d6dbff23ed7b443c Mon Sep 17 00:00:00 2001 From: Miodec Date: Sat, 5 Jun 2021 20:39:07 +0100 Subject: [PATCH 5/6] result schema update --- backend/models/subschemas/result.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/models/subschemas/result.js b/backend/models/subschemas/result.js index 7f08c91b7..b27ade83f 100644 --- a/backend/models/subschemas/result.js +++ b/backend/models/subschemas/result.js @@ -9,8 +9,8 @@ const resultSchema = new Schema({ allChars: { type: Number, required: true }, acc: { type: Number, required: true }, mode: { type: String, required: true }, //is this always string type? - mode2: { type: Number, required: true }, //is this always number type? - quoteLength: { type: Number, required: true }, + mode2: { type: String, required: true }, //is this always number type? not always + quoteLength: { type: Number, required: false }, timestamp: { type: Number, required: true }, //can this be removed if timestamps are added to mongoose language: { type: String, default: "english" }, restartCount: { type: Number, required: true }, From 89cd5adb0f6c8d6769d678d1b3b0f096e0ccab65 Mon Sep 17 00:00:00 2001 From: Miodec Date: Sat, 5 Jun 2021 20:56:55 +0100 Subject: [PATCH 6/6] more logs to see whats going on --- backend/migrate.js | 91 +++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/backend/migrate.js b/backend/migrate.js index b7e13940c..05a9d086e 100644 --- a/backend/migrate.js +++ b/backend/migrate.js @@ -24,53 +24,60 @@ mongoose.connect("mongodb://localhost:27017/monkeytype", { // Migrate users userCount = 1; db.collection("users") + // .where("name","==","mio") .get() .then((querySnapshot) => { + // console.log('start of foreach'); querySnapshot.forEach((userDoc) => { - let newUser = new User(userDoc.data()); - newUser.uid = userDoc.id; - newUser.globalStats = { - started: userDoc.data().startedTests, - completed: userDoc.data().completedTests, - time: userDoc.data().timeTyping, - }; - let tagIdDict = {}; - db.collection(`users/${userDoc.id}/tags`) - .get() - .then((tagsSnapshot) => { - tagsSnapshot.forEach((tagDoc) => { - let formattedTag = tagDoc.data(); - formattedTag._id = mongoose.Types.ObjectId(); //generate new objectId - tagIdDict[tagDoc.id] = formattedTag._id; //save pair of ids in memory to determine what to set new id as in result tags - newUser.tags.push(formattedTag); - }); - db.collection(`users/${userDoc.id}/results`) - .get() - .then((resultsSnapshot) => { - resultsSnapshot.forEach((result) => { - let formattedResult = result.data(); - formattedResult.tags.forEach((tag, index) => { - if (tagIdDict[tag]) - formattedResult.tags[index] = tagIdDict[tag]; - }); - newUser.results.push(formattedResult); - }); - newUser.results.sort((a, b) => { - return a.timestamp - b.timestamp; - }); - db.collection(`users/${userDoc.id}/presets`) - .get() - .then((presetsSnapshot) => { - presetsSnapshot.forEach((preset) => { - newUser.presets.push(preset.data()); - }); - newUser.save(); - console.log("User", userCount, "saved"); - userCount++; - }); + let newUser = new User(userDoc.data()); + newUser.uid = userDoc.id; + newUser.globalStats = { + started: userDoc.data().startedTests, + completed: userDoc.data().completedTests, + time: userDoc.data().timeTyping, + }; + let tagIdDict = {}; + db.collection(`users/${userDoc.id}/tags`) + .get() + .then((tagsSnapshot) => { + tagsSnapshot.forEach((tagDoc) => { + let formattedTag = tagDoc.data(); + formattedTag._id = mongoose.Types.ObjectId(); //generate new objectId + tagIdDict[tagDoc.id] = formattedTag._id; //save pair of ids in memory to determine what to set new id as in result tags + newUser.tags.push(formattedTag); + console.log(`Tag ${tagDoc.id} saved for user ${userCount}`); }); - }); + db.collection(`users/${userDoc.id}/results`) + .get() + .then((resultsSnapshot) => { + let resCount = 1; + resultsSnapshot.forEach((result) => { + let formattedResult = result.data(); + formattedResult.tags.forEach((tag, index) => { + if (tagIdDict[tag]) + formattedResult.tags[index] = tagIdDict[tag]; + }); + newUser.results.push(formattedResult); + console.log(`Result ${resCount} saved for user ${userCount}`); + resCount++; + }); + newUser.results.sort((a, b) => { + return a.timestamp - b.timestamp; + }); + db.collection(`users/${userDoc.id}/presets`) + .get() + .then((presetsSnapshot) => { + presetsSnapshot.forEach((preset) => { + newUser.presets.push(preset.data()); + }); + newUser.save(); + console.log(`User ${userCount} (${newUser.uid}) saved`); + userCount++; + }); + }); + }); }); + // console.log('end of foreach'); }); //not tested because I can't get leaderboards to work on my fork for some reason