Spaces:
Build error
Build error
| package common | |
| import ( | |
| "bytes" | |
| "io" | |
| "net/http" | |
| "one-api/constant" | |
| "strings" | |
| "time" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| const KeyRequestBody = "key_request_body" | |
| func GetRequestBody(c *gin.Context) ([]byte, error) { | |
| requestBody, _ := c.Get(KeyRequestBody) | |
| if requestBody != nil { | |
| return requestBody.([]byte), nil | |
| } | |
| requestBody, err := io.ReadAll(c.Request.Body) | |
| if err != nil { | |
| return nil, err | |
| } | |
| _ = c.Request.Body.Close() | |
| c.Set(KeyRequestBody, requestBody) | |
| return requestBody.([]byte), nil | |
| } | |
| func UnmarshalBodyReusable(c *gin.Context, v any) error { | |
| requestBody, err := GetRequestBody(c) | |
| if err != nil { | |
| return err | |
| } | |
| //if DebugEnabled { | |
| // println("UnmarshalBodyReusable request body:", string(requestBody)) | |
| //} | |
| contentType := c.Request.Header.Get("Content-Type") | |
| if strings.HasPrefix(contentType, "application/json") { | |
| err = Unmarshal(requestBody, &v) | |
| } else { | |
| // skip for now | |
| // TODO: someday non json request have variant model, we will need to implementation this | |
| } | |
| if err != nil { | |
| return err | |
| } | |
| // Reset request body | |
| c.Request.Body = io.NopCloser(bytes.NewBuffer(requestBody)) | |
| return nil | |
| } | |
| func SetContextKey(c *gin.Context, key constant.ContextKey, value any) { | |
| c.Set(string(key), value) | |
| } | |
| func GetContextKey(c *gin.Context, key constant.ContextKey) (any, bool) { | |
| return c.Get(string(key)) | |
| } | |
| func GetContextKeyString(c *gin.Context, key constant.ContextKey) string { | |
| return c.GetString(string(key)) | |
| } | |
| func GetContextKeyInt(c *gin.Context, key constant.ContextKey) int { | |
| return c.GetInt(string(key)) | |
| } | |
| func GetContextKeyBool(c *gin.Context, key constant.ContextKey) bool { | |
| return c.GetBool(string(key)) | |
| } | |
| func GetContextKeyStringSlice(c *gin.Context, key constant.ContextKey) []string { | |
| return c.GetStringSlice(string(key)) | |
| } | |
| func GetContextKeyStringMap(c *gin.Context, key constant.ContextKey) map[string]any { | |
| return c.GetStringMap(string(key)) | |
| } | |
| func GetContextKeyTime(c *gin.Context, key constant.ContextKey) time.Time { | |
| return c.GetTime(string(key)) | |
| } | |
| func GetContextKeyType[T any](c *gin.Context, key constant.ContextKey) (T, bool) { | |
| if value, ok := c.Get(string(key)); ok { | |
| if v, ok := value.(T); ok { | |
| return v, true | |
| } | |
| } | |
| var t T | |
| return t, false | |
| } | |
| func ApiError(c *gin.Context, err error) { | |
| c.JSON(http.StatusOK, gin.H{ | |
| "success": false, | |
| "message": err.Error(), | |
| }) | |
| } | |
| func ApiErrorMsg(c *gin.Context, msg string) { | |
| c.JSON(http.StatusOK, gin.H{ | |
| "success": false, | |
| "message": msg, | |
| }) | |
| } | |
| func ApiSuccess(c *gin.Context, data any) { | |
| c.JSON(http.StatusOK, gin.H{ | |
| "success": true, | |
| "message": "", | |
| "data": data, | |
| }) | |
| } | |