Add option to plural routes

This commit is contained in:
typicode
2018-12-25 23:29:08 +01:00
parent aef028779f
commit bbc2011ec3
3 changed files with 132 additions and 21 deletions

View File

@ -12,7 +12,7 @@ const nested = require('./nested')
const singular = require('./singular')
const mixins = require('../mixins')
module.exports = (db, opts = { foreignKeySuffix: 'Id' }) => {
module.exports = (db, opts = { foreignKeySuffix: 'Id', _isFake: false }) => {
if (typeof db === 'string') {
db = low(new FileSync(db))
} else if (!_.has(db, '__chain__') || !_.has(db, '__wrapped__')) {

View File

@ -255,10 +255,19 @@ module.exports = (db, name, opts) => {
// POST /name
function create(req, res, next) {
const resource = db
.get(name)
.insert(req.body)
.value()
let resource
if (opts._isFake) {
const id = db
.get(name)
.createId()
.value()
resource = { ...req.body, id }
} else {
resource = db
.get(name)
.insert(req.body)
.value()
}
res.setHeader('Access-Control-Expose-Headers', 'Location')
res.location(`${getFullURL(req)}/${resource.id}`)
@ -273,14 +282,29 @@ module.exports = (db, name, opts) => {
// PATCH /name/:id
function update(req, res, next) {
const id = req.params.id
let chain = db.get(name)
let resource
chain =
req.method === 'PATCH'
? chain.updateById(id, req.body)
: chain.replaceById(id, req.body)
if (opts._isFake) {
resource = db
.get(name)
.getById(id)
.value()
const resource = chain.value()
if (req.method === 'PATCH') {
resource = { ...resource, ...req.body }
} else {
resource = { ...req.body, id: resource.id }
}
} else {
let chain = db.get(name)
chain =
req.method === 'PATCH'
? chain.updateById(id, req.body)
: chain.replaceById(id, req.body)
resource = chain.value()
}
if (resource) {
res.locals.data = resource
@ -291,18 +315,24 @@ module.exports = (db, name, opts) => {
// DELETE /name/:id
function destroy(req, res, next) {
const resource = db
.get(name)
.removeById(req.params.id)
.value()
let resource
// Remove dependents documents
const removable = db._.getRemovable(db.getState(), opts)
removable.forEach(item => {
db.get(item.name)
.removeById(item.id)
if (opts._isFake) {
resource = db.get(name).value()
} else {
resource = db
.get(name)
.removeById(req.params.id)
.value()
})
// Remove dependents documents
const removable = db._.getRemovable(db.getState(), opts)
removable.forEach(item => {
db.get(item.name)
.removeById(item.id)
.value()
})
}
if (resource) {
res.locals.data = {}