@liveaxle/mbwb-data-models
v1.18.4
Published
Building with Beer - Data Models
Downloads
11
Readme
mbwb-data-models
The purpose of this repository is to provide a decoupled yet centralized place for data models and their generic functionality to live.
These are the things you do with MBWB data models:
- Create objects to help you validate data during definition operations (ie, data coming from a feed).
- Create objects to represent how the model should look in a PostGres table.
- Designate the type of model.
- Store any additional information on the model that could be used in multiple places.
Installation
npm install @liveaxle/mbwb-data-models
Usage - Creation
- To create a model, simply create a file named after the model you wish to represent at the root of this repository. If the model has multiple words please use dashes in the file name.
- Require and export it in
./index.js
- Create the model code:
const joi = require('joi');
const Model = require('./lib/model');
module.exports = class <my model name camel case> extends Model {
}
4.0 Hydrate model
Hydrating the model has different requirements depending on what you want to do with it:
| Purpose | Requirements | Functionality | | |
|---|---|---|---|---|
| definition | Model.definition
getter | Model.validate
| | |
| Migrations | Model.name
, Model.columns
, Model.extensions (opt)
| Model.factory.sql()
| | |
| | | | | |
4.1 definition:
module.exports = class <my model name camel case> extends Model {
// Use joi to create your expected schema
static get definition() {
return joi.object().keys({
distributorNumber: joi.string().required(),
distributorName : joi.string().required()
})
}
// You can use mappings to help you reconcile a data structure with the table's column structure
static get mappings() {
return {
name: 'distributorName',
number: 'distributorNumber'
};
}
}
4.2 Migrations:
module.exports = class <my model name camel case> extends Model {
static get name() { return 'name'; } // this is the actual postgres table name, be sure to use underscores.
static get type() { return 'table'} // can be table, enum or composite
static get columns() {
return {
id: {type: 'uuid', required: true, default: 'uuid_generate_v4()', primary: true},
other_id: {type: uuid, references: 'other_table'}
name: {required: true, type: 'text'},
number: {require: true, type: 'text'}
}
}
static get extensions() { return ['uuid-ossp']; }
}
Then, in your migrations you can:
const {<my model>} = require('@liveaxle/mbwb-data-models');
async funcion up(client) {
let sql = <my model>.factory.sql();
client.schema.raw(sql);
}
Version bumping
Commit and push code changes first.
- npm version <major|minor|patch>
- git push
- git push origin —tags
- npm login (only necessary once)
- npm publish