crud-subservice
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
Installation
npm install crud-subservice
Usage
var CrudService = Subservice = save = customerSchema = addressSchema = customerService = 'customer' addressService = 'addresses' customerService // addressService now has the methods create(), update(), read() and delete()// and stores its items on customerService entities at the .addresses property.
API
var sub = new Subservice(String: propertyName, CrudService: service, Schemata: schema)
Create a new subservice that stores entites on the parent service
entities on the property
propertyName
. A schemata
schema is required for validation.
subservice.create(String: entityId, Object: obj, Function: cb)
Create a subservice entity obj
on the parent entity with id = entityId
. Callback
has the signature function (err, savedObj) {}
.
subservice.read(String: entityId, String: objId, Function: cb)
Read a subservice entity with id = objId
on the parent entity with
id = entityId
. Callback has the signature function (err, obj) {}
.
subservice.update(String: entityId, Object: obj, Function: cb)
Update a subservice entity with new properties obj
on the parent entity with
id = entityId
. Callback has the signature function (err, updateObj) {}
.
subservice.delete(String: entityId, String: objId, Function: cb)
Delete a subservice entity with id = objId
on the parent entity with
id = entityId
. Callback has the signature function (err, deletedObj) {}
.
Subservices within subservices
(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
Note that the order of the array is left -> right / parent -> child.
Licence
Licensed under the New BSD License