123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- package common
- import (
- "fmt"
- "log/slog"
- )
- import (
- "github.com/gin-gonic/gin"
- "github.com/nicksnyder/go-i18n/v2/i18n"
- "github.com/spf13/cast"
- )
- const OKCode = "0x000000"
- const InvalidTokenCode = "0x010101"
- const InvalidRoleCode = "0x010102"
- type ResDesc string
- var (
- // 全局
- Success ResDesc = "ErrCode_Success"
- InvalidTokenError ResDesc = "ErrCode_InvalidTokenError"
- InvalidRoleError ResDesc = "ErrCode_InvalidRoleError"
- InvalidParamError ResDesc = "ErrCode_InvalidParamError"
- NotExistsError ResDesc = "ErrCode_NotExistsError"
- NotSupportError ResDesc = "ErrCode_NotSupportError"
- NoAuthError ResDesc = "ErrCode_NoAuthError"
- ExistsError ResDesc = "ErrCode_ExistsError"
- NotAvailableError ResDesc = "ErrCode_NotAvailableError"
- UnknownError ResDesc = "ErrCode_UnknownError"
- InvalidLanguageError ResDesc = "ErrCode_InvalidLanguageError"
- InvalidSourceError ResDesc = "ErrCode_InvalidSourceError"
- InvalidProductError ResDesc = "ErrCode_InvalidProductError"
- // 业务 错误
- InvalidIdError ResDesc = "InvalidIdError"
- FieldTypeError ResDesc = "FieldTypeError"
- )
- var (
- OK = &ResStatus{Code: "0x000000", Description: Success, Solution: ""}
- InvalidToken = &ResStatus{Code: "0x000101", Description: InvalidTokenError, Solution: ""}
- InvalidRole = &ResStatus{Code: "0x000102", Description: InvalidRoleError, Solution: ""}
- InvalidParam = &ResStatus{Code: "0x000103", Description: InvalidParamError, Solution: ""}
- NotExists = &ResStatus{Code: "0x000104", Description: NotExistsError, Solution: ""}
- NotSupport = &ResStatus{Code: "0x000105", Description: NotSupportError, Solution: ""}
- NoAuth = &ResStatus{Code: "0x000106", Description: NoAuthError, Solution: ""}
- Exists = &ResStatus{Code: "0x000107", Description: ExistsError, Solution: ""}
- NotAvailable = &ResStatus{Code: "0x000108", Description: NotAvailableError, Solution: ""}
- InvalidLanguage = &ResStatus{Code: "0x000111", Description: InvalidLanguageError, Solution: ""}
- InvalidSource = &ResStatus{Code: "0x000112", Description: InvalidSourceError, Solution: ""}
- InvalidProduct = &ResStatus{Code: "0x000113", Description: InvalidProductError, Solution: ""}
- InvalidUsernameOrPasswd = &ResStatus{Code: "0x010101", Description: "ErrCode_InvalidUsernameOrPasswdError", Solution: ""}
- Unknown = &ResStatus{Code: "0x999999", Description: UnknownError, Solution: ""}
- )
- func helper(code string, msg ResDesc) *ResStatus {
- return &ResStatus{
- Code: code,
- Description: msg,
- Solution: "",
- }
- }
- type ResStatus struct {
- Code string `json:"code"`
- Description ResDesc `json:"description"`
- Params map[string]interface{} `json:"-"`
- Solution string `json:"solution"`
- }
- func (p *ResStatus) Error() string {
- return string(p.Description)
- }
- func (p *ResStatus) Desc(msg ResDesc) *ResStatus {
- return &ResStatus{p.Code, msg, nil, p.Solution}
- }
- func convertParamsToMap(params ...interface{}) map[string]interface{} {
- result := make(map[string]interface{})
- for i := 0; i < len(params); i += 2 {
- var value interface{}
- if i+1 < len(params) {
- value = params[i+1]
- } else {
- value = nil
- }
- result[cast.ToString(params[i])] = value
- }
- return result
- }
- func (p *ResStatus) SetParam(params ...interface{}) *ResStatus {
- return &ResStatus{p.Code, p.Description, convertParamsToMap(params), p.Solution}
- }
- func (p *ResStatus) Translator(localizer *i18n.Localizer) *ResStatus {
- params := []string{}
- if len(p.Params) > 0 {
- for _, param := range p.Params {
- params = append(params, fmt.Sprintf("%v", param))
- }
- }
- t, err := localizer.Localize(&i18n.LocalizeConfig{
- MessageID: string(p.Description),
- TemplateData: params,
- })
- if err != nil {
- slog.Error("translator fail\n", "desc", p.Description, "err", err)
- t = string(p.Description)
- }
- return &ResStatus{p.Code, ResDesc(t), p.Params, p.Solution}
- }
- func (p *ResStatus) H(data ...interface{}) gin.H {
- if len(data) > 0 {
- return gin.H{
- "code": p.Code,
- "description": p.Description,
- "solution": p.Solution,
- "data": data[0],
- }
- }
- return gin.H{
- "code": p.Code,
- "description": p.Description,
- "solution": p.Solution,
- "data": gin.H{},
- }
- }
|