report.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. let express = require('express')
  2. let router = express.Router()
  3. let { User, Post, Report, 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 post = await Post.findById(req.body.postId)
  18. if(!post) throw Report.InvalidPostId(req.body.postId)
  19. let user = await User.findOne({
  20. where: { username: req.session.username }
  21. })
  22. let report = await Report.create({ reason: req.body.reason })
  23. report.setFlaggedByUser(user)
  24. report.setPost(post)
  25. res.json({
  26. success: true
  27. })
  28. } catch (e) {
  29. if(e instanceof Sequelize.ValidationError) {
  30. res.status(400)
  31. res.json(e)
  32. } else {
  33. console.log(e)
  34. res.status(500)
  35. res.json({
  36. errors: [Errors.unknown]
  37. })
  38. }
  39. }
  40. })
  41. router.all('*', (req, res, next) => {
  42. if(req.session.admin) {
  43. next()
  44. } else {
  45. res.status(401)
  46. res.json({
  47. errors: [Errors.requestNotAuthorized]
  48. })
  49. }
  50. })
  51. router.get('/', async (req, res) => {
  52. try {
  53. let reports = await Report.findAll({
  54. include: [
  55. {model: User, as: 'FlaggedByUser' },
  56. { model: Post, include: Post.includeOptions() }
  57. ]
  58. })
  59. res.json(reports)
  60. } catch (e) {
  61. console.log(e)
  62. res.status(500)
  63. res.json({
  64. errors: [Errors.unknown]
  65. })
  66. }
  67. })
  68. router.delete('/:id', async (req, res) => {
  69. try {
  70. let report = await Report.findById(req.params.id)
  71. if(!report) throw Report.InvalidPostId(req.params.id)
  72. await report.destroy()
  73. res.json({ success: true })
  74. } catch (e) {
  75. if(e instanceof Sequelize.ValidationError) {
  76. res.status(400)
  77. res.json(e)
  78. } else {
  79. console.log(e)
  80. res.status(500)
  81. res.json({
  82. errors: [Errors.unknown]
  83. })
  84. }
  85. }
  86. })
  87. module.exports = router