@json-express/core
Version:
A simple json server which serves all json files
87 lines (63 loc) • 2.36 kB
JavaScript
import { Router } from 'express'
import { addItem, deleteItem, getAllItems, getItemById, searchItems, updateItem } from '../services/storage-service.js'
import { validateCreateReq, validateSearchReq, validateUpdateReq } from '../services/validation-service.js'
const createRoute = (key, config = {}) => {
const router = Router()
router.get('/', async (req, res) => {
const items = getAllItems(key)
res.json(items)
})
router.get('/:id', async (req, res) => {
const id = req.params.id
const item = getItemById(key, id)
res.json(item)
})
router.post('/search', async (req, res) => {
const { value: searchReq, error } = validateSearchReq(config.schema, req.body)
if (error) {
return res.status(400).json({ message: error.message })
}
try {
const items = searchItems(key, searchReq)
res.json(items)
} catch (appError) {
res.status(appError.statusCode).send({ message: appError.message })
}
})
router.post('/', async (req, res) => {
const { value: createReq, error } = validateCreateReq(config.schema, req.body)
if (error) {
return res.status(400).json({ message: error.message })
}
try {
const item = addItem(key, createReq)
res.status(201).json(item)
} catch (appError) {
res.status(appError.statusCode).send({ message: appError.message })
}
})
router.patch('/:id', async (req, res) => {
const { id } = req.params
const { value: updateReq, error } = validateUpdateReq(config.schema, req.body)
if (error) {
return res.status(400).json({ message: error.message })
}
try {
const item = updateItem(key, id, updateReq)
res.json(item)
} catch (appError) {
res.status(appError.statusCode).send({ message: appError.message })
}
})
router.delete('/:id', async (req, res) => {
const { id } = req.params
try {
const item = deleteItem(key, id)
res.json(item)
} catch (appError) {
res.status(appError.statusCode).send({ message: appError.message })
}
})
return router
}
export default createRoute