mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-08 22:50:00 +08:00
more index cleaning
This commit is contained in:
parent
3f5af730d4
commit
db042db540
4 changed files with 303 additions and 303 deletions
|
@ -499,6 +499,14 @@ app.get("/api/fetchSnapshot", authenticateToken, (req, res) => {
|
|||
});
|
||||
});
|
||||
|
||||
function stdDev(array) {
|
||||
const n = array.length;
|
||||
const mean = array.reduce((a, b) => a + b) / n;
|
||||
return Math.sqrt(
|
||||
array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n
|
||||
);
|
||||
}
|
||||
|
||||
app.post("/api/testCompleted", authenticateToken, (req, res) => {
|
||||
//return createdId
|
||||
//return user data
|
||||
|
|
|
@ -18,94 +18,6 @@ const db = admin.firestore();
|
|||
const auth = admin.auth();
|
||||
const fetch = require("node-fetch");
|
||||
|
||||
async function getAllNames() {
|
||||
// return admin
|
||||
// .auth()
|
||||
// .listUsers()
|
||||
// .then((data) => {
|
||||
// let names = [];
|
||||
// data.users.forEach((user) => {
|
||||
// names.push(user.displayName);
|
||||
// });
|
||||
// return names;
|
||||
// });
|
||||
|
||||
let ret = [];
|
||||
|
||||
async function getAll(nextPageToken) {
|
||||
// List batch of users, 1000 at a time.
|
||||
let listUsersResult = await admin.auth().listUsers(1000, nextPageToken);
|
||||
for (let i = 0; i < listUsersResult.users.length; i++) {
|
||||
ret.push(listUsersResult.users[i].displayName);
|
||||
}
|
||||
if (listUsersResult.pageToken) {
|
||||
// List next batch of users.
|
||||
await getAll(listUsersResult.pageToken);
|
||||
}
|
||||
}
|
||||
|
||||
await getAll();
|
||||
return ret;
|
||||
}
|
||||
|
||||
async function getAllUsers() {
|
||||
// return admin
|
||||
// .auth()
|
||||
// .listUsers()
|
||||
// .then((data) => {
|
||||
// let names = [];
|
||||
// data.users.forEach((user) => {
|
||||
// names.push(user.displayName);
|
||||
// });
|
||||
// return names;
|
||||
// });
|
||||
|
||||
let ret = [];
|
||||
|
||||
async function getAll(nextPageToken) {
|
||||
// List batch of users, 1000 at a time.
|
||||
let listUsersResult = await auth.listUsers(1000, nextPageToken);
|
||||
for (let i = 0; i < listUsersResult.users.length; i++) {
|
||||
let loopuser = listUsersResult.users[i];
|
||||
|
||||
//if custom claim is undefined check, if its true then ignore
|
||||
|
||||
// if (loopuser === undefined || loopuser.customClaims === undefined || loopuser.customClaims['nameChecked'] === undefined) {
|
||||
ret.push(listUsersResult.users[i]);
|
||||
// }
|
||||
|
||||
// console.log(loopuser.customClaims['asd']);
|
||||
|
||||
// let userdata = await db.collection('users').doc(listUsersResult.users[i].uid).get();
|
||||
|
||||
// let data = userdata.data();
|
||||
|
||||
// if (data === undefined || data.needsToChangeName === undefined) {
|
||||
// // console.log(data);
|
||||
// ret.push(listUsersResult.users[i]);
|
||||
// // console.log('user added');
|
||||
// } else {
|
||||
// // console.log('user already added');
|
||||
// }
|
||||
}
|
||||
if (listUsersResult.pageToken) {
|
||||
// List next batch of users.
|
||||
await getAll(listUsersResult.pageToken);
|
||||
}
|
||||
}
|
||||
await getAll();
|
||||
return ret;
|
||||
}
|
||||
|
||||
function isUsernameValid(name) {
|
||||
if (name === null || name === undefined || name === "") return false;
|
||||
if (/miodec/.test(name.toLowerCase())) return false;
|
||||
if (/bitly/.test(name.toLowerCase())) return false;
|
||||
if (name.length > 14) return false;
|
||||
if (/^\..*/.test(name.toLowerCase())) return false;
|
||||
return /^[0-9a-zA-Z_.-]+$/.test(name);
|
||||
}
|
||||
|
||||
exports.changeDisplayName = functions.https.onCall(
|
||||
async (request, response) => {
|
||||
try {
|
||||
|
@ -350,14 +262,6 @@ exports.clearTagPb = functions.https.onCall((request, response) => {
|
|||
}
|
||||
});
|
||||
|
||||
function stdDev(array) {
|
||||
const n = array.length;
|
||||
const mean = array.reduce((a, b) => a + b) / n;
|
||||
return Math.sqrt(
|
||||
array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n
|
||||
);
|
||||
}
|
||||
|
||||
exports.verifyUser = functions.https.onRequest(async (request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
response.set("Access-Control-Allow-Headers", "*");
|
||||
|
@ -465,97 +369,6 @@ async function getUpdatedLbMemory(userdata, mode, mode2, globallb, dailylb) {
|
|||
return lbmemory;
|
||||
}
|
||||
|
||||
async function incrementTestCounter(uid, userData) {
|
||||
try {
|
||||
if (userData.completedTests === undefined) {
|
||||
let results = await db.collection(`users/${uid}/results`).get();
|
||||
let count = results.docs.length;
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({
|
||||
completedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({
|
||||
completedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
} else {
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({ completedTests: admin.firestore.FieldValue.increment(1) });
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({ completedTests: admin.firestore.FieldValue.increment(1) });
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(
|
||||
`Error while incrementing completed tests for user ${uid}: ${e}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function incrementStartedTestCounter(uid, num, userData) {
|
||||
try {
|
||||
if (userData.startedTests === undefined) {
|
||||
let stepSize = 1000;
|
||||
let results = [];
|
||||
let query = await db
|
||||
.collection(`users/${uid}/results`)
|
||||
.orderBy("timestamp", "desc")
|
||||
.limit(stepSize)
|
||||
.get();
|
||||
let lastDoc;
|
||||
while (query.docs.length > 0) {
|
||||
lastDoc = query.docs[query.docs.length - 1];
|
||||
query.docs.forEach((doc) => {
|
||||
results.push({ restartCount: doc.data().restartCount });
|
||||
});
|
||||
query = await db
|
||||
.collection(`users/${uid}/results`)
|
||||
.orderBy("timestamp", "desc")
|
||||
.limit(stepSize)
|
||||
.startAfter(lastDoc)
|
||||
.get();
|
||||
}
|
||||
|
||||
let count = 0;
|
||||
results.forEach((result) => {
|
||||
try {
|
||||
let rc = result.restartCount;
|
||||
if (rc === undefined) {
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
count += parseInt(rc);
|
||||
} catch (e) {}
|
||||
});
|
||||
count += results.length;
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({
|
||||
startedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({
|
||||
startedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
} else {
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({ startedTests: admin.firestore.FieldValue.increment(num) });
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({ startedTests: admin.firestore.FieldValue.increment(num) });
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(
|
||||
`Error while incrementing started tests for user ${uid}: ${e}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
exports.updateEmail = functions.https.onCall(async (request, response) => {
|
||||
try {
|
||||
let previousEmail = await admin.auth().getUser(request.uid);
|
||||
|
@ -1436,73 +1249,6 @@ exports.getLeaderboard = functions.https.onCall((request, response) => {
|
|||
});
|
||||
});
|
||||
|
||||
exports.scheduledFunctionCrontab = functions.pubsub
|
||||
.schedule("00 00 * * *")
|
||||
.timeZone("Africa/Abidjan")
|
||||
.onRun((context) => {
|
||||
try {
|
||||
console.log("moving daily leaderboards to history");
|
||||
db.collection("leaderboards")
|
||||
.where("type", "==", "daily")
|
||||
.get()
|
||||
.then(async (res) => {
|
||||
for (let i = 0; i < res.docs.length; i++) {
|
||||
let doc = res.docs[i];
|
||||
|
||||
let lbdata = doc.data();
|
||||
|
||||
let winnerUid = lbdata.board[0].uid;
|
||||
await db
|
||||
.collection("users")
|
||||
.doc(winnerUid)
|
||||
.get()
|
||||
.then(async (userDoc) => {
|
||||
let userData = userDoc.data();
|
||||
let lbwins = userData.dailyLbWins;
|
||||
|
||||
let lbname = lbdata.mode + lbdata.mode2;
|
||||
|
||||
if (lbwins === undefined) {
|
||||
//first win ever
|
||||
lbwins = {
|
||||
[lbname]: 1,
|
||||
};
|
||||
} else {
|
||||
//object already exists
|
||||
if (lbwins[lbname] === undefined) {
|
||||
lbwins[lbname] = 1;
|
||||
} else {
|
||||
lbwins[lbname] = lbwins[lbname] + 1;
|
||||
}
|
||||
}
|
||||
await db.collection("users").doc(winnerUid).update({
|
||||
dailyLbWins: lbwins,
|
||||
});
|
||||
});
|
||||
|
||||
announceDailyLbResult(lbdata);
|
||||
t = new Date();
|
||||
// db.collection("leaderboards_history")
|
||||
// .doc(
|
||||
// `${t.getUTCDate()}_${t.getUTCMonth()}_${t.getUTCFullYear()}_${
|
||||
// lbdata.mode
|
||||
// }_${lbdata.mode2}`
|
||||
// )
|
||||
// .set(lbdata);
|
||||
db.collection("leaderboards").doc(doc.id).set(
|
||||
{
|
||||
board: [],
|
||||
},
|
||||
{ merge: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
return null;
|
||||
} catch (e) {
|
||||
console.error(`error while moving daily leaderboards to history - ${e}`);
|
||||
}
|
||||
});
|
||||
|
||||
async function announceLbUpdate(discordId, pos, lb, wpm, raw, acc, con) {
|
||||
db.collection("bot-commands").add({
|
||||
command: "sayLbUpdate",
|
||||
|
@ -1511,12 +1257,3 @@ async function announceLbUpdate(discordId, pos, lb, wpm, raw, acc, con) {
|
|||
requestTimestamp: Date.now(),
|
||||
});
|
||||
}
|
||||
|
||||
async function announceDailyLbResult(lbdata) {
|
||||
db.collection("bot-commands").add({
|
||||
command: "announceDailyLbResult",
|
||||
arguments: [lbdata],
|
||||
executed: false,
|
||||
requestTimestamp: Date.now(),
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
exports.requestTest = functions.https.onRequest((request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
response.set("Access-Control-Allow-Headers", "*");
|
||||
response.set("Access-Control-Allow-Credentials", "true");
|
||||
response.status(200).send({ data: "test" });
|
||||
});
|
||||
|
||||
exports.getPatreons = functions.https.onRequest(async (request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
response.set("Access-Control-Allow-Headers", "*");
|
||||
response.set("Access-Control-Allow-Credentials", "true");
|
||||
if (request.method === "OPTIONS") {
|
||||
// Send response to OPTIONS requests
|
||||
response.set("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
|
||||
response.set("Access-Control-Allow-Headers", "Authorization,Content-Type");
|
||||
response.set("Access-Control-Max-Age", "3600");
|
||||
response.status(204).send("");
|
||||
return;
|
||||
}
|
||||
request = request.body.data;
|
||||
try {
|
||||
let patreon = await db.collection("patreon").doc("patreons").get();
|
||||
let data = patreon.data().list;
|
||||
|
||||
data = data.sort((a, b) => {
|
||||
return b.value - a.value;
|
||||
});
|
||||
|
||||
let ret = [];
|
||||
data.forEach((pdoc) => {
|
||||
ret.push(pdoc.name);
|
||||
});
|
||||
|
||||
response.status(200).send({ data: ret });
|
||||
return;
|
||||
} catch (e) {
|
||||
response.status(200).send({ e });
|
||||
return;
|
||||
}
|
||||
});
|
295
functions/non-migrated.js
Normal file
295
functions/non-migrated.js
Normal file
|
@ -0,0 +1,295 @@
|
|||
exports.requestTest = functions.https.onRequest((request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
response.set("Access-Control-Allow-Headers", "*");
|
||||
response.set("Access-Control-Allow-Credentials", "true");
|
||||
response.status(200).send({ data: "test" });
|
||||
});
|
||||
|
||||
exports.getPatreons = functions.https.onRequest(async (request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
response.set("Access-Control-Allow-Headers", "*");
|
||||
response.set("Access-Control-Allow-Credentials", "true");
|
||||
if (request.method === "OPTIONS") {
|
||||
// Send response to OPTIONS requests
|
||||
response.set("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
|
||||
response.set("Access-Control-Allow-Headers", "Authorization,Content-Type");
|
||||
response.set("Access-Control-Max-Age", "3600");
|
||||
response.status(204).send("");
|
||||
return;
|
||||
}
|
||||
request = request.body.data;
|
||||
try {
|
||||
let patreon = await db.collection("patreon").doc("patreons").get();
|
||||
let data = patreon.data().list;
|
||||
|
||||
data = data.sort((a, b) => {
|
||||
return b.value - a.value;
|
||||
});
|
||||
|
||||
let ret = [];
|
||||
data.forEach((pdoc) => {
|
||||
ret.push(pdoc.name);
|
||||
});
|
||||
|
||||
response.status(200).send({ data: ret });
|
||||
return;
|
||||
} catch (e) {
|
||||
response.status(200).send({ e });
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
async function getAllNames() {
|
||||
// return admin
|
||||
// .auth()
|
||||
// .listUsers()
|
||||
// .then((data) => {
|
||||
// let names = [];
|
||||
// data.users.forEach((user) => {
|
||||
// names.push(user.displayName);
|
||||
// });
|
||||
// return names;
|
||||
// });
|
||||
|
||||
let ret = [];
|
||||
|
||||
async function getAll(nextPageToken) {
|
||||
// List batch of users, 1000 at a time.
|
||||
let listUsersResult = await admin.auth().listUsers(1000, nextPageToken);
|
||||
for (let i = 0; i < listUsersResult.users.length; i++) {
|
||||
ret.push(listUsersResult.users[i].displayName);
|
||||
}
|
||||
if (listUsersResult.pageToken) {
|
||||
// List next batch of users.
|
||||
await getAll(listUsersResult.pageToken);
|
||||
}
|
||||
}
|
||||
|
||||
await getAll();
|
||||
return ret;
|
||||
}
|
||||
|
||||
async function getAllUsers() {
|
||||
// return admin
|
||||
// .auth()
|
||||
// .listUsers()
|
||||
// .then((data) => {
|
||||
// let names = [];
|
||||
// data.users.forEach((user) => {
|
||||
// names.push(user.displayName);
|
||||
// });
|
||||
// return names;
|
||||
// });
|
||||
|
||||
let ret = [];
|
||||
|
||||
async function getAll(nextPageToken) {
|
||||
// List batch of users, 1000 at a time.
|
||||
let listUsersResult = await auth.listUsers(1000, nextPageToken);
|
||||
for (let i = 0; i < listUsersResult.users.length; i++) {
|
||||
let loopuser = listUsersResult.users[i];
|
||||
|
||||
//if custom claim is undefined check, if its true then ignore
|
||||
|
||||
// if (loopuser === undefined || loopuser.customClaims === undefined || loopuser.customClaims['nameChecked'] === undefined) {
|
||||
ret.push(listUsersResult.users[i]);
|
||||
// }
|
||||
|
||||
// console.log(loopuser.customClaims['asd']);
|
||||
|
||||
// let userdata = await db.collection('users').doc(listUsersResult.users[i].uid).get();
|
||||
|
||||
// let data = userdata.data();
|
||||
|
||||
// if (data === undefined || data.needsToChangeName === undefined) {
|
||||
// // console.log(data);
|
||||
// ret.push(listUsersResult.users[i]);
|
||||
// // console.log('user added');
|
||||
// } else {
|
||||
// // console.log('user already added');
|
||||
// }
|
||||
}
|
||||
if (listUsersResult.pageToken) {
|
||||
// List next batch of users.
|
||||
await getAll(listUsersResult.pageToken);
|
||||
}
|
||||
}
|
||||
await getAll();
|
||||
return ret;
|
||||
}
|
||||
|
||||
function isUsernameValid(name) {
|
||||
if (name === null || name === undefined || name === "") return false;
|
||||
if (/miodec/.test(name.toLowerCase())) return false;
|
||||
if (/bitly/.test(name.toLowerCase())) return false;
|
||||
if (name.length > 14) return false;
|
||||
if (/^\..*/.test(name.toLowerCase())) return false;
|
||||
return /^[0-9a-zA-Z_.-]+$/.test(name);
|
||||
}
|
||||
|
||||
async function incrementTestCounter(uid, userData) {
|
||||
try {
|
||||
if (userData.completedTests === undefined) {
|
||||
let results = await db.collection(`users/${uid}/results`).get();
|
||||
let count = results.docs.length;
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({
|
||||
completedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({
|
||||
completedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
} else {
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({ completedTests: admin.firestore.FieldValue.increment(1) });
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({ completedTests: admin.firestore.FieldValue.increment(1) });
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(
|
||||
`Error while incrementing completed tests for user ${uid}: ${e}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function incrementStartedTestCounter(uid, num, userData) {
|
||||
try {
|
||||
if (userData.startedTests === undefined) {
|
||||
let stepSize = 1000;
|
||||
let results = [];
|
||||
let query = await db
|
||||
.collection(`users/${uid}/results`)
|
||||
.orderBy("timestamp", "desc")
|
||||
.limit(stepSize)
|
||||
.get();
|
||||
let lastDoc;
|
||||
while (query.docs.length > 0) {
|
||||
lastDoc = query.docs[query.docs.length - 1];
|
||||
query.docs.forEach((doc) => {
|
||||
results.push({ restartCount: doc.data().restartCount });
|
||||
});
|
||||
query = await db
|
||||
.collection(`users/${uid}/results`)
|
||||
.orderBy("timestamp", "desc")
|
||||
.limit(stepSize)
|
||||
.startAfter(lastDoc)
|
||||
.get();
|
||||
}
|
||||
|
||||
let count = 0;
|
||||
results.forEach((result) => {
|
||||
try {
|
||||
let rc = result.restartCount;
|
||||
if (rc === undefined) {
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
count += parseInt(rc);
|
||||
} catch (e) {}
|
||||
});
|
||||
count += results.length;
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({
|
||||
startedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({
|
||||
startedTests: admin.firestore.FieldValue.increment(count),
|
||||
});
|
||||
} else {
|
||||
db.collection("users")
|
||||
.doc(uid)
|
||||
.update({ startedTests: admin.firestore.FieldValue.increment(num) });
|
||||
db.collection("public")
|
||||
.doc("stats")
|
||||
.update({ startedTests: admin.firestore.FieldValue.increment(num) });
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(
|
||||
`Error while incrementing started tests for user ${uid}: ${e}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
exports.scheduledFunctionCrontab = functions.pubsub
|
||||
.schedule("00 00 * * *")
|
||||
.timeZone("Africa/Abidjan")
|
||||
.onRun((context) => {
|
||||
try {
|
||||
console.log("moving daily leaderboards to history");
|
||||
db.collection("leaderboards")
|
||||
.where("type", "==", "daily")
|
||||
.get()
|
||||
.then(async (res) => {
|
||||
for (let i = 0; i < res.docs.length; i++) {
|
||||
let doc = res.docs[i];
|
||||
|
||||
let lbdata = doc.data();
|
||||
|
||||
let winnerUid = lbdata.board[0].uid;
|
||||
await db
|
||||
.collection("users")
|
||||
.doc(winnerUid)
|
||||
.get()
|
||||
.then(async (userDoc) => {
|
||||
let userData = userDoc.data();
|
||||
let lbwins = userData.dailyLbWins;
|
||||
|
||||
let lbname = lbdata.mode + lbdata.mode2;
|
||||
|
||||
if (lbwins === undefined) {
|
||||
//first win ever
|
||||
lbwins = {
|
||||
[lbname]: 1,
|
||||
};
|
||||
} else {
|
||||
//object already exists
|
||||
if (lbwins[lbname] === undefined) {
|
||||
lbwins[lbname] = 1;
|
||||
} else {
|
||||
lbwins[lbname] = lbwins[lbname] + 1;
|
||||
}
|
||||
}
|
||||
await db.collection("users").doc(winnerUid).update({
|
||||
dailyLbWins: lbwins,
|
||||
});
|
||||
});
|
||||
|
||||
announceDailyLbResult(lbdata);
|
||||
t = new Date();
|
||||
// db.collection("leaderboards_history")
|
||||
// .doc(
|
||||
// `${t.getUTCDate()}_${t.getUTCMonth()}_${t.getUTCFullYear()}_${
|
||||
// lbdata.mode
|
||||
// }_${lbdata.mode2}`
|
||||
// )
|
||||
// .set(lbdata);
|
||||
db.collection("leaderboards").doc(doc.id).set(
|
||||
{
|
||||
board: [],
|
||||
},
|
||||
{ merge: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
return null;
|
||||
} catch (e) {
|
||||
console.error(`error while moving daily leaderboards to history - ${e}`);
|
||||
}
|
||||
});
|
||||
|
||||
async function announceDailyLbResult(lbdata) {
|
||||
db.collection("bot-commands").add({
|
||||
command: "announceDailyLbResult",
|
||||
arguments: [lbdata],
|
||||
executed: false,
|
||||
requestTimestamp: Date.now(),
|
||||
});
|
||||
}
|
Loading…
Add table
Reference in a new issue