From 1f47d78a5f82998fe62fefe6d6f076583c101800 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sat, 17 Jun 2023 12:30:25 +0300 Subject: feat: search with query (#40) --- backend/controllers/homeController.go | 36 ++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'backend/controllers') 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 import ( "log" "net/http" + "strings" "github.com/gin-gonic/gin" "github.com/pektezol/leastportals/backend/database" @@ -122,15 +123,19 @@ func Rankings(c *gin.Context) { }) } -// GET Search +// GET Search With Query // -// @Summary Get all user and map data. +// @Summary Get all user and map data matching to the query. // @Tags search // @Produce json +// @Param q query string false "Search user or map name." // @Success 200 {object} models.Response{data=models.SearchResponse} // @Failure 400 {object} models.Response // @Router /search [get] -func Search(c *gin.Context) { +func SearchWithQuery(c *gin.Context) { + query := c.Query("q") + query = strings.ToLower(query) + log.Println(query) var response models.SearchResponse // Cache all maps for faster response var maps = []struct { @@ -248,8 +253,23 @@ func Search(c *gin.Context) { {ID: 109, Name: "Gel Maze"}, {ID: 110, Name: "Crazier Box"}, } - response.Maps = maps - rows, err := database.DB.Query("SELECT steam_id, user_name FROM users") //WHERE player_name LIKE ?", "%"+query+"%") + var filteredMaps []struct { + ID int `json:"id"` + Name string `json:"name"` + } + for _, m := range maps { + if strings.Contains(strings.ToLower(m.Name), strings.ToLower(query)) { + filteredMaps = append(filteredMaps, m) + } + } + response.Maps = filteredMaps + if len(response.Maps) == 0 { + response.Maps = []struct { + ID int "json:\"id\"" + Name string "json:\"name\"" + }{} + } + rows, err := database.DB.Query("SELECT steam_id, user_name FROM users WHERE lower(user_name) LIKE $1", "%"+query+"%") if err != nil { log.Fatal(err) } @@ -265,6 +285,12 @@ func Search(c *gin.Context) { } response.Players = append(response.Players, user) } + if len(response.Players) == 0 { + response.Players = []struct { + SteamID string "json:\"steam_id\"" + UserName string "json:\"user_name\"" + }{} + } c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Search successfully retrieved.", -- cgit v1.2.3