mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 07:50:25 +08:00
141 lines
3.8 KiB
Go
141 lines
3.8 KiB
Go
|
|
package controllers
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"fmt"
|
|||
|
|
"mayfly-go/base"
|
|||
|
|
"mayfly-go/base/ctx"
|
|||
|
|
"mayfly-go/base/model"
|
|||
|
|
"mayfly-go/controllers/form"
|
|||
|
|
"mayfly-go/controllers/vo"
|
|||
|
|
"mayfly-go/db"
|
|||
|
|
"mayfly-go/models"
|
|||
|
|
"strconv"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type DbController struct {
|
|||
|
|
base.Controller
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/dbs [get]
|
|||
|
|
func (c *DbController) Dbs() {
|
|||
|
|
c.ReturnData(false, func(account *ctx.LoginAccount) interface{} {
|
|||
|
|
m := new([]models.Db)
|
|||
|
|
querySetter := model.QuerySetter(new(models.Db))
|
|||
|
|
return model.GetPage(querySetter, c.GetPageParam(), m, new([]vo.SelectDataDbVO))
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/db/:dbId/select [get]
|
|||
|
|
func (c *DbController) SelectData() {
|
|||
|
|
c.ReturnData(false, func(account *ctx.LoginAccount) interface{} {
|
|||
|
|
selectSql := c.GetString("selectSql")
|
|||
|
|
model.NotEmpty(selectSql, "selectSql不能为空")
|
|||
|
|
res, err := db.GetDbInstance(c.GetDbId()).SelectData(selectSql)
|
|||
|
|
if err != nil {
|
|||
|
|
panic(model.NewBizErr(fmt.Sprintf("查询失败: %s", err.Error())))
|
|||
|
|
}
|
|||
|
|
return res
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/db/:dbId/exec-sql [post]
|
|||
|
|
func (c *DbController) ExecSql() {
|
|||
|
|
c.ReturnData(false, func(account *ctx.LoginAccount) interface{} {
|
|||
|
|
selectSql := c.GetString("sql")
|
|||
|
|
model.NotEmpty(selectSql, "sql不能为空")
|
|||
|
|
num, err := db.GetDbInstance(c.GetDbId()).Exec(selectSql)
|
|||
|
|
if err != nil {
|
|||
|
|
panic(model.NewBizErr(fmt.Sprintf("执行失败: %s", err.Error())))
|
|||
|
|
}
|
|||
|
|
return num
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/db/:dbId/t-metadata [get]
|
|||
|
|
func (c *DbController) TableMA() {
|
|||
|
|
c.ReturnData(false, func(account *ctx.LoginAccount) interface{} {
|
|||
|
|
return db.GetDbInstance(c.GetDbId()).GetTableMetedatas()
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/db/:dbId/c-metadata [get]
|
|||
|
|
func (c *DbController) ColumnMA() {
|
|||
|
|
c.ReturnData(false, func(account *ctx.LoginAccount) interface{} {
|
|||
|
|
tn := c.GetString("tableName")
|
|||
|
|
model.NotEmpty(tn, "tableName不能为空")
|
|||
|
|
return db.GetDbInstance(c.GetDbId()).GetColumnMetadatas(tn)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/db/:dbId/hint-tables [get]
|
|||
|
|
// 数据表及字段前端提示接口
|
|||
|
|
func (c *DbController) HintTables() {
|
|||
|
|
c.ReturnData(false, func(account *ctx.LoginAccount) interface{} {
|
|||
|
|
dbi := db.GetDbInstance(c.GetDbId())
|
|||
|
|
tables := dbi.GetTableMetedatas()
|
|||
|
|
res := make(map[string][]string)
|
|||
|
|
for _, v := range tables {
|
|||
|
|
tableName := v["tableName"]
|
|||
|
|
columnMds := dbi.GetColumnMetadatas(tableName)
|
|||
|
|
columnNames := make([]string, len(columnMds))
|
|||
|
|
for i, v := range columnMds {
|
|||
|
|
comment := v["columnComment"]
|
|||
|
|
if comment != "" {
|
|||
|
|
columnNames[i] = v["columnName"] + " [" + comment + "]"
|
|||
|
|
} else {
|
|||
|
|
columnNames[i] = v["columnName"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
res[tableName] = columnNames
|
|||
|
|
}
|
|||
|
|
return res
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/db/:dbId/sql [post]
|
|||
|
|
func (c *DbController) SaveSql() {
|
|||
|
|
c.Operation(true, func(account *ctx.LoginAccount) {
|
|||
|
|
dbSqlForm := &form.DbSqlSaveForm{}
|
|||
|
|
c.UnmarshalBodyAndValid(dbSqlForm)
|
|||
|
|
|
|||
|
|
dbId := c.GetDbId()
|
|||
|
|
// 判断dbId是否存在
|
|||
|
|
err := model.GetById(new(models.Db), dbId)
|
|||
|
|
model.BizErrIsNil(err, "该数据库信息不存在")
|
|||
|
|
|
|||
|
|
// 获取用于是否有该dbsql的保存记录,有则更改,否则新增
|
|||
|
|
dbSql := &models.DbSql{Type: dbSqlForm.Type, DbId: dbId}
|
|||
|
|
dbSql.CreatorId = account.Id
|
|||
|
|
e := model.GetByCondition(dbSql)
|
|||
|
|
|
|||
|
|
dbSql.SetBaseInfo(account)
|
|||
|
|
// 更新sql信息
|
|||
|
|
dbSql.Sql = dbSqlForm.Sql
|
|||
|
|
if e == nil {
|
|||
|
|
model.UpdateById(dbSql)
|
|||
|
|
} else {
|
|||
|
|
model.Insert(dbSql)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @router /api/db/:dbId/sql [get]
|
|||
|
|
func (c *DbController) GetSql() {
|
|||
|
|
c.ReturnData(true, func(account *ctx.LoginAccount) interface{} {
|
|||
|
|
// 获取用于是否有该dbsql的保存记录,有则更改,否则新增
|
|||
|
|
dbSql := &models.DbSql{Type: 1, DbId: c.GetDbId()}
|
|||
|
|
dbSql.CreatorId = account.Id
|
|||
|
|
e := model.GetByCondition(dbSql)
|
|||
|
|
if e != nil {
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
return dbSql
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (c *DbController) GetDbId() uint64 {
|
|||
|
|
dbId, _ := strconv.Atoi(c.Ctx.Input.Param(":dbId"))
|
|||
|
|
model.IsTrue(dbId > 0, "dbId错误")
|
|||
|
|
return uint64(dbId)
|
|||
|
|
}
|