aboutsummaryrefslogtreecommitdiff
path: root/backend/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'backend/controllers')
-rw-r--r--backend/controllers/homeController.go36
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
3import ( 3import (
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]
133func Search(c *gin.Context) { 135func 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.",