diff options
Diffstat (limited to 'backend/controllers')
| -rw-r--r-- | backend/controllers/homeController.go | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/backend/controllers/homeController.go b/backend/controllers/homeController.go index edb770f..d30c835 100644 --- a/backend/controllers/homeController.go +++ b/backend/controllers/homeController.go | |||
| @@ -3,6 +3,7 @@ package controllers | |||
| 3 | import ( | 3 | import ( |
| 4 | "log" | 4 | "log" |
| 5 | "net/http" | 5 | "net/http" |
| 6 | "strings" | ||
| 6 | 7 | ||
| 7 | "github.com/gin-gonic/gin" | 8 | "github.com/gin-gonic/gin" |
| 8 | "github.com/pektezol/leastportals/backend/database" | 9 | "github.com/pektezol/leastportals/backend/database" |
| @@ -122,15 +123,19 @@ func Rankings(c *gin.Context) { | |||
| 122 | }) | 123 | }) |
| 123 | } | 124 | } |
| 124 | 125 | ||
| 125 | // GET Search | 126 | // GET Search With Query |
| 126 | // | 127 | // |
| 127 | // @Summary Get all user and map data. | 128 | // @Summary Get all user and map data matching to the query. |
| 128 | // @Tags search | 129 | // @Tags search |
| 129 | // @Produce json | 130 | // @Produce json |
| 131 | // @Param q query string false "Search user or map name." | ||
| 130 | // @Success 200 {object} models.Response{data=models.SearchResponse} | 132 | // @Success 200 {object} models.Response{data=models.SearchResponse} |
| 131 | // @Failure 400 {object} models.Response | 133 | // @Failure 400 {object} models.Response |
| 132 | // @Router /search [get] | 134 | // @Router /search [get] |
| 133 | func Search(c *gin.Context) { | 135 | func SearchWithQuery(c *gin.Context) { |
| 136 | query := c.Query("q") | ||
| 137 | query = strings.ToLower(query) | ||
| 138 | log.Println(query) | ||
| 134 | var response models.SearchResponse | 139 | var response models.SearchResponse |
| 135 | // Cache all maps for faster response | 140 | // Cache all maps for faster response |
| 136 | var maps = []struct { | 141 | var maps = []struct { |
| @@ -248,8 +253,23 @@ func Search(c *gin.Context) { | |||
| 248 | {ID: 109, Name: "Gel Maze"}, | 253 | {ID: 109, Name: "Gel Maze"}, |
| 249 | {ID: 110, Name: "Crazier Box"}, | 254 | {ID: 110, Name: "Crazier Box"}, |
| 250 | } | 255 | } |
| 251 | response.Maps = maps | 256 | var filteredMaps []struct { |
| 252 | rows, err := database.DB.Query("SELECT steam_id, user_name FROM users") //WHERE player_name LIKE ?", "%"+query+"%") | 257 | ID int `json:"id"` |
| 258 | Name string `json:"name"` | ||
| 259 | } | ||
| 260 | for _, m := range maps { | ||
| 261 | if strings.Contains(strings.ToLower(m.Name), strings.ToLower(query)) { | ||
| 262 | filteredMaps = append(filteredMaps, m) | ||
| 263 | } | ||
| 264 | } | ||
| 265 | response.Maps = filteredMaps | ||
| 266 | if len(response.Maps) == 0 { | ||
| 267 | response.Maps = []struct { | ||
| 268 | ID int "json:\"id\"" | ||
| 269 | Name string "json:\"name\"" | ||
| 270 | }{} | ||
| 271 | } | ||
| 272 | rows, err := database.DB.Query("SELECT steam_id, user_name FROM users WHERE lower(user_name) LIKE $1", "%"+query+"%") | ||
| 253 | if err != nil { | 273 | if err != nil { |
| 254 | log.Fatal(err) | 274 | log.Fatal(err) |
| 255 | } | 275 | } |
| @@ -265,6 +285,12 @@ func Search(c *gin.Context) { | |||
| 265 | } | 285 | } |
| 266 | response.Players = append(response.Players, user) | 286 | response.Players = append(response.Players, user) |
| 267 | } | 287 | } |
| 288 | if len(response.Players) == 0 { | ||
| 289 | response.Players = []struct { | ||
| 290 | SteamID string "json:\"steam_id\"" | ||
| 291 | UserName string "json:\"user_name\"" | ||
| 292 | }{} | ||
| 293 | } | ||
| 268 | c.JSON(http.StatusOK, models.Response{ | 294 | c.JSON(http.StatusOK, models.Response{ |
| 269 | Success: true, | 295 | Success: true, |
| 270 | Message: "Search successfully retrieved.", | 296 | Message: "Search successfully retrieved.", |