This repository has been archived on 2025-11-04. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
qoverflow/server/routes/question/EditQuestionBody.js
2022-08-18 17:53:58 -04:00

67 lines
2 KiB
JavaScript

const config = require('server/config.json');
const Question = require('server/db/models/Question');
const { getQuestion, refreshQuestion } = require('server/utils/question');
const createRequest = require('server/utils/api');
const getUserLevel = require('server/utils/getUserLevel');
async function EditQuestionStatusClosed(req, res) {
const { user } = req;
const { question_id } = req.params;
const { etext, etitle } = req.body;
let eObj = [etext, etitle];
// Verify user has required level
if (getUserLevel(user.points) < 7) {
return res.status(403).send(config.errorForbidden);
}
// Get cached question and make sure it exists
const question = await getQuestion(question_id);
if (!question) return res.status(404).send(config.errorNotFound);
// Toggle question vote
if (question.edit.length === 0) {
if (!etext || !etitle) {
return res.status(400).send(config.errorIncomplete);
}
await Question.findByIdAndUpdate(question_id, {
editText: eObj,
$push: { edit: user.username },
});
return res.sendStatus(200);
}
if (question.edit.includes(user.username)) {
await Question.findByIdAndUpdate(question_id, {
$pull: { edit: user.username },
});
return res.sendStatus(200);
} else {
await Question.findByIdAndUpdate(question_id, {
$push: { close: user.username },
});
}
// Patch question status if required
if (question.edit.length === 2) {
const question = await Question.findByIdAndUpdate(question_id, {
edit: [],
eObj,
});
const { success } = await createRequest('patch', `/questions/${question_id}`, {
etext,
eObj,
});
return success
? res.send({ text: question.text })
: res.status(500).send(config.errorGeneric);
}
return res.sendStatus(200);
}
module.exports = EditQuestionStatusClosed;