mgm
Version:
My generic modules
103 lines (85 loc) • 3.18 kB
JavaScript
const BaseEntity = require('../model/BaseEntity');
const Tools = require('../tool/Tools');
module.exports = class BaseDAO {
constructor() {
this.dataBase = require('../db/DataBase');
}
addConditions(sql, entity) {
Object.keys(entity).forEach(key => {
if (entity[key] instanceof Array) {} else if (entity[key] instanceof BaseEntity) {
//sql.push("AND " + p + "_id = '" + entity[p].id + "' ");
} else if (entity[key] != '') {
sql.push(`AND ${key} = '${entity[key]}' `);
}
});
}
getDeleteSql(entity) {
let sql = [];
sql.push(`DELETE `);
sql.push(`FROM ${entity.constructor.name} `);
sql.push(`WHERE 1 = 1 `);
this.addConditions(sql, entity);
return sql;
}
getQuerySql(entity) {
let sql = [];
sql.push(`SELECT * `);
sql.push(`FROM ${entity.constructor.name} `);
sql.push(`WHERE 1 = 1 `);
this.addConditions(sql, entity);
sql.push(`ORDER BY dataCadastro DESC `);
return sql;
}
getSaveSql(entity) {
let sql = [];
let fields = [];
let values = [];
sql.push(`INSERT INTO ${entity.constructor.name} `);
Object.keys(entity).forEach(key => {
if (entity[key] instanceof Array) {} else if (entity[key] instanceof BaseEntity) {} else {
fields.push(key);
}
});
Object.keys(entity).forEach(key => {
if (entity[key] instanceof Array) {} else if (entity[key] instanceof BaseEntity) {} else if (entity[key] != '') {
values.push(`'${entity[key]}'`);
} else {
values.push("null");
}
});
sql.push(`(${fields.join(', ')}) VALUES (${values.join(', ')}) `);
return sql;
}
getUpdateSql(entity) {
let sql = [];
let update = [];
sql.push(`UPDATE ${entity.constructor.name} `);
Object.keys(entity).forEach(key => {
if (entity[key] instanceof Array) {} else if (entity[key] instanceof BaseEntity) {} else if (entity[key] != '') {
update.push(key + ` = '${entity[key]}'`);
} else {
update.push(key + ` = null`);
}
});
sql.push(`SET ${update.join(', ')} `);
sql.push(`WHERE ID = ${entity.id} `);
return sql;
}
runSql(sql) {
return this.dataBase.runSql(sql);
}
doSearch(entity) {
return entity.transformAll(this.dataBase.query(this.getQuerySql(entity)));
}
doDelete(entity) {
this.dataBase.update(this.getDeleteSql(entity));
}
doSave(entity) {
if (entity.id === '') {
this.dataBase.update(this.getSaveSql(entity.setDataCadastro(Tools.formatDate(new Date()))));
entity.id = this.dataBase.unique([`SELECT MAX(id) id FROM ${entity.constructor.name}`]).id;
} else {
this.dataBase.update(this.getUpdateSql(entity));
}
}
};