mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-09 15:15:58 +08:00
using asynchandlerwrapper
removed try catches added conffiguration check instead of commenting code out
This commit is contained in:
parent
779faf42da
commit
cd47dcffab
3 changed files with 101 additions and 124 deletions
|
@ -2,72 +2,57 @@ const NewQuotesDAO = require("../../dao/new-quotes");
|
|||
const MonkeyError = require("../../handlers/error");
|
||||
const UserDAO = require("../../dao/user");
|
||||
const Logger = require("../../handlers/logger.js");
|
||||
// const Captcha = require("../../handlers/captcha");
|
||||
const Captcha = require("../../handlers/captcha");
|
||||
|
||||
class NewQuotesController {
|
||||
static async getQuotes(req, res, next) {
|
||||
try {
|
||||
const { uid } = req.decodedToken;
|
||||
const userInfo = await UserDAO.getUser(uid);
|
||||
if (!userInfo.quoteMod) {
|
||||
throw new MonkeyError(403, "You don't have permission to do this");
|
||||
}
|
||||
let data = await NewQuotesDAO.get();
|
||||
return res.status(200).json(data);
|
||||
} catch (e) {
|
||||
return next(e);
|
||||
static async getQuotes(req, res) {
|
||||
const { uid } = req.decodedToken;
|
||||
const userInfo = await UserDAO.getUser(uid);
|
||||
if (!userInfo.quoteMod) {
|
||||
throw new MonkeyError(403, "You don't have permission to do this");
|
||||
}
|
||||
let data = await NewQuotesDAO.get();
|
||||
return res.status(200).json(data);
|
||||
}
|
||||
|
||||
static async addQuote(req, res, next) {
|
||||
try {
|
||||
static async addQuote(req, res) {
|
||||
if (req.context.configuration.quoteSubmit.enabled === false)
|
||||
throw new MonkeyError(
|
||||
500,
|
||||
"Quote submission is disabled temporarily. The queue is quite long and we need some time to catch up."
|
||||
);
|
||||
// let { uid } = req.decodedToken;
|
||||
// let { text, source, language, captcha } = req.body;
|
||||
// if (!text || !source || !language) {
|
||||
// throw new MonkeyError(400, "Please fill all the fields");
|
||||
// }
|
||||
// if (!(await Captcha.verify(captcha))) {
|
||||
// throw new MonkeyError(400, "Captcha check failed");
|
||||
// }
|
||||
// let data = await NewQuotesDAO.add(text, source, language, uid);
|
||||
// return res.status(200).json(data);
|
||||
} catch (e) {
|
||||
return next(e);
|
||||
let { uid } = req.decodedToken;
|
||||
let { text, source, language, captcha } = req.body;
|
||||
if (!text || !source || !language) {
|
||||
throw new MonkeyError(400, "Please fill all the fields");
|
||||
}
|
||||
if (!(await Captcha.verify(captcha))) {
|
||||
throw new MonkeyError(400, "Captcha check failed");
|
||||
}
|
||||
let data = await NewQuotesDAO.add(text, source, language, uid);
|
||||
return res.status(200).json(data);
|
||||
}
|
||||
|
||||
static async approve(req, res, next) {
|
||||
try {
|
||||
let { uid } = req.decodedToken;
|
||||
let { quoteId, editText, editSource } = req.body;
|
||||
const userInfo = await UserDAO.getUser(uid);
|
||||
if (!userInfo.quoteMod) {
|
||||
throw new MonkeyError(403, "You don't have permission to do this");
|
||||
}
|
||||
if (editText === "" || editSource === "") {
|
||||
throw new MonkeyError(400, "Please fill all the fields");
|
||||
}
|
||||
let data = await NewQuotesDAO.approve(quoteId, editText, editSource);
|
||||
Logger.log("system_quote_approved", data, uid);
|
||||
return res.status(200).json(data);
|
||||
} catch (e) {
|
||||
return next(e);
|
||||
static async approve(req, res) {
|
||||
let { uid } = req.decodedToken;
|
||||
let { quoteId, editText, editSource } = req.body;
|
||||
const userInfo = await UserDAO.getUser(uid);
|
||||
if (!userInfo.quoteMod) {
|
||||
throw new MonkeyError(403, "You don't have permission to do this");
|
||||
}
|
||||
if (editText === "" || editSource === "") {
|
||||
throw new MonkeyError(400, "Please fill all the fields");
|
||||
}
|
||||
let data = await NewQuotesDAO.approve(quoteId, editText, editSource);
|
||||
Logger.log("system_quote_approved", data, uid);
|
||||
return res.status(200).json(data);
|
||||
}
|
||||
|
||||
static async refuse(req, res, next) {
|
||||
try {
|
||||
let { uid } = req.decodedToken;
|
||||
let { quoteId } = req.body;
|
||||
await NewQuotesDAO.refuse(quoteId, uid);
|
||||
return res.sendStatus(200);
|
||||
} catch (e) {
|
||||
return next(e);
|
||||
}
|
||||
static async refuse(req, res) {
|
||||
let { uid } = req.decodedToken;
|
||||
let { quoteId } = req.body;
|
||||
await NewQuotesDAO.refuse(quoteId, uid);
|
||||
return res.sendStatus(200);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,75 +3,67 @@ const UserDAO = require("../../dao/user");
|
|||
const MonkeyError = require("../../handlers/error");
|
||||
|
||||
class QuoteRatingsController {
|
||||
static async getRating(req, res, next) {
|
||||
try {
|
||||
const { quoteId, language } = req.query;
|
||||
let data = await QuoteRatingsDAO.get(parseInt(quoteId), language);
|
||||
return res.status(200).json(data);
|
||||
} catch (e) {
|
||||
return next(e);
|
||||
}
|
||||
static async getRating(req, res) {
|
||||
const { quoteId, language } = req.query;
|
||||
let data = await QuoteRatingsDAO.get(parseInt(quoteId), language);
|
||||
return res.status(200).json(data);
|
||||
}
|
||||
static async submitRating(req, res, next) {
|
||||
try {
|
||||
let { uid } = req.decodedToken;
|
||||
let { quoteId, rating, language } = req.body;
|
||||
quoteId = parseInt(quoteId);
|
||||
rating = parseInt(rating);
|
||||
if (isNaN(quoteId) || isNaN(rating)) {
|
||||
throw new MonkeyError(
|
||||
400,
|
||||
"Bad request. Quote id or rating is not a number."
|
||||
);
|
||||
}
|
||||
if (typeof language !== "string") {
|
||||
throw new MonkeyError(400, "Bad request. Language is not a string.");
|
||||
}
|
||||
|
||||
if (rating < 1 || rating > 5) {
|
||||
throw new MonkeyError(
|
||||
400,
|
||||
"Bad request. Rating must be between 1 and 5."
|
||||
);
|
||||
}
|
||||
|
||||
rating = Math.round(rating);
|
||||
|
||||
//check if user already submitted a rating
|
||||
let user = await UserDAO.getUser(uid);
|
||||
|
||||
if (!user) {
|
||||
throw new MonkeyError(401, "User not found.");
|
||||
}
|
||||
let quoteRatings = user.quoteRatings;
|
||||
|
||||
if (quoteRatings === undefined) quoteRatings = {};
|
||||
if (quoteRatings[language] === undefined) quoteRatings[language] = {};
|
||||
if (quoteRatings[language][quoteId] == undefined)
|
||||
quoteRatings[language][quoteId] = undefined;
|
||||
|
||||
let quoteRating = quoteRatings[language][quoteId];
|
||||
|
||||
let newRating;
|
||||
let update;
|
||||
if (quoteRating) {
|
||||
//user already voted for this
|
||||
newRating = rating - quoteRating;
|
||||
update = true;
|
||||
} else {
|
||||
//user has not voted for this
|
||||
newRating = rating;
|
||||
update = false;
|
||||
}
|
||||
|
||||
await QuoteRatingsDAO.submit(quoteId, language, newRating, update);
|
||||
quoteRatings[language][quoteId] = rating;
|
||||
await UserDAO.updateQuoteRatings(uid, quoteRatings);
|
||||
|
||||
return res.sendStatus(200);
|
||||
} catch (e) {
|
||||
return next(e);
|
||||
static async submitRating(req, res) {
|
||||
let { uid } = req.decodedToken;
|
||||
let { quoteId, rating, language } = req.body;
|
||||
quoteId = parseInt(quoteId);
|
||||
rating = parseInt(rating);
|
||||
if (isNaN(quoteId) || isNaN(rating)) {
|
||||
throw new MonkeyError(
|
||||
400,
|
||||
"Bad request. Quote id or rating is not a number."
|
||||
);
|
||||
}
|
||||
if (typeof language !== "string") {
|
||||
throw new MonkeyError(400, "Bad request. Language is not a string.");
|
||||
}
|
||||
|
||||
if (rating < 1 || rating > 5) {
|
||||
throw new MonkeyError(
|
||||
400,
|
||||
"Bad request. Rating must be between 1 and 5."
|
||||
);
|
||||
}
|
||||
|
||||
rating = Math.round(rating);
|
||||
|
||||
//check if user already submitted a rating
|
||||
let user = await UserDAO.getUser(uid);
|
||||
|
||||
if (!user) {
|
||||
throw new MonkeyError(401, "User not found.");
|
||||
}
|
||||
let quoteRatings = user.quoteRatings;
|
||||
|
||||
if (quoteRatings === undefined) quoteRatings = {};
|
||||
if (quoteRatings[language] === undefined) quoteRatings[language] = {};
|
||||
if (quoteRatings[language][quoteId] == undefined)
|
||||
quoteRatings[language][quoteId] = undefined;
|
||||
|
||||
let quoteRating = quoteRatings[language][quoteId];
|
||||
|
||||
let newRating;
|
||||
let update;
|
||||
if (quoteRating) {
|
||||
//user already voted for this
|
||||
newRating = rating - quoteRating;
|
||||
update = true;
|
||||
} else {
|
||||
//user has not voted for this
|
||||
newRating = rating;
|
||||
update = false;
|
||||
}
|
||||
|
||||
await QuoteRatingsDAO.submit(quoteId, language, newRating, update);
|
||||
quoteRatings[language][quoteId] = rating;
|
||||
await UserDAO.updateQuoteRatings(uid, quoteRatings);
|
||||
|
||||
return res.sendStatus(200);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,42 +17,42 @@ quotesRouter.get(
|
|||
"/",
|
||||
RateLimit.newQuotesGet,
|
||||
authenticateRequest,
|
||||
NewQuotesController.getQuotes
|
||||
asyncHandlerWrapper(NewQuotesController.getQuotes)
|
||||
);
|
||||
|
||||
quotesRouter.post(
|
||||
"/",
|
||||
RateLimit.newQuotesAdd,
|
||||
authenticateRequest,
|
||||
NewQuotesController.addQuote
|
||||
asyncHandlerWrapper(NewQuotesController.addQuote)
|
||||
);
|
||||
|
||||
quotesRouter.post(
|
||||
"/approve",
|
||||
RateLimit.newQuotesAction,
|
||||
authenticateRequest,
|
||||
NewQuotesController.approve
|
||||
asyncHandlerWrapper(NewQuotesController.approve)
|
||||
);
|
||||
|
||||
quotesRouter.post(
|
||||
"/reject",
|
||||
RateLimit.newQuotesAction,
|
||||
authenticateRequest,
|
||||
NewQuotesController.refuse
|
||||
asyncHandlerWrapper(NewQuotesController.refuse)
|
||||
);
|
||||
|
||||
quotesRouter.get(
|
||||
"/rating",
|
||||
RateLimit.quoteRatingsGet,
|
||||
authenticateRequest,
|
||||
QuoteRatingsController.getRating
|
||||
asyncHandlerWrapper(QuoteRatingsController.getRating)
|
||||
);
|
||||
|
||||
quotesRouter.post(
|
||||
"/rating",
|
||||
RateLimit.quoteRatingsSubmit,
|
||||
authenticateRequest,
|
||||
QuoteRatingsController.submitRating
|
||||
asyncHandlerWrapper(QuoteRatingsController.submitRating)
|
||||
);
|
||||
|
||||
quotesRouter.post(
|
||||
|
|
Loading…
Add table
Reference in a new issue