@coding-blocks/jsonapi-server
Version:
A config driven NodeJS framework implementing json:api
47 lines (38 loc) • 1.37 kB
JavaScript
const fields = module.exports = { }
const jsonApi = require('../jsonApi.js')
fields.action = (request, response, callback) => {
const resourceList = request.params.fields
if (!resourceList || !(resourceList instanceof Object)) return callback()
const allDataItems = response.included.concat(response.data)
const fields = {}
for (const resource in resourceList) {
if (!jsonApi._resources[resource]) {
return callback({ // eslint-disable-line standard/no-callback-literal
status: '403',
code: 'EFORBIDDEN',
title: 'Invalid field resource',
detail: `${resource} is not a valid resource `
})
}
fields[resource] = (`${resourceList[resource]}`).split(',')
for (const j of fields[resource]) {
if (!jsonApi._resources[resource].attributes[j]) {
return callback({ // eslint-disable-line standard/no-callback-literal
status: '403',
code: 'EFORBIDDEN',
title: 'Invalid field selection',
detail: `${resource} do not have property ${j}`
})
}
}
}
allDataItems.forEach(dataItem => {
Object.keys(dataItem.attributes).forEach(attribute => {
if (fields[dataItem.type] && fields[dataItem.type].indexOf(attribute) === -1) {
delete dataItem.attributes[attribute]
}
})
})
return callback()
}