crud-subservice

Nest crud-services within crud-services

npm install crud-subservice
14 downloads in the last month

crud-subservice

Build Status

NPM

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 = 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.

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 _ids 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.

Licence

Licensed under the New BSD License

npm loves you