1
This commit is contained in:
168
config/template/db.ejs
Normal file
168
config/template/db.ejs
Normal file
@@ -0,0 +1,168 @@
|
||||
const dayjs = require("dayjs");
|
||||
const Sequelize = require("sequelize");
|
||||
|
||||
const config ={
|
||||
"username": "<%=dbConfig.username%>",
|
||||
"password": "<%=dbConfig.password%>",
|
||||
"database": "<%=dbConfig.database%>",
|
||||
"host": "<%=dbConfig.host%>",
|
||||
"port": <%=dbConfig.port%>,
|
||||
"dialect": "<%=dbConfig.dialect%>"
|
||||
}
|
||||
|
||||
let model = {};
|
||||
|
||||
const logEditField = (oldRow, newRow) => {
|
||||
let str = ``;
|
||||
oldRow = oldRow.toJSON ? oldRow.toJSON() : oldRow;
|
||||
newRow = newRow ? newRow.toJSON() : newRow;
|
||||
|
||||
let keyRows = Object.keys(oldRow);
|
||||
for (let i = 0; i < keyRows.length; i++) {
|
||||
let key = keyRows[i];
|
||||
|
||||
if (key !== "create_time" && key !== "last_modify_time" && oldRow[key] !== newRow[key]) {
|
||||
let oldVal = oldRow[key];
|
||||
if (typeof oldVal === "string") {
|
||||
oldVal = oldVal.replace(/<p>/g, "").replace(/<\/p>/g, "");
|
||||
}
|
||||
|
||||
let newVal = newRow[key];
|
||||
if (typeof newVal === "string") {
|
||||
newVal = newVal.replace(/<p>/g, "").replace(/<\/p>/g, "");
|
||||
}
|
||||
str += ` ${key} 从<span class="bold"> ${oldVal} </span> 变更为 <span class="bold"> ${newVal} </span>,<br>`;
|
||||
}
|
||||
}
|
||||
return str;
|
||||
};
|
||||
|
||||
const logCreateField = (oldRow) => {
|
||||
let str = ``;
|
||||
oldRow = oldRow.toJSON ? oldRow.toJSON() : oldRow;
|
||||
let keyRows = Object.keys(oldRow);
|
||||
|
||||
for (let i = 0; i < keyRows.length; i++) {
|
||||
let key = keyRows[i];
|
||||
|
||||
if (key !== "create_time" && key !== "last_modify_time") {
|
||||
let newVal = oldRow[key];
|
||||
if (typeof newVal === "string") {
|
||||
newVal = newVal.replace(/<p>/g, "").replace(/<\/p>/g, "");
|
||||
}
|
||||
|
||||
str += `<span class="bold"> ${key} </span> 为 <span class="bold"> ${newVal} </span>,<br>`;
|
||||
}
|
||||
}
|
||||
return str;
|
||||
};
|
||||
|
||||
let sequelize = new Sequelize(config.database, config.username, config.password, {
|
||||
host: config.host,
|
||||
dialect: config.dialect,
|
||||
pool: {
|
||||
max: 5,
|
||||
min: 0,
|
||||
idle: 10000,
|
||||
},
|
||||
dialectOptions: {
|
||||
charset: "utf8mb4",
|
||||
collate: "utf8mb4_unicode_ci",
|
||||
supportBigNumbers: true,
|
||||
bigNumberStrings: true,
|
||||
},
|
||||
});
|
||||
|
||||
const define = (name, attributes) => {
|
||||
let attrs = {};
|
||||
for (let key in attributes) {
|
||||
let value = attributes[key];
|
||||
if (typeof value === "object" && value["type"]) {
|
||||
value.allowNull = value.allowNull || false;
|
||||
attrs[key] = value;
|
||||
} else {
|
||||
attrs[key] = {
|
||||
type: value,
|
||||
allowNull: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
attrs.create_time = {
|
||||
type: Sequelize.DATE,
|
||||
allowNull: false,
|
||||
defaultValue: sequelize.literal("CURRENT_TIMESTAMP"),
|
||||
comment: "创建时间",
|
||||
get() {
|
||||
return dayjs(this.getDataValue("create_time")).format("YYYY-MM-DD HH:mm:ss");
|
||||
},
|
||||
};
|
||||
|
||||
attrs.last_modify_time = {
|
||||
type: Sequelize.DATE,
|
||||
allowNull: false,
|
||||
comment: "最后更新时间",
|
||||
defaultValue: sequelize.literal("CURRENT_TIMESTAMP"),
|
||||
get() {
|
||||
return dayjs(this.getDataValue("last_modify_time")).format("YYYY-MM-DD HH:mm:ss");
|
||||
},
|
||||
};
|
||||
|
||||
model[name] = sequelize.define(name, attrs, {
|
||||
tableName: name,
|
||||
timestamps: false,
|
||||
hooks: {
|
||||
beforeValidate: (obj) => {
|
||||
let now = Date.now();
|
||||
if (obj.isNewRecord) {
|
||||
obj.create_time = now;
|
||||
obj.last_modify_time = now;
|
||||
} else {
|
||||
obj.last_modify_time = now;
|
||||
}
|
||||
},
|
||||
afterCreate: async (obj) => {
|
||||
let tableName = obj._modelOptions.tableName;
|
||||
if (tableName !== "sys_log") {
|
||||
let logStr = logCreateField(obj);
|
||||
await model["sys_log"].create({ table_name: tableName, operate: "新增", content: logStr });
|
||||
}
|
||||
},
|
||||
|
||||
afterDestroy: async (obj) => {
|
||||
let id = obj.id;
|
||||
let tableName = obj._modelOptions.tableName;
|
||||
if (tableName !== "sys_log") {
|
||||
await model["sys_log"].create({ table_name: tableName, operate: "删除", content: `用户删除id为 <span class="bold"> ${id} </span>` });
|
||||
}
|
||||
},
|
||||
|
||||
beforeUpdate: async (obj) => {
|
||||
let tableName = obj._modelOptions.tableName;
|
||||
if (tableName !== "sys_log") {
|
||||
let id = obj.id;
|
||||
let tableName = obj._modelOptions.tableName;
|
||||
let updateRow = await model[tableName].findOne({ where: { id } });
|
||||
let logStr = logEditField(updateRow, obj);
|
||||
await model["sys_log"].create({ table_name: tableName, operate: "修改", content: logStr });
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return model[name];
|
||||
};
|
||||
|
||||
let exp = {
|
||||
sequelize,
|
||||
define,
|
||||
sync: () => {
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
sequelize.sync({ force: false });
|
||||
} else {
|
||||
throw new Error("Cannot sync() when NODE_ENV is set to 'production'.");
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = exp;
|
||||
Reference in New Issue
Block a user