Nest crud-services within crud-services. Useful if you have any sort of rich nested item within your service entities that you want to store within the same object, eg:
- delivery addresses for a customer
- downloads on an article
- available sizes of an item of clothing
npm install crud-subservice
var CrudService = require('crud-service')
, Subservice = require('crud-subservice')
, save = require('save')
, customerSchema = require('./customer-schema')
, addressSchema = require('./address-schema')
, customerService = new CrudService('customer', save('customer'), customerSchema())
, addressService = new Subservice('addresses', customerService, addressSchema())
// addressService now has the methods create(), update(), read() and delete()
// and stores its items on customerService entities at the .addresses property.
Create a new subservice that stores entites on the parent service
entities on the property
propertyName
. A schemata
schema is required for validation.
Create a subservice entity obj
on the parent entity with id = entityId
. Callback
has the signature function (err, savedObj) {}
.
Read a subservice entity with id = objId
on the parent entity with
id = entityId
. Callback has the signature function (err, obj) {}
.
Update a subservice entity with new properties obj
on the parent entity with
id = entityId
. Callback has the signature function (err, updateObj) {}
.
Delete a subservice entity with id = objId
on the parent entity with
id = entityId
. Callback has the signature function (err, deletedObj) {}
.
(aka. subservice inception)
It is possible to nest subservices within subservices (within subservices, within subservices etc.).
The only thing that needs to be considered is that the lookup key for level of nesting must be provided:
{ _id: '123'
, name: 'The Who'
, members:
[ { _id: '234'
, name: 'Keith Moon'
, instruments:
[ { _id: '345'
, name: 'snare drum'
}
]
}
]
}
In order to perform functions on the band.member.instrument
subservice, you would have to pass the _id
s
for each object in the hierarchy as an array. In the docs above, any String: entityId
argument (represents
the parent entity) should be replaced with this array, e.g:
instrumentService.read([ '123', '234' ], '345', function (err, obj) {
//-> got keith mooon's snare
})
Note that the order of the array is left -> right / parent -> child.
Licensed under the New BSD License