rpi-relay/internal/context/context.go

71 lines
1.4 KiB
Go

package context
import (
"rpirelay/internal/response"
"github.com/gin-gonic/gin"
)
type C struct {
*gin.Context
}
type CustomHandler func(c *C)
func PatchContext(handler CustomHandler) gin.HandlerFunc {
return func(ctx *gin.Context) {
c := &C{
Context: ctx,
}
handler(c)
}
}
// Success
// send success body to client
func (c *C) Success(i ...interface{}) {
r := response.Get(response.RespSuccess)
var resp interface{} = r.Body
if len(i) > 0 {
resp = i[0]
}
c.AbortWithStatusJSON(r.Status, resp)
}
func (c *C) DataFormat(code ...response.MessageCode) {
r := response.Get(response.RespDataFormat, code...)
c.AbortWithStatusJSON(r.Status, r.Body)
}
func (c *C) NotFound(code ...response.MessageCode) {
r := response.Get(response.RespNotFound, code...)
c.AbortWithStatusJSON(r.Status, r.Body)
}
func (c *C) Forbidden(code ...response.MessageCode) {
r := response.Get(response.RespNotFound, code...)
c.AbortWithStatusJSON(r.Status, r.Body)
}
func (c *C) ServerError(code ...response.MessageCode) {
r := response.Get(response.RespInternalError, code...)
c.AbortWithStatusJSON(r.Status, r.Body)
}
func (c *C) CustomResp(rt response.RespType, code response.MessageCode, data ...interface{}) {
r := response.Get(rt)
if code != r.Body.MessageCode {
r.Body.MessageCode, r.Body.Message = response.GetCodeMessage(code)
}
var resp interface{} = r.Body
if len(data) > 0 {
resp = data[0]
}
c.AbortWithStatusJSON(r.Status, resp)
}