Coder Social home page Coder Social logo

loopback-save-relation-mixin's Introduction

Loopback save relation mixin

What does this do?

It provides a way to save related models when creating records.

For example if the model ApplicationUser hasOne Profile you will be able to send:

PATCH /api/ApplicationUsers

{ 
  "email": "[email protected]",
  "password": "123456",
  "profile": {
    "name": "user 1"
  } 
}

How does this work?

First you must install this package through npm

$ npm install loopback-save-relation-mixin --save

Then you have to configure the file model-config.json to load the mixin.

"mixins": [
  ...
  "../node_modules/loopback-save-relation-mixin",
  ...]

And finally you can configure your model so it enables saving a related model.

{
  "name": "ApplicationUser",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": false
  },
  "mixins": {
    "SaveRelation": {
      "relations": ["profile", "orders", "projects", "tickets"]
    }
  },
  "relations": {
    "profile": {
      "type": "hasOne",
      "model": "Profile",
      "foreignKey": "userId"
    },
    "orders": {
      "type": "hasMany",
      "model": "Order",
      "foreignKey": "userId"
    },
    "projects": {
      "type": "hasMany",
      "model": "Project",
      "foreignKey": "userId",
      "through": "UserProject"
    },
    "tickets": {
      "type": "hasAndBelongsToMany",
      "model": "Ticket"
    }
  }
}

It works for:

  the loopback saveRelation mixin
    given a hasOne relation type
      ✓ should be saved
      ✓ should be updated
      ✓ should be deletable by sending an empty object
      ✓ should be deletable by sending null
    given a hasMany relation type
      ✓ should be saved
      ✓ should be updated
      ✓ should able to remove one relatedObject
      ✓ should able to remove all the relatedObjects by sending null
      ✓ should able to remove all the relatedObjects by sending an empty array
      ✓ should be updatable and deletable in the same operation
    given a hasManyThrough relation type
      ✓ should create the relatedObjects if they do not exist in the database and save the relations
      ✓ should be saved if the related objects do exist in the database
      ✓ should be deletable
    given a hasAndBelongsToMany relation type
      ✓ should create the relatedObjects if they do not exist in the database and save the relations
      ✓ should be saved if the related objects do exist in the database
      ✓ should be deletable

loopback-save-relation-mixin's People

Contributors

xavi-tristancho avatar

Watchers

 avatar

Forkers

joanantoni

loopback-save-relation-mixin's Issues

Relation included multiple times

In save-relation.js, removeRelatedObjects() doesnt check if relation already exists before call Model.FindById. Therefore, if the relation is already included, some hooks are triggered multiple times for the same relation.

I suggest check if the instance already has the relation. If not, include it on the call to FindById

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.