diff --git a/app/admin/service/sys_menu.go b/app/admin/service/sys_menu.go index 8a95be36..6cf75da9 100644 --- a/app/admin/service/sys_menu.go +++ b/app/admin/service/sys_menu.go @@ -6,10 +6,11 @@ import ( "github.com/go-admin-team/go-admin-core/sdk/pkg" "gorm.io/gorm" - "github.com/go-admin-team/go-admin-core/sdk/service" "go-admin/app/admin/models" "go-admin/app/admin/service/dto" cDto "go-admin/common/dto" + + "github.com/go-admin-team/go-admin-core/sdk/service" ) type SysMenu struct { @@ -312,4 +313,4 @@ func (e *SysMenu) getByRoleName(roleName string) ([]models.SysMenu, error) { e.Log.Errorf("db error:%s", err) } return MenuList, err -} \ No newline at end of file +} diff --git a/common/apis/api.go b/common/apis/api.go new file mode 100644 index 00000000..f4350065 --- /dev/null +++ b/common/apis/api.go @@ -0,0 +1,138 @@ +package apis + +import ( + "errors" + "fmt" + "net/http" + + "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" + "github.com/go-admin-team/go-admin-core/logger" + "github.com/go-admin-team/go-admin-core/sdk/api" + "github.com/go-admin-team/go-admin-core/sdk/pkg" + "github.com/go-admin-team/go-admin-core/sdk/pkg/response" + "gorm.io/gorm" + + "go-admin/common/service" +) + +type Api struct { + Context *gin.Context + Logger *logger.Helper + Orm *gorm.DB + Errors error +} + +func (e *Api) AddError(err error) { + if e.Errors == nil { + e.Errors = err + } else if err != nil { + e.Logger.Error(err) + e.Errors = fmt.Errorf("%v; %w", e.Error, err) + } +} + +// MakeContext 设置http上下文 +func (e *Api) MakeContext(c *gin.Context) *Api { + fmt.Println(&c) + e.Context = c + e.Logger = api.GetRequestLogger(c) + fmt.Println(&e.Context) + return e +} + +// GetLogger 获取上下文提供的日志 +func (e Api) GetLogger() *logger.Helper { + return api.GetRequestLogger(e.Context) +} + +func (e *Api) Bind(d interface{}, bindings ...binding.Binding) *Api { + var err error + if len(bindings) == 0 { + bindings = append(bindings, binding.JSON, nil) + } + for i := range bindings { + switch bindings[i] { + case binding.JSON: + err = e.Context.ShouldBindWith(d, binding.JSON) + case binding.XML: + err = e.Context.ShouldBindWith(d, binding.XML) + case binding.Form: + err = e.Context.ShouldBindWith(d, binding.Form) + case binding.Query: + err = e.Context.ShouldBindWith(d, binding.Query) + case binding.FormPost: + err = e.Context.ShouldBindWith(d, binding.FormPost) + case binding.FormMultipart: + err = e.Context.ShouldBindWith(d, binding.FormMultipart) + case binding.ProtoBuf: + err = e.Context.ShouldBindWith(d, binding.ProtoBuf) + case binding.MsgPack: + err = e.Context.ShouldBindWith(d, binding.MsgPack) + case binding.YAML: + err = e.Context.ShouldBindWith(d, binding.YAML) + case binding.Header: + err = e.Context.ShouldBindWith(d, binding.Header) + default: + err = e.Context.ShouldBindUri(d) + } + if err != nil { + e.AddError(err) + } + } + return e +} + +// GetOrm 获取Orm DB +func (e Api) GetOrm() (*gorm.DB, error) { + db, err := pkg.GetOrm(e.Context) + if err != nil { + e.Error(http.StatusInternalServerError, err, "数据库连接获取失败") + return nil, err + } + return db, nil +} + +// MakeOrm 设置Orm DB +func (e *Api) MakeOrm() *Api { + var err error + if e.Logger == nil { + err = errors.New("at MakeOrm logger is nil") + //e.Logger.Error(http.StatusInternalServerError, err, "at MakeOrm logger is nil") + e.AddError(err) + return e + } + db, err := pkg.GetOrm(e.Context) + if err != nil { + e.Logger.Error(http.StatusInternalServerError, err, "数据库连接获取失败") + e.AddError(err) + } + e.Orm = db + return e +} + +func (e *Api) MakeService(c *service.Service) *Api { + c.Log = e.Logger + c.Orm = e.Orm + return e +} + +// Error 通常错误数据处理 +func (e Api) Error(code int, err error, msg string) { + response.Error(e.Context, code, err, msg) +} + +// OK 通常成功数据处理 +func (e Api) OK(data interface{}, msg string) { + response.OK(e.Context, data, msg) +} + +// PageOK 分页数据处理 +func (e Api) PageOK(result interface{}, count int, pageIndex int, pageSize int, msg string) { + response.PageOK(e.Context, result, count, pageIndex, pageSize, msg) +} + +// Custom 兼容函数 +func (e Api) Custom(data gin.H) { + response.Custum(e.Context, data) +} diff --git a/common/middleware/logger.go b/common/middleware/logger.go index 21acf890..229a93ec 100644 --- a/common/middleware/logger.go +++ b/common/middleware/logger.go @@ -76,7 +76,7 @@ func LoggerToFile() gin.HandlerFunc { "method": reqMethod, "uri": reqUri, } - log.Info(logData) + log.WithFields(logData).Info() //l := logger.Logger{Logger: log.Fields(logData)} //l.Info(logData) if c.Request.Method != "GET" && c.Request.Method != "OPTIONS" && config.LoggerConfig.EnabledDB { diff --git a/common/middleware/request_id.go b/common/middleware/request_id.go index 47161c34..8dedd834 100644 --- a/common/middleware/request_id.go +++ b/common/middleware/request_id.go @@ -1,6 +1,8 @@ package middleware import ( + "github.com/go-admin-team/go-admin-core/logger" + "github.com/go-admin-team/go-admin-core/sdk/pkg" "net/http" "strings" @@ -24,6 +26,11 @@ func RequestId(trafficKey string) gin.HandlerFunc { } c.Request.Header.Set(trafficKey, requestId) c.Set(trafficKey, requestId) + c.Set(pkg.LoggerKey, + logger.NewHelper(logger.DefaultLogger). + WithFields(map[string]interface{}{ + trafficKey: requestId, + })) c.Next() } } diff --git a/common/service/service.go b/common/service/service.go new file mode 100644 index 00000000..0deb4a92 --- /dev/null +++ b/common/service/service.go @@ -0,0 +1,25 @@ +package service + +import ( + "fmt" + + "github.com/go-admin-team/go-admin-core/logger" + "gorm.io/gorm" +) + +type Service struct { + Orm *gorm.DB + Msg string + MsgID string + Log *logger.Helper + Error error +} + +func (db *Service) AddError(err error) error { + if db.Error == nil { + db.Error = err + } else if err != nil { + db.Error = fmt.Errorf("%v; %w", db.Error, err) + } + return db.Error +} diff --git a/go.mod b/go.mod index 03d0b403..07aa1837 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,8 @@ require ( github.com/bytedance/go-tagexpr/v2 v2.7.10 github.com/casbin/casbin/v2 v2.25.1 github.com/gin-gonic/gin v1.7.1 - github.com/go-admin-team/go-admin-core v1.3.5-rc.0.0.20210423072631-e3580b68ee26 - github.com/go-admin-team/go-admin-core/sdk v1.3.0-rc.3.0.20210427015751-b42693c49c6c + github.com/go-admin-team/go-admin-core v1.3.5-rc.0 + github.com/go-admin-team/go-admin-core/sdk v1.3.0-rc.3.0.20210519112810-242d8766f4b9 github.com/google/uuid v1.2.0 github.com/mssola/user_agent v0.5.2 github.com/opentracing/opentracing-go v1.1.0 @@ -28,4 +28,4 @@ require ( gorm.io/driver/postgres v1.0.6-0.20201208020313-1ed927cfab53 gorm.io/driver/sqlite v1.1.5-0.20201206014648-c84401fbe3ba gorm.io/gorm v1.21.6 -) \ No newline at end of file +)