From 91b93a3f48c31099907621956ec1aeadaaec1f8c Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Thu, 24 Jun 2021 20:21:40 +0800 Subject: [PATCH] =?UTF-8?q?refactor=F0=9F=8E=A8=EF=BC=9A=E6=A8=A1=E7=89=88?= =?UTF-8?q?=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/v4/dto.go.template | 100 +++------ template/v4/no_actions/apis.go.template | 242 ++++++++------------- template/v4/no_actions/service.go.template | 60 ++--- 3 files changed, 149 insertions(+), 253 deletions(-) diff --git a/template/v4/dto.go.template b/template/v4/dto.go.template index dc594e3d..b62058dc 100644 --- a/template/v4/dto.go.template +++ b/template/v4/dto.go.template @@ -19,26 +19,20 @@ type {{.ClassName}}Search struct { {{.GoField}} {{.GoType}} `form:"{{.JsonField}}" search:"type:{{if eq .QueryType "EQ"}}exact{{ else if eq .QueryType "NE"}}iexact{{ else if eq .QueryType "LIKE"}}contains{{ else if eq .QueryType "GT"}}gt{{ else if eq .QueryType "GTE"}}gte{{ else if eq .QueryType "LT"}}lt{{ else if eq .QueryType "LTE"}}lte{{- end }};column:{{.ColumnName}};table:{{$tablename}}" comment:"{{.ColumnComment}}"` {{- end }} {{- end }} + {{.ClassName}}Order +} + +type {{.ClassName}}Order struct { + {{- $tablename := .TBName -}} + {{- range .Columns -}} + {{.GoField}} {{.GoType}} `form:"{{.JsonField}}Order" search:"type:order;column:{{.ColumnName}};table:{{$tablename}}"` + {{- end }} } func (m *{{.ClassName}}Search) GetNeedSearch() interface{} { return *m } -func (m *{{.ClassName}}Search) Generate() dto.Index { - o := *m - return &o -} - -func (m *{{.ClassName}}Search) Bind(ctx *gin.Context) error { - log := api.GetRequestLogger(ctx) - err := ctx.ShouldBind(m) - if err != nil { - log.Errorf("ShouldBind error: %s", err.Error()) - } - return err -} - type {{.ClassName}}Control struct { {{- range .Columns -}} {{$x := .Pk}} @@ -55,42 +49,22 @@ type {{.ClassName}}Control struct { {{- end }} } -func (s *{{.ClassName}}Control) Generate() dto.Control { - o := *s - return &o -} - -func (s *{{.ClassName}}Control) Bind(ctx *gin.Context) error { - log := api.GetRequestLogger(ctx) - err := ctx.ShouldBindUri(s) - if err != nil { - log.Errorf("ShouldBindUri error: %s", err.Error()) - return errors.New("数据绑定出错") +func (s *{{.ClassName}}Control) Generate(model *models.SysConfig) { + {{- range .Columns -}} + {{$x := .Pk}} + {{- if ($x) }} + if s.{{.GoField}} == 0 { + model.Model = common.Model{{{.GoField}}: s.{{.GoField}}} } - err = ctx.ShouldBind(s) - if err != nil { - log.Errorf("ShouldBind error: %s", err.Error()) - err = errors.New("数据绑定出错") - } - return err -} - -func (s *{{.ClassName}}Control) GenerateM() (common.ActiveRecord, error) { - return &models.{{.ClassName}}{ - {{- range .Columns -}} - {{$x := .Pk}} - {{- if ($x) }} - Model: common.Model{ {{.GoField}}: s.{{.GoField}} }, - {{- else if eq .GoField "CreatedAt" -}} - {{- else if eq .GoField "UpdatedAt" -}} - {{- else if eq .GoField "DeletedAt" -}} - {{- else if eq .GoField "CreateBy" -}} - {{- else if eq .GoField "UpdateBy" -}} - {{- else }} - {{.GoField}}: s.{{.GoField}}, - {{- end -}} - {{- end }} - }, nil + {{- else if eq .GoField "CreatedAt" -}} + {{- else if eq .GoField "UpdatedAt" -}} + {{- else if eq .GoField "DeletedAt" -}} + {{- else if eq .GoField "CreateBy" -}} + {{- else if eq .GoField "UpdateBy" -}} + {{- else }} + model.{{.GoField}} = s.{{.GoField}} + {{- end -}} + {{- end }} } func (s *{{.ClassName}}Control) GetId() interface{} { @@ -98,7 +72,8 @@ func (s *{{.ClassName}}Control) GetId() interface{} { } type {{.ClassName}}ById struct { - dto.ObjectById + Id int `uri:"id"` + Ids []int `json:"ids"` } func (s *{{.ClassName}}ById) GetId() interface{} { @@ -109,30 +84,7 @@ func (s *{{.ClassName}}ById) GetId() interface{} { return s.Id } -func (s *{{.ClassName}}ById) Bind(ctx *gin.Context) error { - log := api.GetRequestLogger(ctx) - err := ctx.ShouldBindUri(s) - if err != nil { - log.Errorf("ShouldBindUri error: %s", err.Error()) - return errors.New("数据绑定出错") - } - err = ctx.ShouldBind(s) - if err != nil { - log.Errorf("ShouldBind error: %s", err.Error()) - err = errors.New("数据绑定出错") - } - return err -} - -func (s *{{.ClassName}}ById) SetUpdateBy(id int) { - -} - -func (s *{{.ClassName}}ById) Generate() dto.Control { +func (s *{{.ClassName}}ById) Generate() *{{.ClassName}}ById { o := *s return &o -} - -func (s *{{.ClassName}}ById) GenerateM() (common.ActiveRecord, error) { - return &models.{{.ClassName}}{}, nil } \ No newline at end of file diff --git a/template/v4/no_actions/apis.go.template b/template/v4/no_actions/apis.go.template index f6f7e9b4..d2abdcac 100644 --- a/template/v4/no_actions/apis.go.template +++ b/template/v4/no_actions/apis.go.template @@ -1,6 +1,7 @@ package apis import ( + "github.com/gin-gonic/gin/binding" "net/http" "github.com/gin-gonic/gin" @@ -11,14 +12,13 @@ import ( "go-admin/app/{{.PackageName}}/models" "go-admin/app/{{.PackageName}}/service" "go-admin/app/{{.PackageName}}/service/dto" - "go-admin/common/actions" ) type {{.ClassName}} struct { api.Api } -// Get{{.ClassName}}List 获取{{.TableComment}}列表 +// GetPage 获取{{.TableComment}}列表 // @Summary 获取{{.TableComment}}列表 // @Description 获取{{.TableComment}}列表 // @Tags {{.TableComment}} @@ -34,43 +34,34 @@ type {{.ClassName}} struct { // @Success 200 {object} response.Response{data=response.Page{list=[]models.{{.ClassName}}}} "{"code": 200, "data": [...]}" // @Router /api/v1/{{.ModuleName}} [get] // @Security Bearer -func (e {{.ClassName}}) Get{{.ClassName}}List(c *gin.Context) { - e.SetContext(c) - log := e.GetLogger() - db, err := e.GetOrm() - if err != nil { - log.Error(err) - return - } +func (e {{.ClassName}}) GetPage(c *gin.Context) { + req := dto.{{.ClassName}}Search{} + s := service.{{.ClassName}}{} + err := e.MakeContext(c). + MakeOrm(). + Bind(&req, binding.Form). + MakeService(&s.Service). + Errors + if err != nil { + e.Logger.Error(err) + e.Error(500, err, err.Error()) + return + } - d := new(dto.{{.ClassName}}Search) - //查询列表 - err = d.Bind(c) - if err != nil { - log.Warnf("request body bind error, %s", err.Error()) - e.Error( http.StatusUnprocessableEntity, err, "参数验证失败") - return - } - - //数据权限检查 p := actions.GetPermissionFromContext(c) - list := make([]models.{{.ClassName}}, 0) var count int64 - service{{.ClassName}} := service.{{.ClassName}}{} - service{{.ClassName}}.Log = log - service{{.ClassName}}.Orm = db - err = service{{.ClassName}}.Get{{.ClassName}}Page(d, p, &list, &count) + + err = s.GetPage(&req, p, &list, &count) if err != nil { - log.Errorf("Get {{.ClassName}} Page error, %s", err.Error()) - e.Error( http.StatusInternalServerError, err, "查询失败") - return + e.Error(500, err, fmt.Sprintf("获取{{.TableComment}} %v 失败,\r\n失败信息 %s", req.Ids, err.Error())) + return } - e.PageOK( list, int(count), d.GetPageIndex(), d.GetPageSize(), "查询成功") + e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功") } -// Get{{.ClassName}} 获取{{.TableComment}} +// Get 获取{{.TableComment}} // @Summary 获取{{.TableComment}} // @Description 获取{{.TableComment}} // @Tags {{.TableComment}} @@ -79,42 +70,31 @@ func (e {{.ClassName}}) Get{{.ClassName}}List(c *gin.Context) { // @Router /api/v1/{{.ModuleName}}/{id} [get] // @Security Bearer func (e {{.ClassName}}) Get{{.ClassName}}(c *gin.Context) { - e.SetContext(c) - log := e.GetLogger() - db, err := e.GetOrm() + req := dto.{{.ClassName}}ById{} + s := service.{{.ClassName}}{} + err := e.MakeContext(c). + MakeOrm(). + Bind(&req, nil). + MakeService(&s.Service). + Errors if err != nil { - log.Error(err) - return - } - - control := new(dto.{{.ClassName}}ById) - - //查看详情 - err = control.Bind(c) - if err != nil { - log.Warnf("request body bind error, %s", err.Error()) - e.Error( http.StatusUnprocessableEntity, err, "参数验证失败") + e.Logger.Error(err) + e.Error(500, err, err.Error()) return } var object models.{{.ClassName}} - //数据权限检查 p := actions.GetPermissionFromContext(c) - - service{{.ClassName}} := service.{{.ClassName}}{} - service{{.ClassName}}.Log = log - service{{.ClassName}}.Orm = db - err = service{{.ClassName}}.Get{{.ClassName}}(control, p, &object) + err = s.Get(&req, p, &object) if err != nil { - log.Errorf("Get {{.ClassName}} error, %s", err.Error()) - e.Error( http.StatusInternalServerError, err, "查询失败") - return + e.Error(500, err, fmt.Sprintf("获取{{.TableComment}} %v 失败,\r\n失败信息 %s", req.Ids, err.Error())) + return } e.OK( object, "查询成功") } -// Insert{{.ClassName}} 创建{{.TableComment}} +// Insert 创建{{.TableComment}} // @Summary 创建{{.TableComment}} // @Description 创建{{.TableComment}} // @Tags {{.TableComment}} @@ -124,47 +104,32 @@ func (e {{.ClassName}}) Get{{.ClassName}}(c *gin.Context) { // @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}" // @Router /api/v1/{{.ModuleName}} [post] // @Security Bearer -func (e {{.ClassName}}) Insert{{.ClassName}}(c *gin.Context) { - e.SetContext(c) - log := e.GetLogger() - db, err := e.GetOrm() - if err != nil { - log.Error(err) - return - } - - control := new(dto.{{.ClassName}}Control) - - //新增操作 - err = control.Bind(c) - if err != nil { - log.Warnf("request body bind error, %s", err.Error()) - e.Error( http.StatusUnprocessableEntity, err, "参数验证失败") - return - } - object, err := control.GenerateM() - if err != nil { - log.Errorf("generate {{.ClassName}} model error, %s", err.Error()) - e.Error( http.StatusInternalServerError, err, "模型生成失败") - return - } +func (e {{.ClassName}}) Insert(c *gin.Context) { + req := dto.{{.ClassName}}Control{} + s := service.{{.ClassName}}{} + err := e.MakeContext(c). + MakeOrm(). + Bind(&req, binding.JSON). + MakeService(&s.Service). + Errors + if err != nil { + e.Logger.Error(err) + e.Error(500, err, err.Error()) + return + } // 设置创建人 - object.SetCreateBy(user.GetUserId(c)) + req.SetCreateBy(user.GetUserId(c)) - service{{.ClassName}} := service.{{.ClassName}}{} - service{{.ClassName}}.Orm = db - service{{.ClassName}}.Log = log - err = service{{.ClassName}}.Insert{{.ClassName}}(object.(*models.{{.ClassName}})) + err = s.Insert(&req) if err != nil { - log.Errorf("Insert {{.ClassName}} error, %s", err.Error()) - e.Error( http.StatusInternalServerError, err, "创建失败") - return + e.Error(500, err, fmt.Sprintf("创建{{.TableComment}} %v 失败,\r\n失败信息 %s", req.Ids, err.Error())) + return } - e.OK( object.GetId(), "创建成功") + e.OK(req.GetId(), "创建成功") } -// Update{{.ClassName}} 修改{{.TableComment}} +// Update 修改{{.TableComment}} // @Summary 修改{{.TableComment}} // @Description 修改{{.TableComment}} // @Tags {{.TableComment}} @@ -174,48 +139,31 @@ func (e {{.ClassName}}) Insert{{.ClassName}}(c *gin.Context) { // @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}" // @Router /api/v1/{{.ModuleName}}/{id} [put] // @Security Bearer -func (e {{.ClassName}}) Update{{.ClassName}}(c *gin.Context) { - e.SetContext(c) - log := e.GetLogger() - db, err := e.GetOrm() - if err != nil { - log.Error(err) - return - } - - control := new(dto.{{.ClassName}}Control) - - //更新操作 - err = control.Bind(c) - if err != nil { - log.Warnf("request body bind error, %s", err.Error()) - e.Error( http.StatusUnprocessableEntity, err, "参数验证失败") - return - } - object, err := control.GenerateM() - if err != nil { - log.Errorf("generate {{.ClassName}} model error, %s", err.Error()) - e.Error( http.StatusInternalServerError, err, "模型生成失败") - return - } - object.SetUpdateBy(user.GetUserId(c)) - - //数据权限检查 +func (e {{.ClassName}}) Update(c *gin.Context) { + req := dto.{{.ClassName}}Control){} + s := service.{{.ClassName}}{} + err := e.MakeContext(c). + MakeOrm(). + Bind(&req, binding.JSON, nil). + MakeService(&s.Service). + Errors + if err != nil { + e.Logger.Error(err) + e.Error(500, err, err.Error()) + return + } + req.SetUpdateBy(user.GetUserId(c)) p := actions.GetPermissionFromContext(c) - service{{.ClassName}} := service.{{.ClassName}}{} - service{{.ClassName}}.Orm = db - service{{.ClassName}}.Log = log - err = service{{.ClassName}}.Update{{.ClassName}}(object.(*models.{{.ClassName}}), p) + err = s.Update(&req, p) if err != nil { - log.Errorf("Update {{.ClassName}} error, %s", err.Error()) - e.Error( http.StatusInternalServerError, err, "更新失败") - return + e.Error(500, err, fmt.Sprintf("修改{{.TableComment}} %v 失败,\r\n失败信息 %s", req.Ids, err.Error())) + return } - e.OK( object.GetId(), "更新成功") + e.OK( object.GetId(), "修改成功") } -// Delete{{.ClassName}} 删除{{.TableComment}} +// Delete 删除{{.TableComment}} // @Summary 删除{{.TableComment}} // @Description 删除{{.TableComment}} // @Tags {{.TableComment}} @@ -223,39 +171,27 @@ func (e {{.ClassName}}) Update{{.ClassName}}(c *gin.Context) { // @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}" // @Router /api/v1/{{.ModuleName}} [delete] // @Security Bearer -func (e {{.ClassName}}) Delete{{.ClassName}}(c *gin.Context) { - e.SetContext(c) - log := e.GetLogger() - db, err := e.GetOrm() - if err != nil { - log.Error(err) - return - } +func (e {{.ClassName}}) Delete(c *gin.Context) { + s := service.{{.ClassName}}{} + req := dto.{{.ClassName}}ById{} + err := e.MakeContext(c). + MakeOrm(). + Bind(&req, binding.JSON). + MakeService(&s.Service). + Errors + if err != nil { + e.Logger.Error(err) + e.Error(500, err, err.Error()) + return + } - control := new(dto.{{.ClassName}}ById) - - //删除操作 - err = control.Bind(c) - if err != nil { - log.Warnf("request body bind error, %s", err.Error()) - e.Error( http.StatusUnprocessableEntity, err, "参数验证失败") - return - } - - // 设置编辑人 - control.SetUpdateBy(user.GetUserId(c)) - - // 数据权限检查 + req.SetUpdateBy(user.GetUserId(c)) p := actions.GetPermissionFromContext(c) - service{{.ClassName}} := service.{{.ClassName}}{} - service{{.ClassName}}.Orm = db - service{{.ClassName}}.Log = log - err = service{{.ClassName}}.Remove{{.ClassName}}(control, p) + err = s.Remove(&req, p) if err != nil { - log.Errorf("Remove {{.ClassName}} error, %s", err.Error()) - e.Error( http.StatusInternalServerError, err, "删除失败") - return + e.Error(500, err, fmt.Sprintf("删除{{.TableComment}} %v 失败,\r\n失败信息 %s", req.Ids, err.Error())) + return } e.OK( control.GetId(), "删除成功") } \ No newline at end of file diff --git a/template/v4/no_actions/service.go.template b/template/v4/no_actions/service.go.template index bd515d2a..56f968e3 100644 --- a/template/v4/no_actions/service.go.template +++ b/template/v4/no_actions/service.go.template @@ -7,17 +7,16 @@ import ( "gorm.io/gorm" "go-admin/app/{{.PackageName}}/models" - "go-admin/common/actions" - cDto "go-admin/common/dto" "go-admin/app/{{.PackageName}}/service/dto" + cDto "go-admin/common/dto" ) type {{.ClassName}} struct { service.Service } -// Get{{.ClassName}}Page 获取{{.ClassName}}列表 -func (e *{{.ClassName}}) Get{{.ClassName}}Page(c *dto.{{.ClassName}}Search, p *actions.DataPermission, list *[]models.{{.ClassName}}, count *int64) error { +// GetPage 获取{{.ClassName}}列表 +func (e *{{.ClassName}}) GetPage(c *dto.{{.ClassName}}Search, p *actions.DataPermission, list *[]models.{{.ClassName}}, count *int64) error { var err error var data models.{{.ClassName}} @@ -30,14 +29,14 @@ func (e *{{.ClassName}}) Get{{.ClassName}}Page(c *dto.{{.ClassName}}Search, p *a Find(list).Limit(-1).Offset(-1). Count(count).Error if err != nil { - e.Log.Errorf("Service Get{{.ClassName}}Page error:%s", err) + e.Log.Errorf("{{.ClassName}}Service GetPage error:%s \r\n", err) return err } return nil } -// Get{{.ClassName}} 获取{{.ClassName}}对象 -func (e *{{.ClassName}}) Get{{.ClassName}}(d *dto.{{.ClassName}}ById, p *actions.DataPermission, model *models.{{.ClassName}}) error { +// Get 获取{{.ClassName}}对象 +func (e *{{.ClassName}}) Get(d *dto.{{.ClassName}}ById, p *actions.DataPermission, model *models.{{.ClassName}}) error { var data models.{{.ClassName}} err := e.Orm.Model(&data). @@ -47,7 +46,7 @@ func (e *{{.ClassName}}) Get{{.ClassName}}(d *dto.{{.ClassName}}ById, p *actions First(model, d.GetId()).Error if err != nil && errors.Is(err, gorm.ErrRecordNotFound) { err = errors.New("查看对象不存在或无权查看") - e.Log.Errorf("Service Get{{.ClassName}} error:%s", err) + e.Log.Errorf("Service Get{{.ClassName}} error:%s \r\n", err) return err } if err != nil { @@ -57,34 +56,43 @@ func (e *{{.ClassName}}) Get{{.ClassName}}(d *dto.{{.ClassName}}ById, p *actions return nil } -// Insert{{.ClassName}} 创建{{.ClassName}}对象 -func (e *{{.ClassName}}) Insert{{.ClassName}}(c *models.{{.ClassName}}) error { - err := e.Orm.Create(c).Error +// Insert 创建{{.ClassName}}对象 +func (e *{{.ClassName}}) Insert(c *dto.{{.ClassName}}Control) error { + var err error + var data models.{{.ClassName}} + c.Generate(&data) + err := e.Orm.Create(c&data).Error if err != nil { - e.Log.Errorf("Service Insert{{.ClassName}} error:%s", err) + e.Log.Errorf("{{.ClassName}}Service Insert error:%s \r\n", err) return err } return nil } -// Update{{.ClassName}} 修改{{.ClassName}}对象 -func (e *{{.ClassName}}) Update{{.ClassName}}(c *models.{{.ClassName}}, p *actions.DataPermission) error { - db := e.Orm.Model(c). - Scopes( - actions.Permission(c.TableName(), p), - ).Where(c.GetId()).Updates(c) - if err := db.Error; err != nil { - e.Log.Errorf("Service Update{{.ClassName}} error:%s", err) +// Update 修改{{.ClassName}}对象 +func (e *{{.ClassName}}) Update(c *models.{{.ClassName}}, p *actions.DataPermission) error { + var err error + var model = models.{{.ClassName}} + e.Orm.Scopes( + actions.Permission(data.TableName(), p), + ).First(&model, c.GetId()) + c.Generate(&model) + + db := e.Orm.Save(&model) + if db.Error != nil { + e.Log.Errorf("{{.ClassName}}Service Save error:%s \r\n", err) return err } - if db.RowsAffected == 0 { - return errors.New("无权更新该数据") - } - return nil + if db.RowsAffected == 0 { + return errors.New("无权更新该数据") + + } + return nil } // Remove{{.ClassName}} 删除{{.ClassName}} -func (e *{{.ClassName}}) Remove{{.ClassName}}(d *dto.{{.ClassName}}ById, p *actions.DataPermission) error { +func (e *{{.ClassName}}) Remove(d *dto.{{.ClassName}}ById, p *actions.DataPermission) error { + var err error var data models.{{.ClassName}} db := e.Orm.Model(&data). @@ -92,7 +100,7 @@ func (e *{{.ClassName}}) Remove{{.ClassName}}(d *dto.{{.ClassName}}ById, p *acti actions.Permission(data.TableName(), p), ).Delete(&data, d.GetId()) if err := db.Error; err != nil { - e.Log.Errorf("Service Remove{{.ClassName}} error:%s", err) + e.Log.Errorf("Service Remove{{.ClassName}} error:%s \r\n", err) return err } if db.RowsAffected == 0 {