@bee.js/node
Version:
A JavaScript framework for making Node.js API´s
133 lines (108 loc) • 3.52 kB
JavaScript
const beeORM = require("../ORM/beeORM");
const beeHive = require("../../beehive");
const fieldType = {
mysql: function (field) {
let type = field.type.split(" ")[0].trim();
switch (type) {
case "integer":
case "int":
type = "int";
break;
case "decimal":
type = `decimal(${(field.length || 10.1)
.toString()
.replace(".", ",")})`;
break;
case "string":
case "varchar":
type = `varchar(${field.length || 45})`;
break;
case "uuid":
case "guid":
type = `binary(16)`;
field.ai = false;
break;
case "char":
type = `char(${field.length || 5})`;
break;
case "file":
type = "blob";
break;
}
return (
type +
(!field.null ? " NOT NULL" : "") +
(field.ai ? " AUTO_INCREMENT" : "") +
(field.default !== undefined ? ` DEFAULT ${field.default}` : "") +
(field.default !== undefined && field.onUpdate
? ` ON UPDATE ${field.default}`
: "")
);
},
};
module.exports.actions = {
mysql: {
MODEL_STATEMENT_EXECUTE: async function (req, res) {
let hive = beeHive();
let data = await hive.dbExec(req.body.statement_execute);
res.status(200).send({ data: data });
},
MODEL_CREATE_DB: function (req, res) {
const configsDB = global.configs.databases.default;
const models = global.models;
const SQL = ["", ""];
//TODO create db with user permissions
Object.keys(models).map((model) => {
if (!req.body?.models?.[model]?._checked) return;
SQL[0] += this.MODEL_CREATE_TABLE(models[model], configsDB);
SQL[1] += models[model].relations
? this.MODEL_CREATE_CONSTRAINT(models[model], configsDB)
: "";
});
res.status(200).send({ data: SQL.join("") });
},
MODEL_CREATE_TABLE: function (model, configsDB) {
let q = beeORM.quote;
let SQL = "";
SQL = `CREATE TABLE IF NOT EXISTS ${q(model.table)} (`;
for (let field in model.schema)
SQL += `\n ${q(field)} ${fieldType[configsDB.drive](
model.schema[field]
)},`; // TODO criar funcao para relacionamentos.
SQL = SQL.slice(0, SQL.length - 1);
if (model.indexes) {
if (model.indexes.keys)
SQL += `,\n PRIMARY KEY (${q(model.indexes.keys)})`;
//TODO fazer uniques e cia. colocar em funcao.
}
SQL += `\n) ENGINE=${configsDB.engine} DEFAULT CHARSET=${configsDB.charset};\n\n`;
return SQL;
},
MODEL_CREATE_CONSTRAINT: function (model) {
const q = beeORM.quote;
let SQL = "\n\n\n";
SQL += `/*----- Constraints for table ${q(model.table)} -----*/\n`;
for (let field in model.relations)
SQL += `\n\n ALTER TABLE ${q(model.table)}\n ADD CONSTRAINT ${q(
`FK_${model.relations[field].split(".")[0]}_X_${
model.table
}_${field}`.slice(0, 64)
)}
FOREIGN KEY (${field})
REFERENCES ${model.relations[field].split(".")[0]} (${
model.relations[field].split(".")[1].split(" ")[0]
})
${"ON DELETE CASCADE"}
${"ON UPDATE CASCADE"};
\n\n`;
//SQL += `-- COMMIT; \n\n`
return SQL;
},
},
mssql: {
// TODO next version
},
mongoDB: {
// TODO next version
},
};