You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ju...@apache.org on 2020/07/12 12:33:39 UTC

[incubator-apisix-dashboard] branch master updated: fix: return all objects when search route & upstream (#311)

This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-apisix-dashboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 4ee67f9  fix: return all objects when search route & upstream (#311)
4ee67f9 is described below

commit 4ee67f947b0b88a1cd6dbd6a4c7d00b4d81aa81f
Author: kv <gx...@163.com>
AuthorDate: Sun Jul 12 20:33:02 2020 +0800

    fix: return all objects when search route & upstream (#311)
    
    * fix: route search
    
    * fix: upstream search
---
 api/route/route.go    | 32 ++++++++++++++++++++++++--------
 api/route/upstream.go | 29 ++++++++++++++++++++++++++++-
 2 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/api/route/route.go b/api/route/route.go
index 29bae16..db09f4f 100644
--- a/api/route/route.go
+++ b/api/route/route.go
@@ -79,6 +79,7 @@ func listRoute(c *gin.Context) {
 	if size == 0 {
 		size = 10
 	}
+	db = db.Table("routes")
 	isSearch := true
 	if name, exist := c.GetQuery("name"); exist {
 		db = db.Where("name like ? ", "%"+name+"%")
@@ -103,18 +104,14 @@ func listRoute(c *gin.Context) {
 	// search
 	if isSearch {
 		if search, exist := c.GetQuery("search"); exist {
-			db = db.Where("name like ? ", "%"+search+"%").
-				Or("description like ? ", "%"+search+"%").
-				Or("hosts like ? ", "%"+search+"%").
-				Or("uris like ? ", "%"+search+"%").
-				Or("upstream_nodes like ? ", "%"+search+"%")
+			s := "%" + search + "%"
+			db = db.Where("name like ? or description like ? or hosts like ? or uris like ? or upstream_nodes like ? ", s, s, s, s, s)
 		}
 	}
-	// todo params check
 	// mysql
 	routeList := []service.Route{}
 	var count int
-	if err := db.Order("priority, update_time desc").Table("routes").Offset((page - 1) * size).Limit(size).Find(&routeList).Count(&count).Error; err != nil {
+	if err := db.Order("priority, update_time desc").Table("routes").Offset((page - 1) * size).Limit(size).Find(&routeList).Error; err != nil {
 		e := errno.FromMessage(errno.RouteRequestError, err.Error())
 		logger.Error(e.Msg)
 		c.AbortWithStatusJSON(http.StatusBadRequest, e.Response())
@@ -126,6 +123,12 @@ func listRoute(c *gin.Context) {
 			response.Parse(&r)
 			responseList = append(responseList, *response)
 		}
+		if err := db.Count(&count).Error; err != nil {
+			e := errno.FromMessage(errno.RouteRequestError, err.Error())
+			logger.Error(e.Msg)
+			c.AbortWithStatusJSON(http.StatusInternalServerError, e.Response())
+			return
+		}
 		result := &service.ListResponse{Count: count, Data: responseList}
 		resp, _ := json.Marshal(result)
 		c.Data(http.StatusOK, service.ContentType, resp)
@@ -241,7 +244,20 @@ func updateRoute(c *gin.Context) {
 
 func findRoute(c *gin.Context) {
 	rid := c.Param("rid")
-	// todo  params check
+	var count int
+	if err := conf.DB().Table("routes").Where("id=?", rid).Count(&count).Error; err != nil {
+		e := errno.FromMessage(errno.RouteRequestError, err.Error()+" route ID: "+rid)
+		logger.Error(e.Msg)
+		c.AbortWithStatusJSON(http.StatusInternalServerError, e.Response())
+		return
+	} else {
+		if count < 1 {
+			e := errno.FromMessage(errno.RouteRequestError, " route ID: "+rid+" not exist")
+			logger.Error(e.Msg)
+			c.AbortWithStatusJSON(e.Status, e.Response())
+			return
+		}
+	}
 	// find from apisix
 	request := &service.ApisixRouteRequest{}
 	if response, err := request.FindById(rid); err != nil {
diff --git a/api/route/upstream.go b/api/route/upstream.go
index 7433aa7..ac319a2 100644
--- a/api/route/upstream.go
+++ b/api/route/upstream.go
@@ -161,6 +161,22 @@ func createUpstream(c *gin.Context) {
 
 func findUpstream(c *gin.Context) {
 	uid := c.Param("uid")
+	upstream := &service.UpstreamDao{}
+	var count int
+	if err := conf.DB().Table("upstreams").Where("id=?", uid).Count(&count).Error; err != nil {
+		e := errno.FromMessage(errno.UpstreamRequestError, err.Error()+" upstream ID: "+uid)
+		logger.Error(e.Msg)
+		c.AbortWithStatusJSON(http.StatusBadRequest, e.Response())
+		return
+	} else {
+		if count < 1 {
+			e := errno.FromMessage(errno.UpstreamRequestError, " upstream ID: "+uid+" not exist")
+			logger.Error(e.Msg)
+			c.AbortWithStatusJSON(e.Status, e.Response())
+			return
+		}
+	}
+	conf.DB().Table("upstreams").Where("id=?", uid).First(&upstream)
 	// find from apisix
 	aur := &service.ApisixUpstreamRequest{Id: uid}
 	if resp, err := aur.FindById(); err != nil {
@@ -188,9 +204,14 @@ func listUpstream(c *gin.Context) {
 		size = 10
 	}
 	db := conf.DB()
+	db = db.Table("upstreams")
+	if search, exist := c.GetQuery("search"); exist {
+		s := "%" + search + "%"
+		db = db.Where("name like ? or description like ? or nodes like ? ", s, s, s)
+	}
 	upstreamList := []service.UpstreamDao{}
 	var count int
-	if err := db.Order("update_time desc").Table("upstreams").Offset((page - 1) * size).Limit(size).Find(&upstreamList).Count(&count).Error; err != nil {
+	if err := db.Order("update_time desc").Offset((page - 1) * size).Limit(size).Find(&upstreamList).Error; err != nil {
 		e := errno.FromMessage(errno.RouteRequestError, err.Error())
 		logger.Error(e.Msg)
 		c.AbortWithStatusJSON(http.StatusInternalServerError, e.Response())
@@ -203,6 +224,12 @@ func listUpstream(c *gin.Context) {
 				responseList = append(responseList, response)
 			}
 		}
+		if err := db.Count(&count).Error; err != nil {
+			e := errno.FromMessage(errno.UpstreamRequestError, err.Error())
+			logger.Error(e.Msg)
+			c.AbortWithStatusJSON(http.StatusInternalServerError, e.Response())
+			return
+		}
 		result := &service.ListResponse{Count: count, Data: responseList}
 		resp, _ := json.Marshal(result)
 		c.Data(http.StatusOK, service.ContentType, resp)