Skip to content

trailsjs/trailpack-sequelize

Repository files navigation

trailpack-sequelize

📦 Sequelize.js Trailpack http://sequelizejs.com

Gitter Known Vulnerabilities NPM version Build status Dependency Status Code Climate

Loads Application Models (in api/models) into the Sequelize ORM; Integrates with trailpack-router to generate Footprints for routes.

Usage

Configure

// config/main.js
module.exports = {
  // ...
  packs: [
    require('trailpack-sequelize')
  ]
}

A basic config/database.js can be found here : https://github.com/trailsjs/trailpack-sequelize/blob/master/archetype/config/database.js

Models

module.exports = class User extends Model {
  //More about supported schema here : http://docs.sequelizejs.com/en/latest/docs/models-definition/
  static schema (app, Sequelize) {
    return {
       name: { type: Sequelize.STRING, allowNull: false },
       password: Sequelize.STRING,
       displayName: Sequelize.STRING
     }
  }

  static config (app, Sequelize) {
    return {
       migrate: 'drop', //override default models configurations if needed
       store: 'sqlite', //override default models configurations if needed
       //More informations about supported models options here : http://docs.sequelizejs.com/en/latest/docs/models-definition/#configuration
       options: {
         classMethods: {
           //If you need associations, put them here
           associate: (models) => {
             //More information about associations here : http://docs.sequelizejs.com/en/latest/docs/associations/
             models.User.hasMany(models.Role, {
               as: 'roles',
               onDelete: 'CASCADE',
               foreignKey: {
                 allowNull: true
               }
             })
           }
         }
       }
     }
  }
}

Query

// api/services/UserService.js
module.exports = class UserService extends Service {
  /**
   * Finds people with the given email.
   * @return Promise
   * @example {
   *    name: 'Ludwig Beethoven',
   *    email: 'someemail@email.com',
   *    favoriteColors: [
   *      { name: 'yellow', hex: 'ffff00' },
   *      { name: 'black', hex: '000000' }
   *     ]
   * }
   */
  findUser (email) {
    //More info about queries here : http://docs.sequelizejs.com/en/latest/docs/models-usage/
    return this.app.orm.User.find({ where: {email: email} })
  }
}

For more informations about sequelize queries, please look at the official documentation

Footprints query options

Some options can be provide as query param for the find method, example GET /api/v1/user.

Populate

You can add /api/v1/user?populate=all to populate all associations or use /api/v1/user?populate=field1,field2 to populate only some association.

Pagination

By settings offset and limit you can do some pagination, example /api/v1/user?offset=10&limit=10 will return only 10 items started from 10 (id 10 to 20).

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

License

MIT

Changelog

Changelog