Skip to content

Commit

Permalink
Optimized the HTTP bind util with streaming style
Browse files Browse the repository at this point in the history
  • Loading branch information
crazytaxii committed Jun 15, 2024
1 parent 6352e32 commit 9b5fdcc
Show file tree
Hide file tree
Showing 11 changed files with 129 additions and 139 deletions.
69 changes: 53 additions & 16 deletions api/server/httputils/httputils.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,24 +106,61 @@ func AbortFailedWithCode(c *gin.Context, code int, err error) {
c.Abort()
}

func ShouldBindAny(c *gin.Context, jsonObject interface{}, uriObject interface{}, queryObject interface{}) error {
var err error
if jsonObject != nil {
if err = c.ShouldBindJSON(jsonObject); err != nil {
return err
}
}
if uriObject != nil {
if err = c.ShouldBindUri(uriObject); err != nil {
return err
}
// func ShouldBindAny(c *gin.Context, jsonObject interface{}, uriObject interface{}, queryObject interface{}) error {
// var err error
// if jsonObject != nil {
// if err = c.ShouldBindJSON(jsonObject); err != nil {
// return err
// }
// }
// if uriObject != nil {
// if err = c.ShouldBindUri(uriObject); err != nil {
// return err
// }
// }
// if queryObject != nil {
// if err = c.ShouldBindQuery(queryObject); err != nil {
// return err
// }
// }
// return nil
// }

type errBind struct {
ctx *gin.Context
err error
}

func ShouldBind(c *gin.Context) *errBind {
return &errBind{
ctx: c,
}
if queryObject != nil {
if err = c.ShouldBindQuery(queryObject); err != nil {
return err
}
}

func (b *errBind) doBind(obj interface{}, bind func(obj interface{}) error) {
if b.err != nil {
return
}
return nil
b.err = bind(obj)
}

func (b *errBind) WithBody(json interface{}) *errBind {
b.doBind(json, b.ctx.ShouldBindJSON)
return b
}

func (b *errBind) WithUri(uri interface{}) *errBind {
b.doBind(uri, b.ctx.ShouldBindUri)
return b
}

func (b *errBind) WithQuery(query interface{}) *errBind {
b.doBind(query, b.ctx.ShouldBindQuery)
return b
}

func (b *errBind) Error() error {
return b.err
}

func GetUserIdFromRequest(ctx context.Context) (int64, error) {
Expand Down
45 changes: 18 additions & 27 deletions api/server/router/cluster/cluster_routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ func (cr *clusterRouter) createCluster(c *gin.Context) {
r := httputils.NewResponse()

var req types.CreateClusterRequest
if err := c.ShouldBindJSON(&req); err != nil {

if err := httputils.ShouldBind(c).WithBody(&req).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down Expand Up @@ -76,20 +77,15 @@ func (cr *clusterRouter) updateCluster(c *gin.Context) {
r := httputils.NewResponse()
var (
idMeta IdMeta
err error
req types.UpdateClusterRequest
)
if err = c.ShouldBindUri(&idMeta); err != nil {
httputils.SetFailed(c, r, err)
return
}

var req types.UpdateClusterRequest
if err = c.ShouldBindJSON(&req); err != nil {
if err := httputils.ShouldBind(c).WithUri(&idMeta).WithBody(&req).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}

if err = cr.c.Cluster().Update(c, idMeta.ClusterId, &req); err != nil {
if err := cr.c.Cluster().Update(c, idMeta.ClusterId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -114,16 +110,13 @@ func (cr *clusterRouter) updateCluster(c *gin.Context) {
func (cr *clusterRouter) deleteCluster(c *gin.Context) {
r := httputils.NewResponse()

var (
idMeta IdMeta
err error
)
if err = c.ShouldBindUri(&idMeta); err != nil {
var idMeta IdMeta
if err := httputils.ShouldBind(c).WithUri(&idMeta).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}

if err = cr.c.Cluster().Delete(c, idMeta.ClusterId); err != nil {
if err := cr.c.Cluster().Delete(c, idMeta.ClusterId); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down Expand Up @@ -151,7 +144,7 @@ func (cr *clusterRouter) getCluster(c *gin.Context) {
idMeta IdMeta
err error
)
if err = c.ShouldBindUri(&idMeta); err != nil {
if err = httputils.ShouldBind(c).WithUri(&idMeta).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down Expand Up @@ -206,15 +199,12 @@ func (cr *clusterRouter) listClusters(c *gin.Context) {
func (cr *clusterRouter) pingCluster(c *gin.Context) {
r := httputils.NewResponse()

var (
cluster types.Cluster
err error
)
if err = c.ShouldBindJSON(&cluster); err != nil {
var cluster types.Cluster
if err := httputils.ShouldBind(c).WithBody(&cluster).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = cr.c.Cluster().Ping(c, cluster.KubeConfig); err != nil {
if err := cr.c.Cluster().Ping(c, cluster.KubeConfig); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -227,13 +217,14 @@ func (cr *clusterRouter) protectCluster(c *gin.Context) {
var (
idMeta IdMeta
req types.ProtectClusterRequest
err error
)
if err = httputils.ShouldBindAny(c, &req, &idMeta, nil); err != nil {

if err := httputils.ShouldBind(c).WithBody(&req).WithUri(&idMeta).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = cr.c.Cluster().Protect(c, idMeta.ClusterId, &req); err != nil {

if err := cr.c.Cluster().Protect(c, idMeta.ClusterId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -253,7 +244,7 @@ func (cr *clusterRouter) aggregateEvents(c *gin.Context) {
err error
)

if err = c.ShouldBindUri(&optMeta); err != nil {
if err = httputils.ShouldBind(c).WithUri(&optMeta).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -274,7 +265,7 @@ func (cr *clusterRouter) getEventList(c *gin.Context) {
eventOpt types.EventOptions
err error
)
if err = httputils.ShouldBindAny(c, nil, &opts, &eventOpt); err != nil {
if err = httputils.ShouldBind(c).WithUri(&opts).WithQuery(&eventOpt).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down
2 changes: 1 addition & 1 deletion api/server/router/cluster/helm_routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func (cr *clusterRouter) ListReleases(c *gin.Context) {
err error
helmMeta HelmMeta
)
if err = c.ShouldBindUri(&helmMeta); err != nil {
if err = httputils.ShouldBind(c).WithUri(&helmMeta).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down
9 changes: 3 additions & 6 deletions api/server/router/cluster/ws.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,12 @@ import (

func (cr *clusterRouter) webShell(c *gin.Context) {
r := httputils.NewResponse()
var (
err error
opt types.WebShellOptions
)
if err = c.ShouldBindQuery(&opt); err != nil {
var opt types.WebShellOptions
if err := httputils.ShouldBind(c).WithQuery(&opt).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = cr.c.Cluster().WsHandler(c, &opt, c.Writer, c.Request); err != nil {
if err := cr.c.Cluster().WsHandler(c, &opt, c.Writer, c.Request); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down
21 changes: 8 additions & 13 deletions api/server/router/plan/config_routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,12 @@ func (t *planRouter) createPlanConfig(c *gin.Context) {
var (
opt planMeta
req types.CreatePlanConfigRequest
err error
)
if err = httputils.ShouldBindAny(c, &req, &opt, nil); err != nil {
if err := httputils.ShouldBind(c).WithUri(&opt).WithBody(&req).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = t.c.Plan().CreateConfig(c, opt.PlanId, &req); err != nil {
if err := t.c.Plan().CreateConfig(c, opt.PlanId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -55,13 +54,12 @@ func (t *planRouter) updatePlanConfig(c *gin.Context) {
var (
opt planConfigMeta
req types.UpdatePlanConfigRequest
err error
)
if err = httputils.ShouldBindAny(c, &req, &opt, nil); err != nil {
if err := httputils.ShouldBind(c).WithUri(&opt).WithBody(&req).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = t.c.Plan().UpdateConfig(c, opt.PlanId, opt.ConfigId, &req); err != nil {
if err := t.c.Plan().UpdateConfig(c, opt.PlanId, opt.ConfigId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -72,15 +70,12 @@ func (t *planRouter) updatePlanConfig(c *gin.Context) {
func (t *planRouter) deletePlanConfig(c *gin.Context) {
r := httputils.NewResponse()

var (
opt planConfigMeta
err error
)
if err = httputils.ShouldBindAny(c, nil, &opt, nil); err != nil {
var opt planConfigMeta
if err := httputils.ShouldBind(c).WithUri(&opt).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = t.c.Plan().DeleteConfig(c, opt.PlanId, opt.ConfigId); err != nil {
if err := t.c.Plan().DeleteConfig(c, opt.PlanId, opt.ConfigId); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -95,7 +90,7 @@ func (t *planRouter) getPlanConfig(c *gin.Context) {
opt planMeta
err error
)
if err = httputils.ShouldBindAny(c, nil, &opt, nil); err != nil {
if err = httputils.ShouldBind(c).WithUri(&opt).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down
23 changes: 9 additions & 14 deletions api/server/router/plan/node_routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,12 @@ func (t *planRouter) createPlanNode(c *gin.Context) {
var (
opt planMeta
req types.CreatePlanNodeRequest
err error
)
if err = httputils.ShouldBindAny(c, &req, &opt, nil); err != nil {
if err := httputils.ShouldBind(c).WithUri(&opt).WithBody(&req).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = t.c.Plan().CreateNode(c, opt.PlanId, &req); err != nil {
if err := t.c.Plan().CreateNode(c, opt.PlanId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -55,13 +54,12 @@ func (t *planRouter) updatePlanNode(c *gin.Context) {
var (
opt planNodeMeta
req types.UpdatePlanNodeRequest
err error
)
if err = httputils.ShouldBindAny(c, &req, &opt, nil); err != nil {
if err := httputils.ShouldBind(c).WithUri(&opt).WithBody(&req).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = t.c.Plan().UpdateNode(c, opt.PlanId, opt.NodeId, &req); err != nil {
if err := t.c.Plan().UpdateNode(c, opt.PlanId, opt.NodeId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -72,15 +70,12 @@ func (t *planRouter) updatePlanNode(c *gin.Context) {
func (t *planRouter) deletePlanNode(c *gin.Context) {
r := httputils.NewResponse()

var (
opt planNodeMeta
err error
)
if err = httputils.ShouldBindAny(c, nil, &opt, nil); err != nil {
var opt planNodeMeta
if err := httputils.ShouldBind(c).WithUri(&opt).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
if err = t.c.Plan().DeleteNode(c, opt.PlanId, opt.NodeId); err != nil {
if err := t.c.Plan().DeleteNode(c, opt.PlanId, opt.NodeId); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -95,7 +90,7 @@ func (t *planRouter) getPlanNode(c *gin.Context) {
opt planNodeMeta
err error
)
if err = httputils.ShouldBindAny(c, nil, &opt, nil); err != nil {
if err = httputils.ShouldBind(c).WithUri(&opt).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand All @@ -114,7 +109,7 @@ func (t *planRouter) listPlanNodes(c *gin.Context) {
opt planMeta
err error
)
if err = httputils.ShouldBindAny(c, nil, &opt, nil); err != nil {
if err = httputils.ShouldBind(c).WithUri(&opt).Error(); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down
Loading

0 comments on commit 9b5fdcc

Please sign in to comment.