47 lines
982 B
Go
47 lines
982 B
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"gitea.starryskymeow.cn/B309/datamarket/internal/service"
|
|
"github.com/go-chi/render"
|
|
"github.com/gorilla/schema"
|
|
)
|
|
|
|
type Response[T any] struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
Data T `json:"data,omitempty"`
|
|
}
|
|
|
|
type ListResponse[T any] struct {
|
|
List []T `json:"list"`
|
|
Total int64 `json:"total"`
|
|
Limit int32 `json:"limit"`
|
|
Offset int32 `json:"offset"`
|
|
}
|
|
|
|
var decoder = schema.NewDecoder()
|
|
|
|
func init() {
|
|
decoder.IgnoreUnknownKeys(true)
|
|
}
|
|
|
|
func renderSuccess[T any](w http.ResponseWriter, r *http.Request, status int, message string, data T) {
|
|
render.Status(r, status)
|
|
render.JSON(w, r, Response[T]{
|
|
Code: 0,
|
|
Message: message,
|
|
Data: data,
|
|
})
|
|
}
|
|
|
|
func renderServiceError(w http.ResponseWriter, r *http.Request, err error) {
|
|
status := service.StatusCode(err)
|
|
render.Status(r, status)
|
|
render.JSON(w, r, Response[any]{
|
|
Code: status,
|
|
Message: service.Message(err),
|
|
})
|
|
}
|