mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-02 03:25:22 +08:00
resetPersonalBests and index.js cleaning
This commit is contained in:
parent
72a09dab3a
commit
3f5af730d4
5 changed files with 59 additions and 174 deletions
|
@ -16,6 +16,8 @@
|
|||
|
||||
- Should be a setting in the .env
|
||||
|
||||
- Are personal bests calculated from actual result data?
|
||||
- Setting a low pb after resetting personal bests doesn't register on the scoreboard
|
||||
- make sure refresh token won't expire
|
||||
- make refresh token expire after session if don't remeber me is set?
|
||||
- Keep jwt and refresh in cookies?
|
||||
|
|
|
@ -1361,6 +1361,21 @@ app.post("/api/removeTag", authenticateToken, (req, res) => {
|
|||
}
|
||||
});
|
||||
|
||||
app.post("/api/resetPersonalBests", authenticateToken, (req, res) => {
|
||||
try {
|
||||
User.findOne({ name: req.name }, (err, user) => {
|
||||
if (err) res.status(500).send({ error: err });
|
||||
user.personalBests = {};
|
||||
user.save();
|
||||
});
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.log(
|
||||
`something went wrong when deleting personal bests for ${uid}: ${e.message}`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
// ANALYTICS API
|
||||
|
||||
function newAnalyticsEvent(event, data) {
|
||||
|
|
|
@ -106,30 +106,6 @@ function isUsernameValid(name) {
|
|||
return /^[0-9a-zA-Z_.-]+$/.test(name);
|
||||
}
|
||||
|
||||
exports.reserveDisplayName = functions.https.onCall(
|
||||
async (request, response) => {
|
||||
try {
|
||||
let udata = await db.collection("users").doc(request.uid).get();
|
||||
udata = udata.data();
|
||||
if (request.name.toLowerCase() === udata.name.toLowerCase()) {
|
||||
db.collection("takenNames").doc(request.name.toLowerCase()).set(
|
||||
{
|
||||
taken: true,
|
||||
},
|
||||
{ merge: true }
|
||||
);
|
||||
console.log(`Reserved name ${request.name}`);
|
||||
} else {
|
||||
console.error(
|
||||
`Could not reserve name. ${request.name.toLowerCase()} != ${udata.name.toLowerCase()}`
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`Could not reserve name. ${e}`);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
exports.changeDisplayName = functions.https.onCall(
|
||||
async (request, response) => {
|
||||
try {
|
||||
|
@ -168,94 +144,6 @@ exports.changeDisplayName = functions.https.onCall(
|
|||
}
|
||||
);
|
||||
|
||||
exports.clearName = functions.auth.user().onDelete((user) => {
|
||||
db.collection("takenNames").doc(user.displayName.toLowerCase()).delete();
|
||||
db.collection("users").doc(user.uid).delete();
|
||||
});
|
||||
|
||||
exports.checkNameAvailability = functions.https.onRequest(
|
||||
async (request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
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;
|
||||
|
||||
// 1 - available
|
||||
// -1 - unavailable (taken)
|
||||
// -2 - not valid name
|
||||
// -999 - unknown error
|
||||
try {
|
||||
if (!isUsernameValid(request.name)) {
|
||||
response.status(200).send({
|
||||
data: {
|
||||
resultCode: -2,
|
||||
message: "Username is not valid",
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let takendata = await db
|
||||
.collection("takenNames")
|
||||
.doc(request.name.toLowerCase())
|
||||
.get();
|
||||
|
||||
takendata = takendata.data();
|
||||
|
||||
if (takendata !== undefined && takendata.taken) {
|
||||
response.status(200).send({
|
||||
data: {
|
||||
resultCode: -1,
|
||||
message: "Username is taken",
|
||||
},
|
||||
});
|
||||
return;
|
||||
} else {
|
||||
response.status(200).send({
|
||||
data: {
|
||||
resultCode: 1,
|
||||
message: "Username is available",
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// return getAllNames().then((data) => {
|
||||
// let available = 1;
|
||||
// data.forEach((name) => {
|
||||
// try {
|
||||
// if (name.toLowerCase() === request.name.toLowerCase()) available = -1;
|
||||
// } catch (e) {
|
||||
// //
|
||||
// }
|
||||
// });
|
||||
// return available;
|
||||
// });
|
||||
} catch (e) {
|
||||
console.error(
|
||||
`Error while checking name availability for ${request.name}:` +
|
||||
e.message
|
||||
);
|
||||
response.status(200).send({
|
||||
data: {
|
||||
resultCode: -999,
|
||||
message: "Unexpected error: " + e,
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
exports.removeSmallTestsAndQPB = functions.https.onCall(
|
||||
async (request, response) => {
|
||||
let uid = request.uid;
|
||||
|
@ -304,23 +192,6 @@ exports.removeSmallTestsAndQPB = functions.https.onCall(
|
|||
}
|
||||
);
|
||||
|
||||
exports.resetPersonalBests = functions.https.onCall(
|
||||
async (request, response) => {
|
||||
let uid = request.uid;
|
||||
|
||||
try {
|
||||
var user = await db.collection("users").doc(uid);
|
||||
await user.update({ personalBests: {} });
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.log(
|
||||
`something went wrong when deleting personal bests for ${uid}: ${e.message}`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
async function checkIfTagPB(uid, obj, userdata) {
|
||||
if (obj.tags.length === 0) {
|
||||
return [];
|
||||
|
@ -487,47 +358,6 @@ function stdDev(array) {
|
|||
);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
});
|
||||
|
||||
exports.verifyUser = functions.https.onRequest(async (request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
response.set("Access-Control-Allow-Headers", "*");
|
||||
|
|
40
functions/non-cloud-functions.js
Normal file
40
functions/non-cloud-functions.js
Normal file
|
@ -0,0 +1,40 @@
|
|||
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;
|
||||
}
|
||||
});
|
|
@ -4,6 +4,7 @@ import * as Notifications from "./notifications";
|
|||
import * as AccountController from "./account-controller";
|
||||
import * as DB from "./db";
|
||||
import * as Settings from "./settings";
|
||||
import axiosInstance from "./axios-instance";
|
||||
|
||||
export let list = {};
|
||||
class SimplePopup {
|
||||
|
@ -245,10 +246,7 @@ list.resetPersonalBests = new SimplePopup(
|
|||
() => {
|
||||
try {
|
||||
Loader.show();
|
||||
|
||||
CloudFunctions.resetPersonalBests({
|
||||
uid: DB.currentUser().uid,
|
||||
}).then((res) => {
|
||||
axiosInstance.post("/api/resetPersonalBests").then((res) => {
|
||||
if (res) {
|
||||
Loader.hide();
|
||||
Notifications.add(
|
||||
|
|
Loading…
Add table
Reference in a new issue