|
|
package api
import ( "context" "encoding/json" "git.aiterp.net/lucifer/new-server/models" "github.com/gin-gonic/gin" "strconv" )
var errorMap = map[error]int{ models.ErrNotFound: 404, models.ErrInvalidName: 400, models.ErrBadInput: 400, models.ErrBadColor: 400, models.ErrInternal: 500, models.ErrUnknownColorFormat: 400,
models.ErrSceneInvalidInterval: 400, models.ErrSceneNoRoles: 400, models.ErrSceneRoleNoStates: 400, models.ErrSceneRoleUnsupportedOrdering: 422, models.ErrSceneRoleUnknownEffect: 422, models.ErrSceneRoleUnknownPowerMode: 422, }
type response struct { Code int `json:"code"` Message string `json:"message"` Data interface{} `json:"data"` }
func handler(fun func(c *gin.Context) (interface{}, error)) gin.HandlerFunc { return func(c *gin.Context) { val, err := fun(c) if err != nil { errCode := errorMap[err] if errCode == 0 { errCode = 500 }
c.JSON(errCode, response{ Code: errCode, Message: err.Error(), }) return }
c.JSON(200, response{ Code: 200, Message: "success", Data: val, }) } }
func intParam(c *gin.Context, key string) int { i, err := strconv.Atoi(c.Param(key)) if err != nil { return 0 }
return i }
func parseBody(c *gin.Context, target interface{}) error { err := json.NewDecoder(c.Request.Body).Decode(target) if err != nil { return models.ErrBadInput }
return nil }
func ctxOf(c *gin.Context) context.Context { return c.Request.Context() }
|