UNPKG

@bee.js/node

Version:

A JavaScript framework for making Node.js API´s

133 lines (108 loc) 3.52 kB
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 }, };