You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.1 KiB
JavaScript

const router = module.exports = require('express-promise-router')()
const parseJSON = require('body-parser').json()
const db = require('../db')
const ensureAdmin = require('./middleware/ensureAdmin')
const validate = require('./middleware/validators')
router.get('/', async (req, res) => {
const categories = await db.category.findAll()
res.json(categories)
})
router.get('/by-slug/:slug', async (req, res) => {
const category = await db.category.findBySlug(req.params.slug)
res.json(category)
})
const newCategoryValidators = [
validate.validUrlSlug('urlslug'),
validate.requiredString('name'),
validate.requiredString('description'),
validate.handleApiError
]
router.post('/', ensureAdmin, parseJSON, newCategoryValidators, async (req, res) => {
const category = await db.category.create(
req.body.name,
req.body.urlslug,
req.body.description
)
res.json(category)
})
router.post('/:uuid', ensureAdmin, parseJSON, newCategoryValidators, async (req, res) => {
const category = await db.category.update(
req.params.uuid,
req.body.name,
req.body.urlslug,
req.body.description
)
res.json(category)
})
router.delete('/:uuid', ensureAdmin, async (req, res) => {
const categories = await db.category.delete(req.params.uuid)
res.json(categories)
})
router.put('/:category_uuid/items/:item_uuid', ensureAdmin, async (req, res) => {
const category = await db.category.addItem(req.params.category_uuid, req.params.item_uuid);
res.json(category)
})
router.delete('/:category_uuid/items/:item_uuid', ensureAdmin, async (req, res) => {
const category = await db.category.removeItem(req.params.category_uuid, req.params.item_uuid);
res.json(category)
})
router.put('/:parent_uuid/children/:child_uuid', ensureAdmin, async (req, res) => {
const category = await db.category.addCategory(req.params.parent_uuid, req.params.child_uuid);
res.json(category)
})
router.delete('/:parent_uuid/children/:child_uuid', ensureAdmin, async (req, res) => {
const category = await db.category.removeCategory(req.params.parent_uuid, req.params.child_uuid);
res.json(category)
})