category.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. let express = require('express')
  2. let router = express.Router()
  3. const Errors = require('../lib/errors')
  4. let { Category } = require('../models')
  5. router.get('/', async (req, res) => {
  6. try {
  7. let categories = await Category.findAll({
  8. attributes: { exclude: ['id'] },
  9. include: Category.includeOptions(1)
  10. })
  11. res.json(categories)
  12. } catch (e) {
  13. res.status(500)
  14. res.json({
  15. errors: [Errors.unknown]
  16. })
  17. }
  18. })
  19. router.get('/:category', async (req, res) => {
  20. try {
  21. let threads
  22. if(req.params.category === 'ALL') {
  23. threads = await Category.findAll({ include: Category.includeOptions() })
  24. } else {
  25. threads = await Category.findOne({
  26. where: { name: req.params.category },
  27. include: Category.includeOptions()
  28. })
  29. }
  30. if(!threads) throw Errors.invalidParameter('id', 'thread does not exist')
  31. if(Array.isArray(threads)) {
  32. let processedThreads = []
  33. threads.forEach(category => {
  34. let jsonCategory = category.toJSON()
  35. processedThreads.push(...jsonCategory.Threads)
  36. })
  37. res.json({
  38. name: 'All',
  39. value: 'ALL',
  40. Threads: processedThreads
  41. })
  42. } else {
  43. res.json(threads.toJSON())
  44. }
  45. } catch (e) {
  46. if(e.name === 'invalidParameter') {
  47. res.status(400)
  48. res.json({
  49. errors: [e]
  50. })
  51. } else {
  52. console.log(e)
  53. res.status(500)
  54. res.json({
  55. errors: [Errors.unknown]
  56. })
  57. }
  58. }
  59. })
  60. router.all('*', (req, res, next) => {
  61. if(!req.session.loggedIn || !req.session.admin) {
  62. res.status(401)
  63. res.json({
  64. errors: [Errors.requestNotAuthorized]
  65. })
  66. } else {
  67. next()
  68. }
  69. })
  70. router.post('/', async (req, res) => {
  71. let validationErrors = []
  72. try {
  73. if(req.body.name === undefined) {
  74. validationErrors.push(Errors.missingParameter('name'))
  75. } else if(typeof req.body.name !== 'string') {
  76. validationErrors.push(Errors.invalidParameterType('name', 'string'))
  77. } else if(!req.body.name.length) {
  78. validationErrors.push(Errors.parameterLengthTooSmall('name', '0'))
  79. }
  80. if(validationErrors.length) throw Errors.VALIDAITON_ERROR
  81. let category = await Category.create({
  82. name: req.body.name
  83. })
  84. res.json(category.toJSON())
  85. } catch (e) {
  86. if(e === Errors.VALIDAITON_ERROR) {
  87. res.status(400)
  88. res.json({
  89. errors: validationErrors
  90. })
  91. } else if(e.name === 'SequelizeUniqueConstraintError') {
  92. res.status(400)
  93. res.json({
  94. errors: [Errors.categoryAlreadyExists]
  95. })
  96. } else {
  97. res.status(500)
  98. res.json({
  99. errors: [Errors.unknown]
  100. })
  101. }
  102. }
  103. })
  104. module.exports = router