mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-30 02:39:05 +08:00
rewrote some of the functions inside the user file to the new standard
This commit is contained in:
parent
bc68e1be59
commit
15936a99e2
3 changed files with 164 additions and 125 deletions
|
|
@ -1,6 +1,7 @@
|
|||
const MonkeyError = require("../handlers/error");
|
||||
const { mongoDB } = require("../init/mongodb");
|
||||
const { checkAndUpdatePb } = require("../handlers/pb");
|
||||
const { updateAuthEmail } = require("../handlers/auth");
|
||||
|
||||
class UsersDAO {
|
||||
static async addUser(name, email, uid) {
|
||||
|
|
@ -19,6 +20,12 @@ class UsersDAO {
|
|||
.updateOne({ uid }, { $set: { name } });
|
||||
}
|
||||
|
||||
static async updateEmail(uid, email) {
|
||||
const user = await mongoDB().collection("users").findOne({ uid });
|
||||
if (!user) throw new MonkeyError(404, "User not found");
|
||||
return await updateAuthEmail(uid, email);
|
||||
}
|
||||
|
||||
static async getUser(uid) {
|
||||
const user = await mongoDB().collection("users").findOne({ uid });
|
||||
if (!user) throw new MonkeyError(404, "User not found");
|
||||
|
|
@ -165,6 +172,40 @@ class UsersDAO {
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static async resetPb(uid) {
|
||||
const user = await mongoDB().collection("users").findOne({ uid });
|
||||
if (!user) throw new MonkeyError(404, "User not found");
|
||||
return await mongoDB()
|
||||
.collection("users")
|
||||
.updateOne({ uid }, { $set: { personalBests: {} } });
|
||||
}
|
||||
|
||||
static async updateTypingStats(uid, restartCount, timeTyping) {
|
||||
const user = await mongoDB().collection("users").findOne({ uid });
|
||||
if (!user) throw new MonkeyError(404, "User not found");
|
||||
|
||||
return await mongoDB()
|
||||
.collection("users")
|
||||
.updateOne(
|
||||
{ uid },
|
||||
{
|
||||
$inc: {
|
||||
startedTests: restartCount,
|
||||
completedTests: 1,
|
||||
timeTyping,
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
static async unlinkDiscord(uid) {
|
||||
const user = await mongoDB().collection("users").findOne({ uid });
|
||||
if (!user) throw new MonkeyError(404, "User not found");
|
||||
return await mongoDB()
|
||||
.collection("users")
|
||||
.updateOne({ uid }, { $set: { discordId: null } });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = UsersDAO;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,10 @@ module.exports = {
|
|||
async verifyIdToken(idToken) {
|
||||
return await admin.auth().verifyIdToken(idToken);
|
||||
},
|
||||
async updateAuthEmail(uid, email) {
|
||||
return await admin.auth().updateUser(uid, {
|
||||
email,
|
||||
emailVerified: false,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,118 +1,110 @@
|
|||
// async function incrementUserGlobalTypingStats(userData, resultObj) {
|
||||
// let userGlobalStats = userData.globalStats;
|
||||
// try {
|
||||
// let newStarted;
|
||||
// let newCompleted;
|
||||
// let newTime;
|
||||
|
||||
async function incrementUserGlobalTypingStats(userData, resultObj) {
|
||||
let userGlobalStats = userData.globalStats;
|
||||
try {
|
||||
let newStarted;
|
||||
let newCompleted;
|
||||
let newTime;
|
||||
// let tt = 0;
|
||||
// let afk = resultObj.afkDuration;
|
||||
// if (afk == undefined) {
|
||||
// afk = 0;
|
||||
// }
|
||||
// tt = resultObj.testDuration + resultObj.incompleteTestSeconds - afk;
|
||||
|
||||
let tt = 0;
|
||||
let afk = resultObj.afkDuration;
|
||||
if (afk == undefined) {
|
||||
afk = 0;
|
||||
}
|
||||
tt = resultObj.testDuration + resultObj.incompleteTestSeconds - afk;
|
||||
// if (userGlobalStats.started === undefined) {
|
||||
// newStarted = resultObj.restartCount + 1;
|
||||
// } else {
|
||||
// newStarted = userGlobalStats.started + resultObj.restartCount + 1;
|
||||
// }
|
||||
// if (userGlobalStats.completed === undefined) {
|
||||
// newCompleted = 1;
|
||||
// } else {
|
||||
// newCompleted = userGlobalStats.completed + 1;
|
||||
// }
|
||||
// if (userGlobalStats.time === undefined) {
|
||||
// newTime = tt;
|
||||
// } else {
|
||||
// newTime = userGlobalStats.time + tt;
|
||||
// }
|
||||
// incrementPublicTypingStats(resultObj.restartCount + 1, 1, tt);
|
||||
// User.findOne({ uid: userData.uid }, (err, user) => {
|
||||
// user.globalStats = {
|
||||
// started: newStarted,
|
||||
// completed: newCompleted,
|
||||
// time: roundTo2(newTime),
|
||||
// };
|
||||
// user.save();
|
||||
// });
|
||||
// } catch (e) {
|
||||
// console.error(`Error while incrementing stats for user ${uid}: ${e}`);
|
||||
// }
|
||||
// }
|
||||
|
||||
// app.get("/userResults", authenticateToken, (req, res) => {
|
||||
// User.findOne({ uid: req.uid }, (err, user) => {
|
||||
// if (err) res.status(500).send({ error: err });
|
||||
// res.status(200).send({ results: user.results });
|
||||
// });
|
||||
// res.sendStatus(200);
|
||||
// });
|
||||
|
||||
if (userGlobalStats.started === undefined) {
|
||||
newStarted = resultObj.restartCount + 1;
|
||||
} else {
|
||||
newStarted = userGlobalStats.started + resultObj.restartCount + 1;
|
||||
}
|
||||
if (userGlobalStats.completed === undefined) {
|
||||
newCompleted = 1;
|
||||
} else {
|
||||
newCompleted = userGlobalStats.completed + 1;
|
||||
}
|
||||
if (userGlobalStats.time === undefined) {
|
||||
newTime = tt;
|
||||
} else {
|
||||
newTime = userGlobalStats.time + tt;
|
||||
}
|
||||
incrementPublicTypingStats(resultObj.restartCount + 1, 1, tt);
|
||||
User.findOne({ uid: userData.uid }, (err, user) => {
|
||||
user.globalStats = {
|
||||
started: newStarted,
|
||||
completed: newCompleted,
|
||||
time: roundTo2(newTime),
|
||||
};
|
||||
user.save();
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(`Error while incrementing stats for user ${uid}: ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
app.get("/userResults", authenticateToken, (req, res) => {
|
||||
User.findOne({ uid: req.uid }, (err, user) => {
|
||||
if (err) res.status(500).send({ error: err });
|
||||
res.status(200).send({ results: user.results });
|
||||
});
|
||||
res.sendStatus(200);
|
||||
});
|
||||
|
||||
|
||||
app.post("/unlinkDiscord", authenticateToken, (req, res) => {
|
||||
request = req.body.data;
|
||||
try {
|
||||
if (request === null || req.uid === undefined) {
|
||||
res.status(200).send({ status: -999, message: "Empty request" });
|
||||
return;
|
||||
}
|
||||
User.findOne({ uid: req.uid }, (err, user) => {
|
||||
user.discordId = null;
|
||||
user.save();
|
||||
})
|
||||
.then((f) => {
|
||||
res.status(200).send({
|
||||
status: 1,
|
||||
message: "Unlinked",
|
||||
});
|
||||
})
|
||||
.catch((e) => {
|
||||
res.status(200).send({
|
||||
status: -999,
|
||||
message: e.message,
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
res.status(200).send({
|
||||
status: -999,
|
||||
message: e,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
app.post("/updateEmail", authenticateToken, (req, res) => {
|
||||
try {
|
||||
admin
|
||||
.auth()
|
||||
.getUser(req.uid)
|
||||
.then((previous) => {
|
||||
if (previous.email !== req.body.previousEmail) {
|
||||
res.send({ resultCode: -1 });
|
||||
} else {
|
||||
User.findOne({ uid: req.uid }, (err, user) => {
|
||||
user.email = req.body.newEmail;
|
||||
user.emailVerified = false;
|
||||
user.save();
|
||||
res.send({ resultCode: 1 });
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(`error updating email for ${req.uid} - ${e}`);
|
||||
res.send({
|
||||
resultCode: -999,
|
||||
message: e.message,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// app.post("/unlinkDiscord", authenticateToken, (req, res) => {
|
||||
// request = req.body.data;
|
||||
// try {
|
||||
// if (request === null || req.uid === undefined) {
|
||||
// res.status(200).send({ status: -999, message: "Empty request" });
|
||||
// return;
|
||||
// }
|
||||
// User.findOne({ uid: req.uid }, (err, user) => {
|
||||
// user.discordId = null;
|
||||
// user.save();
|
||||
// })
|
||||
// .then((f) => {
|
||||
// res.status(200).send({
|
||||
// status: 1,
|
||||
// message: "Unlinked",
|
||||
// });
|
||||
// })
|
||||
// .catch((e) => {
|
||||
// res.status(200).send({
|
||||
// status: -999,
|
||||
// message: e.message,
|
||||
// });
|
||||
// });
|
||||
// } catch (e) {
|
||||
// res.status(200).send({
|
||||
// status: -999,
|
||||
// message: e,
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
|
||||
// app.post("/updateEmail", authenticateToken, (req, res) => {
|
||||
// try {
|
||||
// admin
|
||||
// .auth()
|
||||
// .getUser(req.uid)
|
||||
// .then((previous) => {
|
||||
// if (previous.email !== req.body.previousEmail) {
|
||||
// res.send({ resultCode: -1 });
|
||||
// } else {
|
||||
// User.findOne({ uid: req.uid }, (err, user) => {
|
||||
// user.email = req.body.newEmail;
|
||||
// user.emailVerified = false;
|
||||
// user.save();
|
||||
// res.send({ resultCode: 1 });
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// } catch (e) {
|
||||
// console.error(`error updating email for ${req.uid} - ${e}`);
|
||||
// res.send({
|
||||
// resultCode: -999,
|
||||
// message: e.message,
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
|
||||
app.post("/verifyDiscord", authenticateToken, (req, res) => {
|
||||
/* Not tested yet */
|
||||
|
|
@ -178,18 +170,18 @@ app.post("/verifyDiscord", authenticateToken, (req, res) => {
|
|||
}
|
||||
});
|
||||
|
||||
app.post("/resetPersonalBests", authenticateToken, (req, res) => {
|
||||
try {
|
||||
User.findOne({ uid: req.uid }, (err, user) => {
|
||||
if (err) res.status(500).send({ error: err });
|
||||
user.personalBests = {};
|
||||
user.save();
|
||||
});
|
||||
res.status(200).send({ status: "Reset Pbs successfully" });
|
||||
} catch (e) {
|
||||
console.log(
|
||||
`something went wrong when deleting personal bests for ${uid}: ${e.message}`
|
||||
);
|
||||
res.status(500).send({ status: "Reset Pbs successfully" });
|
||||
}
|
||||
});
|
||||
// app.post("/resetPersonalBests", authenticateToken, (req, res) => {
|
||||
// try {
|
||||
// User.findOne({ uid: req.uid }, (err, user) => {
|
||||
// if (err) res.status(500).send({ error: err });
|
||||
// user.personalBests = {};
|
||||
// user.save();
|
||||
// });
|
||||
// res.status(200).send({ status: "Reset Pbs successfully" });
|
||||
// } catch (e) {
|
||||
// console.log(
|
||||
// `something went wrong when deleting personal bests for ${uid}: ${e.message}`
|
||||
// );
|
||||
// res.status(500).send({ status: "Reset Pbs successfully" });
|
||||
// }
|
||||
// });
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue