package api import ( "fmt" "github.com/cpyun/cpyun-admin-core/logger" "github.com/cpyun/cpyun-admin-core/sdk/pkg" "github.com/cpyun/cpyun-admin-core/sdk/pkg/response" "github.com/cpyun/cpyun-admin-core/sdk/service" "github.com/gin-gonic/gin" "gorm.io/gorm" "net/http" ) type Api struct { Context *gin.Context Logger *logger.Helper Orm *gorm.DB Errors error Msg string } // AddError 添加错误 func (e *Api) AddError(err error) { if e.Errors == nil { e.Errors = err } else if err != nil { e.Errors = fmt.Errorf("%v; %w", e.Error, err) } //return e.Errors } // MakeContext 设置context func (e *Api) MakeContext(ctx *gin.Context) *Api { e.Context = ctx e.Logger = GetRequestLogger(ctx) return e } // MakeOrm 设置Orm DB func (e *Api) MakeOrm() *Api { var err error db, err := pkg.GetOrm(e.Context) if err != nil { e.Logger.Error(http.StatusInternalServerError, err, "数据库连接获取失败") e.AddError(err) } e.Orm = db return e } // GetOrm 获取Orm DB func (e Api) GetOrm() *gorm.DB { db, err := pkg.GetOrm(e.Context) if err != nil { e.Logger.Error(http.StatusInternalServerError, err, "数据库连接获取失败") } return db } // MakeService 设置服务Log、Orm 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, msg string) { response.Error(e.Context, code, msg) } // Success 成功数据处理 func (e Api) Success(msg string, data any) { response.Success(e.Context, msg, data) } // Custom 自定义内容响应 func (e Api) Custom(httpCode int, jsonObj any) { response.Custom(e.Context, httpCode, jsonObj) }
好的,你的代码主要是在使用Go语言和Gin框架以及GORM进行API开发。我来总结一下
Api
结构体中的关键功能和方法:
字段:
Context
:用于处理HTTP请求和响应的Gin上下文。Logger
:用于记录日志的辅助对象。Orm
:GORM数据库实例。Errors
:存储在API处理过程中发生的任何错误。Msg
:存储在API响应中返回的任何消息。方法:
AddError(err error)
:将错误添加到Api
结构体的错误堆栈中。MakeContext(ctx *gin.Context) *Api
:设置Gin上下文并初始化日志记录器。MakeOrm() *Api
:初始化GORM数据库实例。GetOrm() *gorm.DB
:检索GORM数据库实例。MakeService(c *service.Service) *Api
:为服务设置日志记录器和GORM数据库实例。Error(code int, msg string)
:使用特定的HTTP状态码和消息发送错误响应。Success(msg string, data any)
:使用消息和可选数据发送成功响应。Custom(httpCode int, jsonObj any)
:使用特定的HTTP状态码和JSON对象发送自定义响应。这个结构有助于处理API请求、数据库操作、日志记录以及发送适当的响应。如果对任何部分有特定的问题或需要进一步解释,请随时提出!