poll.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. let express = require('express')
  2. let router = express.Router()
  3. let { PollAnswer, PollQuestion, User, Sequelize } = require('../models')
  4. const Errors = require('../lib/errors')
  5. router.all('*', (req, res, next) => {
  6. if(req.session.loggedIn) {
  7. next()
  8. } else {
  9. res.status(401)
  10. res.json({
  11. errors: [Errors.requestNotAuthorized]
  12. })
  13. }
  14. })
  15. router.post('/', async (req, res) => {
  16. try {
  17. let answers = req.body.answers
  18. if(!answers || answers.length < 2) {
  19. throw Errors.sequelizeValidation(Sequelize, {
  20. error: 'You must provide at least 2 answers',
  21. value: answers
  22. })
  23. } else if(answers.length !== new Set(answers).size) {
  24. throw Errors.sequelizeValidation(Sequelize, {
  25. error: 'Answers cannot contain any duplicates',
  26. value: answers
  27. })
  28. }
  29. let user = await User.findById(req.session.UserId)
  30. let pollQuestion = await PollQuestion.create({ question: req.body.question })
  31. let pollAnswers = await Promise.all(
  32. answers.map(answer => {
  33. return PollAnswer.create({ answer })
  34. })
  35. )
  36. //Set associations
  37. await pollQuestion.setUser(user)
  38. await Promise.all(
  39. pollAnswers.map(pollAnswer => {
  40. return pollQuestion.addPollAnswer(pollAnswer)
  41. })
  42. )
  43. res.json(pollQuestion.toJSON())
  44. } catch (e) {
  45. if(e instanceof Sequelize.ValidationError) {
  46. res.status(400)
  47. res.json(e)
  48. } else {
  49. console.log(e)
  50. res.status(500)
  51. res.json({
  52. errors: [Errors.unknown]
  53. })
  54. }
  55. }
  56. })
  57. module.exports = router