feat: 新增数据库sql执行记录&执行前原值等信息

This commit is contained in:
meilin.huang
2022-06-16 15:55:18 +08:00
parent f58331c1c1
commit 9b9173dea7
81 changed files with 559 additions and 1467 deletions

View File

@@ -21,9 +21,10 @@ import (
)
type Db struct {
DbApp application.Db
MsgApp sysApplication.Msg
ProjectApp application.Project
DbApp application.Db
DbSqlExecApp application.DbSqlExec
MsgApp sysApplication.Msg
ProjectApp application.Project
}
// @router /api/dbs [get]
@@ -49,7 +50,10 @@ func (d *Db) Save(rc *ctx.ReqCtx) {
}
func (d *Db) DeleteDb(rc *ctx.ReqCtx) {
d.DbApp.Delete(GetDbId(rc.GinCtx))
dbId := GetDbId(rc.GinCtx)
d.DbApp.Delete(dbId)
// 删除该库的sql执行记录
d.DbSqlExecApp.DeleteBy(&entity.DbSqlExec{DbId: dbId})
}
func (d *Db) TableInfos(rc *ctx.ReqCtx) {
@@ -68,19 +72,22 @@ func (d *Db) GetCreateTableDdl(rc *ctx.ReqCtx) {
rc.ResData = d.DbApp.GetDbInstance(GetIdAndDb(rc.GinCtx)).GetCreateTableDdl(tn)
}
// @router /api/db/:dbId/exec-sql [get]
func (d *Db) ExecSql(rc *ctx.ReqCtx) {
g := rc.GinCtx
form := &form.DbSqlExecForm{}
ginx.BindJsonAndValid(g, form)
id, db := GetIdAndDb(g)
id := GetDbId(g)
db := form.Db
dbInstance := d.DbApp.GetDbInstance(id, db)
biz.ErrIsNilAppendErr(d.ProjectApp.CanAccess(rc.LoginAccount.Id, dbInstance.ProjectId), "%s")
// 去除前后空格及换行符
sql := strings.TrimFunc(g.Query("sql"), func(r rune) bool {
sql := strings.TrimFunc(form.Sql, func(r rune) bool {
s := string(r)
return s == " " || s == "\n"
})
rc.ReqParam = fmt.Sprintf("db: %d:%s | sql: %s", id, db, sql)
biz.NotEmpty(sql, "sql不能为空")
@@ -92,6 +99,9 @@ func (d *Db) ExecSql(rc *ctx.ReqCtx) {
colAndRes["res"] = res
rc.ResData = colAndRes
} else {
// 根据执行sql生成执行记录
execRecord := d.DbSqlExecApp.GenExecLog(rc.LoginAccount, id, db, sql, dbInstance)
rowsAffected, err := dbInstance.Exec(sql)
biz.ErrIsNilAppendErr(err, "执行失败: %s")
res := make([]map[string]string, 0)
@@ -104,6 +114,11 @@ func (d *Db) ExecSql(rc *ctx.ReqCtx) {
colAndRes["res"] = res
rc.ResData = colAndRes
// 保存sql执行记录
if res[0]["影响条数"] > "0" {
execRecord.Remark = form.Remark
d.DbSqlExecApp.Save(execRecord)
}
}
}
@@ -180,7 +195,7 @@ func (d *Db) HintTables(rc *ctx.ReqCtx) {
tableNames := make([]string, 0)
for _, v := range tables {
tableNames = append(tableNames, v["tableName"])
tableNames = append(tableNames, v["tableName"].(string))
}
// key = 表名value = 列名数组
res := make(map[string][]string)
@@ -194,7 +209,7 @@ func (d *Db) HintTables(rc *ctx.ReqCtx) {
// 获取所有表下的所有列信息
columnMds := dbi.GetColumnMetadatas(tableNames...)
for _, v := range columnMds {
tName := v["tableName"]
tName := v["tableName"].(string)
if res[tName] == nil {
res[tName] = make([]string, 0)
}

View File

@@ -0,0 +1,23 @@
package api
import (
"mayfly-go/internal/devops/application"
"mayfly-go/internal/devops/domain/entity"
"mayfly-go/pkg/ctx"
"mayfly-go/pkg/ginx"
)
type DbSqlExec struct {
DbSqlExecApp application.DbSqlExec
}
func (d *DbSqlExec) DbSqlExecs(rc *ctx.ReqCtx) {
g := rc.GinCtx
m := &entity.DbSqlExec{DbId: uint64(ginx.QueryInt(g, "dbId", 0)),
Db: g.Query("db"),
Table: g.Query("table"),
Type: int8(ginx.QueryInt(g, "type", 0)),
}
m.CreatorId = rc.LoginAccount.Id
rc.ResData = d.DbSqlExecApp.GetPageList(m, ginx.GetPageParam(rc.GinCtx), new([]entity.DbSqlExec))
}

View File

@@ -14,3 +14,10 @@ type DbForm struct {
Env string `json:"env"`
EnvId uint64 `binding:"required" json:"envId"`
}
// 数据库SQL执行表单
type DbSqlExecForm struct {
Db string `binding:"required" json:"db"` //数据库名
Sql string `binding:"required" json:"sql"` // 执行sql
Remark string `json:"remark"` // 执行备注
}