From 4bb5c883f655557467b40b83e89f99661b12a747 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Wed, 1 Apr 2020 14:39:47 +0800 Subject: [PATCH] gen --- template/api.go.template | 94 +++++++++++++++++++++++++++ template/model.go.template | 107 ++++++++++++++++++++++++++++++ test/api.go.template | 126 ++++++++++++++++++++++++++++++++++++ test/config/policy.csv | 3 - test/config/rbac_model.conf | 11 ---- test/config/settings.yml | 14 ---- test/gen_test.go | 44 +++++++++++++ test/model.go.template | 106 ++++++++++++++++++++++++++++++ 8 files changed, 477 insertions(+), 28 deletions(-) create mode 100644 template/api.go.template create mode 100644 test/api.go.template delete mode 100644 test/config/policy.csv delete mode 100644 test/config/rbac_model.conf delete mode 100644 test/config/settings.yml create mode 100644 test/gen_test.go create mode 100644 test/model.go.template diff --git a/template/api.go.template b/template/api.go.template new file mode 100644 index 00000000..9494f0c5 --- /dev/null +++ b/template/api.go.template @@ -0,0 +1,94 @@ +package apis + +import ( + "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" + "go-admin/models" + "go-admin/pkg" + "go-admin/utils" + "net/http" +) + +func Get{{.ClassName}}List(c *gin.Context) { + var data models.{{.ClassName}} + var err error + var pageSize = 10 + var pageIndex = 1 + + if size := c.Request.FormValue("pageSize"); size != "" { + pageSize = pkg.StrToInt(err, size) + } + if index := c.Request.FormValue("pageIndex"); index != "" { + pageIndex = pkg.StrToInt(err, index) + } + + {{ range .Columns -}} + {{$z := .IsQuery}} + {{- if ($z) -}}data.{{.GoField}} = c.Request.FormValue("{{.JsonField}}") + {{ end -}} + {{end}} + + data.DataScope = utils.GetUserIdStr(c) + result, count, err := data.GetPage(pageSize, pageIndex) + pkg.AssertErr(err, "", -1) + + var mp = make(map[string]interface{}, 3) + mp["list"] = result + mp["count"] = count + mp["pageIndex"] = pageIndex + mp["pageIndex"] = pageSize + + var res models.Response + res.Data = mp + + c.JSON(http.StatusOK, res.ReturnOK()) +} + +func Get{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + data.{{.PkGoField}}, _ = utils.StringToInt64(c.Param("{{.PkJsonField}}")) + result, err := data.Get() + pkg.AssertErr(err, "抱歉未找到相关信息", -1) + + var res models.Response + res.Data = result + + c.JSON(http.StatusOK, res.ReturnOK()) +} + +func Insert{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + err := c.BindWith(&data, binding.JSON) + data.CreateBy = utils.GetUserIdStr(c) + pkg.AssertErr(err, "", 500) + result, err := data.Create() + pkg.AssertErr(err, "", -1) + var res models.Response + res.Data = result + c.JSON(http.StatusOK, res.ReturnOK()) +} + +func Update{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + err := c.BindWith(&data, binding.JSON) + pkg.AssertErr(err, "数据解析失败", -1) + data.UpdateBy = utils.GetUserIdStr(c) + result, err := data.Update(data.{{.PkGoField}}) + pkg.AssertErr(err, "", -1) + + var res models.Response + res.Data = result + c.JSON(http.StatusOK, res.ReturnOK()) +} + +func Delete{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + id, err := utils.StringToInt64(c.Param("{{.PkJsonField}}")) + data.UpdateBy = utils.GetUserIdStr(c) + _, err = data.Delete(id) + pkg.AssertErr(err, "修改失败", 500) + + var res models.Response + res.Msg = "删除成功" + c.JSON(http.StatusOK, res.ReturnOK()) +} \ No newline at end of file diff --git a/template/model.go.template b/template/model.go.template index e69de29b..1831c592 100644 --- a/template/model.go.template +++ b/template/model.go.template @@ -0,0 +1,107 @@ +package models + +import ( + orm "go-admin/database" + "go-admin/utils" + "time" +) + +type {{.ClassName}} struct { +{{ range .Columns -}} + {{$x := .Pk}} + // {{.ColumnComment}} + {{if ($x)}}{{.GoField}} {{.GoType}} `json:"{{.JsonField}}" gorm:"column:{{.ColumnName}};primary_key"`{{else}}{{.GoField}} {{.GoType}} `json:"{{.JsonField}}" gorm:"column:{{.ColumnName}};"`{{end}} +{{ end -}} +} + +// 创建{{.ClassName}} +func (e *{{.ClassName}}) Create() ({{.ClassName}}, error) { + var doc {{.ClassName}} + doc.IsDel = "0" + e.CreateTime = time.Now().String() + result := orm.Eloquent.Table("{{.TableName}}").Create(&e) + if result.Error != nil { + err := result.Error + return doc, err + } + doc = *e + return doc, nil +} + +// 获取{{.ClassName}} +func (e *{{.ClassName}}) Get() ({{.ClassName}}, error) { + var doc {{.ClassName}} + + table := orm.Eloquent.Table("{{.TableName}}") + {{ range .Columns -}} + {{$z := .IsQuery}} + {{- if ($z) -}} + if e.{{.GoField}} != "" { + table = table.Where("{{.ColumnName}} = ?", e.{{.GoField}}) + } + {{ end -}} + {{ end }} + + if err := table.Where("is_del = 0").First(&doc).Error; err != nil { + return doc, err + } + return doc, nil +} + +// 获取{{.ClassName}}带分页 +func (e *{{.ClassName}}) GetPage(pageSize int, pageIndex int) ([]{{.ClassName}}, int32, error) { + var doc []{{.ClassName}} + + table := orm.Eloquent.Select("*").Table("{{.TableName}}") + {{ range .Columns -}} + {{$z := .IsQuery}} + {{- if ($z) -}} + if e.{{.GoField}} != "" { + table = table.Where("{{.ColumnName}} = ?", e.{{.GoField}}) + } + {{ end -}} + {{ end }} + + // 数据权限控制 + dataPermission := new(DataPermission) + dataPermission.UserId, _ = utils.StringToInt64(e.DataScope) + table = dataPermission.GetDataScope("{{.TableName}}", table) + + var count int32 + table = table.Where("is_del = 0").Offset((pageIndex - 1) * pageSize).Limit(pageSize) + if err := table.Find(&doc).Error; err != nil { + return nil, 0, err + } + table.Where("is_del = 0").Count(&count) + return doc, count, nil +} + +// 更新{{.ClassName}} +func (e *{{.ClassName}}) Update(id int64) (update {{.ClassName}}, err error) { + e.UpdateTime = utils.GetCurrntTime() + if err = orm.Eloquent.Table("{{.TableName}}").Where("{{.PkColumn}} = ?", id).First(&update).Error; err != nil { + return + } + + //参数1:是要修改的数据 + //参数2:是修改的数据 + if err = orm.Eloquent.Table("{{.TableName}}").Model(&update).Updates(&e).Error; err != nil { + return + } + return +} + +// 删除{{.ClassName}} +func (e *{{.ClassName}}) Delete(id int64) (success bool, err error) { + var mp = map[string]string{} + mp["is_del"] = "1" + mp["update_time"] = utils.GetCurrntTime() + mp["update_by"] = e.UpdateBy + if err = orm.Eloquent.Table("{{.TableName}}").Where("{{.PkColumn}} = ?", id).Update(mp).Error; err != nil { + success = false + return + } + success = true + return +} + diff --git a/test/api.go.template b/test/api.go.template new file mode 100644 index 00000000..f10c698a --- /dev/null +++ b/test/api.go.template @@ -0,0 +1,126 @@ +package apis + +import ( +"github.com/gin-gonic/gin" +"github.com/gin-gonic/gin/binding" +"go-admin/models" +"go-admin/pkg" +"go-admin/utils" +"net/http" +) + +// @Summary 配置列表数据 +// @Description 获取JSON +// @Tags 配置 +// @Param configKey query string false "configKey" +// @Param configName query string false "configName" +// @Param configType query string false "configType" +// @Param pageSize query int false "页条数" +// @Param pageIndex query int false "页码" +// @Success 200 {object} models.Response "{"code": 200, "data": [...]}" +// @Router /api/v1/configList [get] +// @Security +func Get{{.ClassName}}List(c *gin.Context) { + var data models.{{.ClassName}} + var err error + var pageSize = 10 + var pageIndex = 1 + + if size := c.Request.FormValue("pageSize"); size != "" { + pageSize = pkg.StrToInt(err, size) + } + + if index := c.Request.FormValue("pageIndex"); index != "" { + pageIndex = pkg.StrToInt(err, index) + } + + {{ range .Columns -}} + {{$z := .IsQuery}} + {{- if ($z) -}} + data.{{.GoField}} = c.Request.FormValue("{{.JsonField}}") + {{ end }} + {{- end -}} + + data.DataScope = utils.GetUserIdStr(c) + result, count, err := data.GetPage(pageSize, pageIndex) + pkg.AssertErr(err, "", -1) + + var mp = make(map[string]interface{}, 3) + mp["list"] = result + mp["count"] = count + mp["pageIndex"] = pageIndex + mp["pageIndex"] = pageSize + + var res models.Response + res.Data = mp + + c.JSON(http.StatusOK, res.ReturnOK()) +} + +// @Summary 获取配置 +// @Description 获取JSON +// @Tags 配置 +// @Param configId path int true "配置编码" +// @Success 200 {object} models.Response "{"code": 200, "data": [...]}" +// @Router /api/v1/config/{configId} [get] +// @Security +func Get{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + data.{{.PkGoField}}, _ = utils.StringToInt64(c.Param("{{.PkJsonField}}")) + result, err := data.Get() + pkg.AssertErr(err, "抱歉未找到相关信息", -1) + + var res models.Response + res.Data = result + + c.JSON(http.StatusOK, res.ReturnOK()) +} + +// @Summary 添加配置 +// @Description 获取JSON +// @Tags 配置 +// @Accept application/json +// @Product application/json +// @Param data body models.Config true "data" +// @Success 200 {string} string "{"code": 200, "message": "添加成功"}" +// @Success 200 {string} string "{"code": -1, "message": "添加失败"}" +// @Router /api/v1/dict/data [post] +// @Security Bearer +func Insert{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + err := c.BindWith(&data, binding.JSON) + data.CreateBy = utils.GetUserIdStr(c) + pkg.AssertErr(err, "", 500) + result, err := data.Create() + pkg.AssertErr(err, "", -1) + + var res models.Response + res.Data = result + c.JSON(http.StatusOK, res.ReturnOK()) + +} + +func Update{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + err := c.BindWith(&data, binding.JSON) + pkg.AssertErr(err, "数据解析失败", -1) + data.UpdateBy = utils.GetUserIdStr(c) + result, err := data.Update(data.{{.PkGoField}}) + pkg.AssertErr(err, "", -1) + + var res models.Response + res.Data = result + c.JSON(http.StatusOK, res.ReturnOK()) +} + +func Delete{{.ClassName}}(c *gin.Context) { + var data models.{{.ClassName}} + id, err := utils.StringToInt64(c.Param("{{.PkJsonField}}")) + data.UpdateBy = utils.GetUserIdStr(c) + _, err = data.Delete(id) + pkg.AssertErr(err, "修改失败", 500) + + var res models.Response + res.Msg = "删除成功" + c.JSON(http.StatusOK, res.ReturnOK()) +} \ No newline at end of file diff --git a/test/config/policy.csv b/test/config/policy.csv deleted file mode 100644 index 0cf91e97..00000000 --- a/test/config/policy.csv +++ /dev/null @@ -1,3 +0,0 @@ -p, test, /api/v1/store, GET -p, admin, /api/v1/store, POST -p, test, /api/v1/store, POST diff --git a/test/config/rbac_model.conf b/test/config/rbac_model.conf deleted file mode 100644 index 4f86ba8f..00000000 --- a/test/config/rbac_model.conf +++ /dev/null @@ -1,11 +0,0 @@ -[request_definition] -r = sub, obj, act - -[policy_definition] -p = sub, obj, act - -[policy_effect] -e = some(where (p.eft == allow)) - -[matchers] -m = r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act) \ No newline at end of file diff --git a/test/config/settings.yml b/test/config/settings.yml deleted file mode 100644 index e10f4329..00000000 --- a/test/config/settings.yml +++ /dev/null @@ -1,14 +0,0 @@ -settings: - database: - dbtype: mysql - host: drdsfacbhmku898jpublic.drds.aliyuncs.com - port: 3306 - database: rmsdb_test - username: rmsdb_test - password: ptGAA2RaVY4wqC - application: - readtimeout: 1 - writertimeout: 2 - port: 8000 - name: testApp - jwtsecret: 123abc \ No newline at end of file diff --git a/test/gen_test.go b/test/gen_test.go new file mode 100644 index 00000000..7817e1b7 --- /dev/null +++ b/test/gen_test.go @@ -0,0 +1,44 @@ +package test + +import ( + "go-admin/models/tools" + "os" + "testing" + "text/template" +) + +func TestGoModelTemplate(t *testing.T) { + t1, err := template.ParseFiles("model.go.template") + if err != nil { + t.Error(err) + } + table := tools.SysTables{} + table.TableName = "sys_tables" + tab, _ := table.Get() + file, err := os.Create("models/"+table.PackageName+".go") + if err != nil { + t.Error(err) + } + defer file.Close() + + _ = t1.Execute(file, tab) + t.Log("") +} + +func TestGoApiTemplate(t *testing.T) { + t1, err := template.ParseFiles("api.go.template") + if err != nil { + t.Error(err) + } + table := tools.SysTables{} + table.TableName = "sys_tables" + tab, _ := table.Get() + file, err := os.Create("apis/"+table.PackageName+".go") + if err != nil { + t.Error(err) + } + defer file.Close() + + _ = t1.Execute(file, tab) + t.Log("") +} diff --git a/test/model.go.template b/test/model.go.template new file mode 100644 index 00000000..6ac73f9a --- /dev/null +++ b/test/model.go.template @@ -0,0 +1,106 @@ +package models + +import ( + orm "go-admin/database" + "go-admin/utils" + "time" +) + +type {{.ClassName}} struct { + + {{ range .Columns -}} + {{$x := .Pk}} + // {{.ColumnComment}} + {{if ($x)}}{{.GoField}} {{.GoType}} `json:"{{.JsonField}}" gorm:"column:{{.ColumnName}};primary_key"`{{else}}{{.GoField}} {{.GoType}} `json:"{{.JsonField}}" gorm:"column:{{.ColumnName}};"`{{end}} + {{ end -}} +} + +// 创建{{.ClassName}} +func (e *{{.ClassName}}) Create() ({{.ClassName}}, error) { + var doc {{.ClassName}} + doc.IsDel = "0" + e.CreateTime = time.Now().String() + result := orm.Eloquent.Table("{{.TableName}}").Create(&e) + if result.Error != nil { + err := result.Error + return doc, err + } + doc = *e + return doc, nil +} + +// 获取{{.ClassName}} +func (e *{{.ClassName}}) Get() ({{.ClassName}}, error) { + var doc {{.ClassName}} + + table := orm.Eloquent.Table("{{.TableName}}") + {{ range .Columns -}} + {{$z := .IsQuery}} + {{- if ($z) -}}if e.{{.GoField}} != "" { + table = table.Where("{{.ColumnName}} = ?", e.{{.GoField}}) + } + {{ end }} + {{- end -}} + + if err := table.Where("is_del = 0").First(&doc).Error; err != nil { + return doc, err + } + return doc, nil +} + +// 获取{{.ClassName}}带分页 +func (e *{{.ClassName}}) GetPage(pageSize int, pageIndex int) ([]{{.ClassName}}, int32, error) { + var doc []{{.ClassName}} + + table := orm.Eloquent.Select("*").Table("{{.TableName}}") + {{ range .Columns -}} + {{$z := .IsQuery}} + {{- if ($z) -}}if e.{{.GoField}} != "" { + table = table.Where("{{.ColumnName}} = ?", e.{{.GoField}}) + } + {{ end }} + {{- end -}} + + // 数据权限控制 + dataPermission := new(DataPermission) + dataPermission.UserId, _ = utils.StringToInt64(e.DataScope) + table = dataPermission.GetDataScope("{{.TableName}}", table) + + var count int32 + table = table.Where("is_del = 0").Offset((pageIndex - 1) * pageSize).Limit(pageSize) + if err := table.Find(&doc).Error; err != nil { + return nil, 0, err + } + table.Where("is_del = 0").Count(&count) + return doc, count, nil +} + +// 更新{{.ClassName}} +func (e *{{.ClassName}}) Update(id int64) (update {{.ClassName}}, err error) { + e.UpdateTime = utils.GetCurrntTime() + if err = orm.Eloquent.Table("{{.TableName}}").Where("{{.PkColumn}} = ?", id).First(&update).Error; err != nil { + return + } + + //参数1:是要修改的数据 + //参数2:是修改的数据 + if err = orm.Eloquent.Table("{{.TableName}}").Model(&update).Updates(&e).Error; err != nil { + return + } + return +} + +// 删除{{.ClassName}} +func (e *{{.ClassName}}) Delete(id int64) (success bool, err error) { + var mp = map[string]string{} + mp["is_del"] = "1" + mp["update_time"] = utils.GetCurrntTime() + mp["update_by"] = e.UpdateBy + if err = orm.Eloquent.Table("{{.TableName}}").Where("{{.PkColumn}} = ?", id).Update(mp).Error; err != nil { + success = false + return + } + success = true + return +} +