Nixon's Pants Missing

    objection-unique

    1.2.2 • Public • Published

    Unique validation for Objection.js

    npm node Build Status Coverage Status

    This plugin adds a unique validation for Objection.js models.

    NOTE: Unique validation at update only works with $query methods.

    Installation

    NPM

    npm i objection-unique --save

    Yarn

    yarn add objection-unique

    Usage

    Mixin the plugin

    // Import objection model.
    const Model = require('objection').Model;
    
    // Import the plugin.
    const unique = require('objection-unique')({
      fields: ['email', 'username', ['phone_prefix','phone_number']],
      identifiers: ['id']
    });
    
    // Mixin the plugin.
    class User extends unique(Model) {
      static get tableName() {
        return 'User';
      }
    }

    Validate insert

    /**
     * Insert.
     */
    
    // Insert one user.
    await User.query().insert({ email: 'foo', username: 'bar' });
    
    try {
      // Try to insert another user with the same data.
      await User.query().insert({ email: 'foo', username: 'bar' });
    } catch (e) {
        // Exception with the invalid unique fields
        //
        // {
        //   email: [{
        //     keyword: 'unique',
        //     message: 'email already in use.'
        //   }],
        //   username: [{
        //     keyword: 'unique',
        //     message: 'username already in use.'
        //   }
        // }
    }

    Validate update/patch

    /**
     * Update/Patch.
     */
    
    // Insert one user.
    await User.query().insert({ email: 'foo', username: 'bar' });
    
    // Insert the user that we want to update.
    const user = await User.query().insertAndFetch({ email: 'biz', username: 'buz' });
    
    try {
      user.$query().update({ email: 'foo', username: 'buz' });
      // user.$query().patch({ email: 'foo' });
    } catch (e) {
      // Exception with the invalid unique fields
      //
      // {
      //   email: [{
      //     keyword: 'unique',
      //     message: 'email already in use.'
      //   }]
      // }
    }

    Options

    fields: The unique fields. Compound fields can be specified as an array

    identifiers: The fields that identifies the model. (Default: ['id'])

    These options can be provided when instantiating the plugin:

    const unique = require('objection-unique')({
      fields: ['email', 'username', ['phone_prefix', 'phone_number']],
      identifiers: ['id']
    });

    Tests

    Run the tests from the root directory:

    npm test

    Contributing & Development

    Contributing

    Found a bug or want to suggest something? Take a look first on the current and closed issues. If it is something new, please submit an issue.

    Develop

    It will be awesome if you can help us evolve objection-unique. Want to help?

    1. Fork it.
    2. npm install.
    3. Hack away.
    4. Run the tests: npm test.
    5. Create a Pull Request.

    Install

    npm i objection-unique

    DownloadsWeekly Downloads

    1,157

    Version

    1.2.2

    License

    MIT

    Unpacked Size

    23.4 kB

    Total Files

    14

    Last publish

    Collaborators

    • nunorafaelrocha
    • seegno
    • joaonice