This update replaces instances of DecodeJson and DecodeJsonStr with UnmarshalJson and UnmarshalJsonStr in various relay handlers, enhancing code consistency and clarity in JSON processing. The changes improve maintainability and align with recent refactoring efforts in the codebase.
45 lines
1003 B
Go
45 lines
1003 B
Go
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/gin-gonic/gin"
|
|
"io"
|
|
"strings"
|
|
)
|
|
|
|
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
|
|
}
|
|
contentType := c.Request.Header.Get("Content-Type")
|
|
if strings.HasPrefix(contentType, "application/json") {
|
|
err = UnmarshalJson(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
|
|
}
|