From b1372c0ede61928b477655bdf3f81c37b4bd4c4b Mon Sep 17 00:00:00 2001 From: C4 Patino Date: Mon, 1 Aug 2022 22:56:13 -0500 Subject: [PATCH] Updated routes to bypass duplicate ID errors --- package.json | 4 ++-- server/package.json | 4 ++-- server/routes/user/GetUser.js | 24 ++++++++++++++---------- server/utils/question/getAnswer.js | 12 +++++++++--- server/utils/question/getComment.js | 0 server/utils/question/getQuestion.js | 11 ++++++++--- server/utils/question/index.js | 6 ++---- 7 files changed, 37 insertions(+), 24 deletions(-) delete mode 100644 server/utils/question/getComment.js diff --git a/package.json b/package.json index 0f6ef76..7641601 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,9 @@ "start": "npm start -w", "start:server": "npm start -w server", "start:client": "npm start -w client", - "start:prod": "npm run start:server", + "start:prod": "npm run prod -w server", "prestart:prod": "npm run build", - "dev": "npm run dev -w server", + "dev": "npm start -workspaces", "build": "npm run build -w client" }, "repository": { diff --git a/server/package.json b/server/package.json index 081e183..7cf1461 100644 --- a/server/package.json +++ b/server/package.json @@ -19,8 +19,8 @@ "superagent-throttle": "^1.0.1" }, "scripts": { - "start": "pm2 start ./bin/www", - "dev": "nodemon ./bin/www" + "start": "nodemon ./bin/www", + "prod": "pm2 start ./bin/www" }, "devDependencies": { "jest": "^28.1.3", diff --git a/server/routes/user/GetUser.js b/server/routes/user/GetUser.js index 116bfc9..fbc237d 100644 --- a/server/routes/user/GetUser.js +++ b/server/routes/user/GetUser.js @@ -8,27 +8,31 @@ async function GetUser(req, res) { const cachedUser = await User.findOne({ username }); - if (cachedUser) return res.send({ - user: { - username: cachedUser.username, - email: cachedUser.email, - points: cachedUser.points, - level: getUserLevel(cachedUser.points), - } - }); + if (cachedUser) + return res.send({ + user: { + username: cachedUser.username, + email: cachedUser.email, + points: cachedUser.points, + level: getUserLevel(cachedUser.points), + }, + }); const { success, user } = await createRequest('get', `/users/${username}`); if (!success) return res.status(500).send(config.errorGeneric); - const newUser = await User.create({ ...user, id: user.user_id }); + const newUser = await User.findByIdAndUpdate(user.user_id, user, { + upsert: true, + }); + return res.send({ user: { username: newUser.username, email: newUser.email, points: newUser.points, level: getUserLevel(newUser.points), - } + }, }); } diff --git a/server/utils/question/getAnswer.js b/server/utils/question/getAnswer.js index fec6a77..aab08f3 100644 --- a/server/utils/question/getAnswer.js +++ b/server/utils/question/getAnswer.js @@ -4,8 +4,12 @@ const Answer = require('server/db/models/Answer'); async function getAnswer(question_id, answer_id) { let cachedAnswer; - try { cachedAnswer = await Answer.findById(answer_id); } - catch { return; } + + try { + cachedAnswer = await Answer.findById(answer_id); + } catch { + return; + } // Retrieve uncached answer and patch to cache if (!cachedAnswer) { @@ -14,7 +18,9 @@ async function getAnswer(question_id, answer_id) { `/questions/${question_id}/answers/${answer_id}` ); if (!success) return; - return Answer.create({ ...answer, id: answer.answer_id, question_id }); + return Answer.findByIdAndUpdate(answer.answer_id, answer, { + upsert: true, + }); } else return cachedAnswer; } diff --git a/server/utils/question/getComment.js b/server/utils/question/getComment.js deleted file mode 100644 index e69de29..0000000 diff --git a/server/utils/question/getQuestion.js b/server/utils/question/getQuestion.js index 9135207..37fd067 100644 --- a/server/utils/question/getQuestion.js +++ b/server/utils/question/getQuestion.js @@ -4,8 +4,11 @@ const Question = require('server/db/models/Question'); async function getQuestion(question_id) { let cachedQuestion; - try { cachedQuestion = await Question.findById(question_id); } - catch { return; } + try { + cachedQuestion = await Question.findById(question_id); + } catch { + return; + } // Retrieve uncached question and patch to cache if (!cachedQuestion) { @@ -14,7 +17,9 @@ async function getQuestion(question_id) { `/questions/${question_id}` ); if (!success) return; - return Question.create({ ...question, id: question.question_id }); + return Question.findByIdAndUpdate(question.question_id, question, { + upsert: true, + }); } else return cachedQuestion; } diff --git a/server/utils/question/index.js b/server/utils/question/index.js index de55630..0009ec1 100644 --- a/server/utils/question/index.js +++ b/server/utils/question/index.js @@ -1,11 +1,9 @@ const getAnswer = require('./getAnswer'); -const getComment = require('./getComment'); const getQuestion = require('./getQuestion'); const refreshQuestion = require('./refreshQuestion'); module.exports = { getAnswer, - getComment, getQuestion, - refreshQuestion -}; \ No newline at end of file + refreshQuestion, +};