sae-framework
Version:
Framework to Server Api Engine JS to make micro services
271 lines (221 loc) • 5.7 kB
JavaScript
const Sequelize = require('sequelize');
const muttations = require('./datatypes/muttations');
module.exports = {
/**
* Add campo ID.
* @param {*} opts
* @returns {Object}
*/
id : (opts = {}) => {
var ret = {
type: Sequelize.STRING(36),
allowNull: false,
autoIncrement: false,
primaryKey: true,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Association (lookup).
* @param {String} table Nome da tabela estrangeira
* @param {*} opts
* @returns {Object}
*/
association : (table, opts = {}) => {
var ret = {
type: Sequelize.STRING(36),
allowNull: true,
references: {
key: 'id',
model: table
}
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Association remota (lookup).
* @param {String} table Nome da tabela estrangeira
* @param {*} opts
* @returns {Object}
*/
remoteAssociation : (table, opts = {}) => {
var ret = {
type: Sequelize.STRING(36),
allowNull: true,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo String.
* @param {Number} len Largura maxima da string
* @param {*} opts
* @returns {Object}
*/
string: (len = 255, opts = {}) => {
var ret = {
type: Sequelize.STRING(len),
allowNull: true,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Inteiro.
* @param {*} opts
* @returns {Object}
*/
integer: (opts = {}) => {
var ret = {
type: Sequelize.INTEGER,
allowNull: true,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Número.
* @param {*} opts
* @returns {Object}
*/
number: (opts = {}) => {
var ret = {
type: Sequelize.DECIMAL(10, 5),
allowNull: true,
get(nome) {
return muttations.number.get(this, nome);
}
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Lógico.
* @param {*} opts
* @returns {Object}
*/
boolean: (opts = {}) => {
var ret = {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Data e Hora.
* @param {*} opts
* @returns {Object}
*/
dateTime: (opts = {}, migration = false) => {
if (typeof opts == 'boolean') {
migration = opts;
opts = {};
}
var ret = {
type: Sequelize.DATE,
allowNull: true,
set(value, name) {
muttations.date.set(this, name, value, 'YYYY-MM-DD HH:mm:ss');
}
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Data.
* @param {*} opts
* @returns {Object}
*/
date: (opts = {}, migration = false) => {
if (typeof opts == 'boolean') {
migration = opts;
opts = {};
}
var ret = {
type: Sequelize.DATEONLY,
allowNull: true,
set(value, name) {
muttations.date.set(this, name, value, 'YYYY-MM-DD');
}
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Texto.
* @param {*} opts
* @returns {Object}
*/
text: (opts = {}) => {
var ret = {
type: Sequelize.TEXT,
allowNull: true,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Enum
* @param {Array} values Lista de opções
* @param {*} opts
* @returns {Object}
*/
enum: (values, opts = {}) => {
var ret = {
type: Sequelize.ENUM,
values : values,
allowNull: true,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo Password.
* @param {*} opts
* @returns {Object}
*/
password: (opts = {}) => {
var ret = {
type: Sequelize.PASSWORD,
allowNull: true,
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo JSON.
* @param {*} opts
* @returns {Object}
*/
json: (opts = {}) => {
var ret = {
type: Sequelize.TEXT,
allowNull: true,
get(nome) {
var ret = JSON.parse(this.getDataValue(nome));
return (!ret) ? {} : ret;
},
set(value, nome) {
this.setDataValue(nome, ((typeof value == 'object') ? JSON.stringify(value) : '{}'));
}
};
Object.assign(ret, opts);
return ret;
},
/**
* Add campo VIRTUAL.
* @param {*} opts
* @returns {Object}
*/
virtual: (opts = {}) => {
var ret = {
type: Sequelize.VIRTUAL,
};
Object.assign(ret, opts);
return ret;
},
};