1.0.2 • Published 7 years ago

blue-data-model v1.0.2

Weekly downloads
3
License
MIT
Repository
github
Last release
7 years ago

Blue Data Model

A simple relational data model in javascript. It supports defining basic relations (one to one, one to many) and does simple task and checks on your defined fields (type check, value converts, composite fields). The model accept composite keys and ensure constraints and keep a state of their dirtiness and validity based on the state of their fields. Some effort was made so the model instances will JSON.stringify only the fields data.

Installation

npm install blue-data-model

Usage

BlueDataModel = require('./src/index.js');

BlueDataModel.define('Person', {
  fields: ['id', 'name', 'id_team', 'role']
});

BlueDataModel.define('Team', {
  fields:['id', 'name', 'id_coach'],
  hasOne:[{
    model: BlueDataModel.Person,
    key: 'coach',
    foreignKey: ['id'],
    sourceKey: ['id_coach']
  }],
  hasMany:[{
    model: BlueDataModel.Person,
    key: 'players',
    foreignKey: ['id_team'],
    sourceKey: ['id']
  }]
});

let playersCfg = [{
  id: 1,
  name: 'Johny',
  role: "player"
}, {
  id:2,
  name: 'Billy',
  role: "player"
}, {
  id:3,
  name: 'Hans',
  role: "player"
}, {
  id:4,
  name: 'Karl',
  role: "player"
}];

let teamA = BlueDataModel.Team.create({
  id:1,
  name: 'Team A',
  coach: {
      'id': '999',
      name: 'A',
      role: 'cocach'
    },
    players: playersCfg
  });
let teamB = new BlueDataModel.Team({id:2, name: 'Team B'});
let coachA = new BlueDataModel.Person({id: 100, name: 'Boss', role: 'coach'});
let coachB = new BlueDataModel.Person({id: 200, name: 'The Boss', role: 'coach'});

teamA.coach = coachA;
coachA.id= 333;
teamB.coach = coachB;
coachB.id = 222;

teamB.players = playersCfg;


console.log(JSON.stringify(teamA));

console.log(JSON.stringify(teamB));

Output

   {  
      "id":1,
      "name":"Team A",
      "id_coach":333,
      "coach":{  
         "id":333,
         "name":"Boss",
         "role":"coach"
      },
      "players":[  
         {  
            "id":1,
            "name":"Johny",
            "id_team":1,
            "role":"player"
         },
         {  
            "id":2,
            "name":"Billy",
            "id_team":1,
            "role":"player"
         },
         {  
            "id":3,
            "name":"Hans",
            "id_team":1,
            "role":"player"
         },
         {  
            "id":4,
            "name":"Karl",
            "id_team":1,
            "role":"player"
         }
      ]
   }
{  
   "id":2,
   "name":"Team B",
   "id_coach":222,
   "coach":{  
      "id":222,
      "name":"The Boss",
      "role":"coach"
   },
   "players":[  
      {  
         "id":1,
         "name":"Johny",
         "id_team":2,
         "role":"player"
      },
      {  
         "id":2,
         "name":"Billy",
         "id_team":2,
         "role":"player"
      },
      {  
         "id":3,
         "name":"Hans",
         "id_team":2,
         "role":"player"
      },
      {  
         "id":4,
         "name":"Karl",
         "id_team":2,
         "role":"player"
      }
   ]
}
1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago