From c05ab558e61fba1fa42be9b740c9bfa3e3841640 Mon Sep 17 00:00:00 2001 From: Uttkarsh-raj Date: Fri, 10 Nov 2023 17:36:38 +0530 Subject: [PATCH] search api added --- Backend/controllers/tasks_controller.go | 69 +++++++++++++++++++++++++ Backend/main.go | 2 + Backend/routes/tasks_routes.go | 1 + 3 files changed, 72 insertions(+) diff --git a/Backend/controllers/tasks_controller.go b/Backend/controllers/tasks_controller.go index 3e3ab88..6061311 100644 --- a/Backend/controllers/tasks_controller.go +++ b/Backend/controllers/tasks_controller.go @@ -326,3 +326,72 @@ func DeleteTask() gin.HandlerFunc { c.JSON(http.StatusOK, gin.H{"success": true, "data": task}) } } + +func SearchTask() gin.HandlerFunc { + return func(c *gin.Context) { + tokenString := c.GetHeader("token") + if tokenString == "" { + c.JSON(http.StatusUnauthorized, gin.H{"success": false, "error": "No token Provided"}) + return + } + token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) { return []byte(SECRET_KEY), nil }) + if err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"success": false, "error": "Invalid Token"}) + return + } + if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { + log.Print("claims\n") + log.Print(claims) + user_id := claims["Uid"].(string) + var reqBody map[string]interface{} + if err := c.ShouldBindJSON(&reqBody); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + searchString, ok := reqBody["search"].(string) + if !ok { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid or missing 'search' in the request body"}) + return + } + query := bson.M{ + "user_id": user_id, + "$or": []bson.M{ + {"title": bson.M{"$regex": primitive.Regex{Pattern: searchString, Options: "i"}}}, + {"description": bson.M{"$regex": primitive.Regex{Pattern: searchString, Options: "i"}}}, + // bson.M{"title": bson.M{"$regex": primitive.Regex{Pattern: searchString, Options: "i"}}}, + // bson.M{"description": bson.M{"$regex": primitive.Regex{Pattern: searchString, Options: "i"}}}, + }, + } + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Second) + var tasks []models.Task + + cursor, err := taskCollection.Find(ctx, query) + defer cancel() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + for cursor.Next(ctx) { + var task models.Task + if err := cursor.Decode(&task); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"success": false, "error": err.Error()}) + return + } + tasks = append(tasks, task) + } + if err := cursor.Err(); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"success": false, "error": err.Error()}) + return + } + response := gin.H{ + "success": true, + "data": tasks, + } + + c.JSON(http.StatusOK, response) + } else { + c.JSON(http.StatusUnauthorized, gin.H{"sucess": false, "error": "Invalid token"}) + } + } +} diff --git a/Backend/main.go b/Backend/main.go index e837d0b..06d12b7 100644 --- a/Backend/main.go +++ b/Backend/main.go @@ -20,6 +20,8 @@ func main() { log.Fatal(router.Run(":" + port)) } +//to create a docker file/container +//docker build -t //to run the docker file use the following line of code // docker run -p 8000:8000 -it plannerly-backend // map the 8080 port of the docker file to 8081 in local (since it was not free) and then run "-it dockerFileName" diff --git a/Backend/routes/tasks_routes.go b/Backend/routes/tasks_routes.go index ae9b8fb..23cd457 100644 --- a/Backend/routes/tasks_routes.go +++ b/Backend/routes/tasks_routes.go @@ -15,4 +15,5 @@ func TaskRoutes(incomingRoutes *gin.Engine) { incomingRoutes.GET("/tasks/urgent", controllers.GetUrgentTasks()) incomingRoutes.GET("/tasks/regular", controllers.GetRegularTasks()) incomingRoutes.DELETE("/delete/:id", controllers.DeleteTask()) + incomingRoutes.GET("/search", controllers.SearchTask()) }