Skip to content

fabrix-app/spool-tapestries

Repository files navigation

spool-tapestries

Gitter NPM version Build Status Test Coverage Dependency Status Follow @fabrix-app on Twitter

Tapestries Spool. This spool provides the tapestry interface, which other spools such as spool-sequelize implement, as well as a suite of tests that Tapestry implementations should pass.

Fabrix Tapestries Diagram

What are Tapestries?

Tapestries automatically generate easy-to-use RESTful endpoints for your models.

Install

$ npm install @fabrix/spool-tapestries --save

Configure

// config/main.ts
export const main  {
  spools: [
    // ... other spools
    require('@fabrix/spool-tapestries').TapestriesSpool
  ]
}
// config/tapestries.ts
export const tapestries = {
  /**
   * Generate routes for controller handlers.
   * You can set controllers to true/false to enable/disable 
   * automatic tapestries routes globaly
   */
  controllers: {
               
     /**
      * Default methods to accept for routes generated from controller handlers.
      */
     method: '*',
  
     /**
      * List of controllers to ignore; that is, do not generate tapestry routes
      * for them.
      */
     ignore: [ ]
   },

  /**
   * Generate conventional Create, Read, Update, and Delete (CRUD) routes for
   * each Model.
   */
  models: {
    options: {

      /**
       * The max number of objects to return by default. Can be overridden in
       * the request using the ?limit argument.
       */
      defaultLimit: 100,

      /**
       * Subscribe to changes on requested models via WebSocket
       * (support provided by spool-websocket)
       */
      watch: false,

      /**
       * Whether to populate all model associations by default (for "find")
       */
      populate: true
    },

    actions: {
      create: true,
      find: true,
      update: true,
      destroy: true,

      /**
       * Specify which "association" endpoints to activate.
       */
      createAssociation: true,
      findAssociation: true,
      updateAssociation: true,
      destroyAssociation: true
    }
  },

  /**
   * Prefix your tapestry route paths
   */
  prefix: '/api/v1'
}

API

api.services.TapestryService

The purpose of TapestryService is to transform and forward queries to the datastore.

create (modelName, values, [options])

param required? description example
modelName Yes The name of the model to create (in api.models) User
values Yes An object containing the values of the record to create { username: 'admin' }
options No Datastore-specific options

find (modelName, criteria, [options])

param required? description example
modelName Yes The name of the model to search for (in api.models) User
criteria Yes An object containing the query criteria { username: 'admin' }
options No Datastore-specific options

update (modelName, criteria, values, [options])

param required? description example
modelName Yes The name of the model to create (in api.models) User
criteria Yes An object containing the query criteria { username: 'admin' }
values Yes An object containing the values to update { username: 'tjwebb' }
options No Datastore-specific options

destroy (modelName, criteria, options)

param required? description example
modelName Yes The name of the model to create (in api.models) User
criteria Yes An object containing the query criteria { username: 'admin' }
values Yes An object containing the values to update { username: 'tjwebb' }
options No Datastore-specific options

createAssociation (parentModelName, parentId, childAttributeName, values, [options])

param required? description example
parentModelName Yes The name of the parent model User
parentId Yes The id of the parent model 1
childAttributeName Yes The name of the attribute to create and associate with the parent roles
values Yes An object containing the values to create { name: 'adminRole' }
options No Datastore-specific options

findAssociation (parentModelName, parentId, childAttributeName, criteria, [options])

param required? description example
parentModelName Yes The name of the parent model User
parentId Yes The id of the parent model 1
childAttributeName Yes The name of the attribute to create and associate with the parent roles
criteria Yes An object containing the criteria to search on, or an id { name: 'adminRole' }
options No Datastore-specific options

updateAssociation (parentModelName, parentId, childAttributeName, criteria, values, [options])

param required? description example
parentModelName Yes The name of the parent model User
parentId Yes The id of the parent model 1
childAttributeName Yes The name of the attribute to create and associate with the parent roles
criteria Yes An object containing the criteria to search on, or an id { name: 'adminRole' }
values Yes An object containing the values to update { name: 'adminRole' }
options No Datastore-specific options

destroyAssociation (parentModelName, parentId, childAttributeName, criteria, [options])

param required? description example
parentModelName Yes The name of the parent model User
parentId Yes The id of the parent model 1
childAttributeName Yes The name of the attribute to destroy and dissociate from the parent roles
criteria Yes An object containing the criteria to search on, or an id { name: 'adminRole' }
options No Datastore-specific options

api.controllers.TapestryController

The purpose of the TapestryController is to transform and forward requests to the TapestryService.