Added openapi documentation
This commit is contained in:
parent
31de6b302c
commit
0e071fc339
16 changed files with 1065 additions and 26 deletions
|
|
@ -28,7 +28,7 @@
|
|||
"error": "Request failed. Please check form and try again."
|
||||
},
|
||||
"errorNotFound": {
|
||||
"error": "That object was not found. Please check the URI and try again."
|
||||
"error": "That resource was not found. Please check the URI and try again."
|
||||
},
|
||||
"errorUnauthed": {
|
||||
"error": "You are unauthenticated, please include your JWT."
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ async function tokenAuth(req, res, next) {
|
|||
date.setDate(date.getDate + 1) > result.createdAt
|
||||
) {
|
||||
await Token.findOneAndDelete({ token });
|
||||
return res.status(401).send(config.errorFailed);
|
||||
return res.status(401).send(config.errorUnauthed);
|
||||
}
|
||||
|
||||
const decoded = jwt.verify(result.token, result.id);
|
||||
|
|
|
|||
1024
server/openapi.yml
Normal file
1024
server/openapi.yml
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -6,7 +6,7 @@ const tokenAuth = require('../middleware/tokenAuth');
|
|||
const GetMail = require('./mail/Get');
|
||||
const SendMail = require('./mail/Send');
|
||||
|
||||
router.post('/', tokenAuth, SendMail);
|
||||
router.get('/', tokenAuth, GetMail);
|
||||
router.post('/', tokenAuth, SendMail);
|
||||
|
||||
module.exports = router;
|
||||
|
|
|
|||
|
|
@ -7,10 +7,7 @@ async function Send(req, res, next) {
|
|||
const { reciever, subject, text } = req.body;
|
||||
|
||||
if (!reciever | !subject | !text) {
|
||||
return res.status(400).send({
|
||||
success: false,
|
||||
error: 'Your message is missing information.',
|
||||
});
|
||||
return res.status(400).send(config.errorIncomplete);
|
||||
}
|
||||
|
||||
const { success, message } = await createRequest('post', `/mail`, {
|
||||
|
|
|
|||
|
|
@ -1,17 +1,31 @@
|
|||
const Answer = require('../../db/models/Answer');
|
||||
const Question = require('../../db/models/Question');
|
||||
const config = require('../../config.json');
|
||||
const getUserLevel = require('../../utils/getUserLevel');
|
||||
|
||||
async function CreateAnswer(req, res, next) {
|
||||
const user = req.user;
|
||||
const { title, text } = req.body;
|
||||
const { text } = req.body;
|
||||
const { questionID } = req.params;
|
||||
|
||||
if (getUserLevel(user.points) < 1) {
|
||||
return res.status(403).send(config.errorForbidden);
|
||||
}
|
||||
|
||||
if (!title || !text) {
|
||||
const cachedQuestion = await Question.findById(questionID);
|
||||
|
||||
if (cachedQuestion.status === 'closed') {
|
||||
return res.status(403).send(config.errorForbidden);
|
||||
}
|
||||
|
||||
if (
|
||||
cachedQuestion.status === 'protected' &&
|
||||
getUserLevel(user.points) < 5
|
||||
) {
|
||||
return res.status(403).send(config.errorForbidden);
|
||||
}
|
||||
|
||||
if (!text) {
|
||||
return res.status(400).send(config.errorIncomplete);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,11 @@ const config = require('../../config.json');
|
|||
|
||||
async function EditAnswer(req, res, next) {
|
||||
const user = req.user;
|
||||
const body = req.body;
|
||||
const { text } = req.body;
|
||||
const { questionID, answerID } = req.params;
|
||||
|
||||
if (!text) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const answerPull = await createRequest(
|
||||
'get',
|
||||
`/questions/${questionID}/answers/${answerID}`
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ async function EditAnswerVote(req, res, next) {
|
|||
const { questionID, answerID, commentID } = req.params;
|
||||
const { operation } = req.body;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const userLevel = getUserLevel(user.points);
|
||||
if (operation === 'upvote' && userLevel < 2) {
|
||||
return res.status(403).send(config.errorForbidden);
|
||||
|
|
@ -19,8 +21,6 @@ async function EditAnswerVote(req, res, next) {
|
|||
|
||||
const URL = `/questions/${questionID}/answerID/${answerID}/comments/${commentID}/vote/${user.username}`;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
var cachedVote = await Vote.findOneAndDelete({
|
||||
parentID: commentID,
|
||||
creator: user.username,
|
||||
|
|
|
|||
|
|
@ -3,13 +3,15 @@ const config = require('../../config.json');
|
|||
const getUserLevel = require('../../utils/getUserLevel');
|
||||
|
||||
const Vote = require('../../db/models/Vote');
|
||||
const Answer = require('../../db/mdoels/Answer');
|
||||
const Answer = require('../../db/models/Answer');
|
||||
|
||||
async function EditAnswerVote(req, res, next) {
|
||||
const user = req.user;
|
||||
const { questionID, answerID } = req.params;
|
||||
const { operation } = req.body;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const userLevel = getUserLevel(user.points);
|
||||
if (operation === 'upvote' && userLevel < 2) {
|
||||
return res.status(403).send(config.errorForbidden);
|
||||
|
|
@ -21,8 +23,6 @@ async function EditAnswerVote(req, res, next) {
|
|||
|
||||
const URL = `/questions/${questionID}/answers/${answerID}/vote/${user.username}`;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const cachedAnswer = await Answer.findById(answerID);
|
||||
var cachedVote = await Vote.findOneAndDelete({
|
||||
parentID: answerID,
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ async function EditAnswerVote(req, res, next) {
|
|||
const { questionID, commentID } = req.params;
|
||||
const { operation } = req.body;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const userLevel = getUserLevel(user.points);
|
||||
if (operation === 'upvote' && userLevel < 2) {
|
||||
return res.status(403).send(config.errorForbidden);
|
||||
|
|
@ -19,8 +21,6 @@ async function EditAnswerVote(req, res, next) {
|
|||
|
||||
const URL = `/questions/${questionID}/comments/${commentID}/vote/${user.username}`;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
var cachedVote = await Vote.findOneAndDelete({
|
||||
parentID: commentID,
|
||||
creator: user.username,
|
||||
|
|
|
|||
|
|
@ -3,9 +3,11 @@ const config = require('../../config.json');
|
|||
|
||||
async function EditAnswer(req, res, next) {
|
||||
const user = req.user;
|
||||
const { token, ...body } = req.body;
|
||||
const { text } = req.body;
|
||||
const { questionID } = req.params;
|
||||
|
||||
if (!text) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const questionPull = await createRequest('get', `/questions/${questionID}`);
|
||||
|
||||
if (!questionPull.success) return res.status(500).send(config.errorGeneric);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ async function EditQuestionVote(req, res, next) {
|
|||
const { questionID } = req.params;
|
||||
const { operation } = req.body;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const userLevel = getUserLevel(user.points);
|
||||
if (operation === 'upvote' && userLevel < 2) {
|
||||
return res.status(403).send(config.errorForbidden);
|
||||
|
|
@ -20,8 +22,6 @@ async function EditQuestionVote(req, res, next) {
|
|||
|
||||
const URL = `/questions/${questionID}/vote/${user.username}`;
|
||||
|
||||
if (!operation) return res.status(400).send(config.errorIncomplete);
|
||||
|
||||
const cachedQuestion = await Question.findByID(questionID);
|
||||
var cachedVote = await Vote.findOneAndDelete({
|
||||
parentID: questionID,
|
||||
|
|
|
|||
|
|
@ -17,10 +17,10 @@ const ResetPassword = require('./user/ResetPassword');
|
|||
router.get('/:username', GetUser);
|
||||
router.get('/questions', tokenAuth, Questions);
|
||||
router.get('/answers', tokenAuth, Answers);
|
||||
router.get('/logout', tokenAuth, Logout);
|
||||
router.get('/reset', RequestReset);
|
||||
router.post('/login', basicAuth, Login);
|
||||
router.post('/register', Register);
|
||||
router.post('/login', basicAuth, Login);
|
||||
router.delete('/logout', tokenAuth, Logout);
|
||||
router.get('/reset', RequestReset);
|
||||
router.post('/reset/:id', ResetPassword);
|
||||
router.patch('/', tokenAuth, Edit);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ async function Answers(req, res, next) {
|
|||
creator: user.username,
|
||||
}).sort({ createdAt: 'desc' });
|
||||
|
||||
return res.send(cachedAnswers);
|
||||
return res.send({ answers: cachedAnswers });
|
||||
}
|
||||
|
||||
module.exports = Answers;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ const Token = require('../../db/models/Token');
|
|||
async function Logout(req, res, next) {
|
||||
const user = req.user;
|
||||
|
||||
await Token.findByIdAndDelete(user.token);
|
||||
await Token.findOne({ user: user.id });
|
||||
|
||||
return res.sendStatus(200);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ async function Questions(req, res, next) {
|
|||
creator: user.username,
|
||||
}).sort({ createdAt: 'desc' });
|
||||
|
||||
return res.send(cachedQuestions);
|
||||
return res.send({ questions: cachedQuestions });
|
||||
}
|
||||
|
||||
module.exports = Questions;
|
||||
|
|
|
|||
Reference in a new issue