diff --git a/Backend/controllers/tasks_controller.go b/Backend/controllers/tasks_controller.go index afa0f9c..bf0121b 100644 --- a/Backend/controllers/tasks_controller.go +++ b/Backend/controllers/tasks_controller.go @@ -4,16 +4,20 @@ import ( "context" "log" "net/http" + "os" "time" "github.com/Uttkarsh-raj/To_Do_App/database" "github.com/Uttkarsh-raj/To_Do_App/models" + "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" + "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" ) var taskCollection *mongo.Collection = database.OpenCollection(database.Client, "tasks") +var SECRET_KEY = os.Getenv("SECRET_KEY") func AddNewTask() gin.HandlerFunc { return func(c *gin.Context) { @@ -46,3 +50,93 @@ func AddNewTask() gin.HandlerFunc { c.JSON(http.StatusOK, response) } } + +func UpdateTask() gin.HandlerFunc { + return func(c *gin.Context) { + // ctx,cancel:=context.WithTimeout(context.Background(),100*time.Second) + + } +} + +func GetTaskById() gin.HandlerFunc { + return func(c *gin.Context) { + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Second) + var task models.Task + + idParam := c.Param("id") + objID, err := primitive.ObjectIDFromHex(idParam) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"success": false, "error": "Invalid ID format"}) + return + } + err = taskCollection.FindOne(ctx, bson.M{"_id": objID}).Decode(&task) + defer cancel() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"success": false, "error": err.Error()}) + return + } + response := gin.H{ + "success": true, + "data": task, + } + c.JSON(http.StatusOK, response) + } +} + +func GetAllTask() 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 + } + log.Print(tokenString) + 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 + } + log.Print(token) + if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { + log.Print("claims\n") + log.Print(claims) + user_id := claims["Uid"].(string) + // Now you have the user_id from the token + log.Print(user_id) + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Second) + var tasks []models.Task + + cursor, err := taskCollection.Find(ctx, bson.M{"user_id": user_id}) + defer cancel() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"success": false, "error": err.Error()}) + return + } + defer cursor.Close(ctx) + + 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{"error": "Invalid token"}) + } + + } +} diff --git a/Backend/models/task_model.go b/Backend/models/task_model.go index 406eb3c..7db76f7 100644 --- a/Backend/models/task_model.go +++ b/Backend/models/task_model.go @@ -11,5 +11,5 @@ type Task struct { Description *string `json:"desc"` Time *string `json:"time"` Date *string `json:"date"` - Status *string `json:"status"` + Completed bool `json:"completed"` } diff --git a/Backend/routes/tasks_routes.go b/Backend/routes/tasks_routes.go index ce40a0a..57a6a25 100644 --- a/Backend/routes/tasks_routes.go +++ b/Backend/routes/tasks_routes.go @@ -9,4 +9,7 @@ import ( func TaskRoutes(incomingRoutes *gin.Engine) { incomingRoutes.Use(middleware.Authentication()) incomingRoutes.POST("/addTask", controllers.AddNewTask()) + incomingRoutes.PATCH("/update", controllers.UpdateTask()) + incomingRoutes.GET("/getTasks", controllers.GetAllTask()) + incomingRoutes.GET("/getTask/:id", controllers.GetTaskById()) }