From 0781524644d529798c7fbd17ce031f38b8d3b882 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Fri, 7 Mar 2025 11:40:39 +0530 Subject: [PATCH] GWM : notification api --- main.go | 56 ++++++++++++++++++++++++++++++++++++------------ pb_data/logs.db | Bin 32026624 -> 32026624 bytes 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/main.go b/main.go index 5ae519a..d02ea06 100644 --- a/main.go +++ b/main.go @@ -568,29 +568,57 @@ func main() { return c.JSON(http.StatusBadRequest, map[string]string{"error": "language is required"}) } - notification := []struct { - Id string `db:"category" json:"id"` - Category string `db:"category" json:"category"` - Title string `db:"title" json:"title"` - Message string `db:"message" json:"message"` - }{} - categoryColumn := "category_" + language titleColumn := "title_" + language messageColumn := "message_" + language - query := ` SELECT id` + categoryColumn + ` AS category,` + titleColumn + ` AS title,` + messageColumn + ` AS message FROM notification ` - err := app.DB().NewQuery(query).All(¬ification) + + id := c.QueryParam("id") + + if id != "" { + // Define a single notification struct, not a slice + var notification struct { + Id string `db:"id" json:"id"` + Category string `db:"category" json:"category"` + Title string `db:"title" json:"title"` + Message string `db:"message" json:"message"` + Created string `db:"created" json:"created"` + } + + query := `SELECT id, created, ` + categoryColumn + ` AS category, ` + titleColumn + ` AS title, ` + messageColumn + ` AS message FROM notification WHERE id = {:id}` + err := app.DB().NewQuery(query).Bind(dbx.Params{"id": id}).One(¬ification) + + if err != nil { + log.Printf("notification not found: %v", err) + return c.JSON(http.StatusNotFound, map[string]string{"error": "notification not found"}) + } + + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "Success", + "data": notification, + }) + } + + // Fetch all notifications if no ID is provided + var notifications []struct { + Id string `db:"id" json:"id"` + Category string `db:"category" json:"category"` + Title string `db:"title" json:"title"` + Message string `db:"message" json:"message"` + Created string `db:"created" json:"created"` + } + + query := `SELECT id, created, ` + categoryColumn + ` AS category, ` + titleColumn + ` AS title, ` + messageColumn + ` AS message FROM notification` + err := app.DB().NewQuery(query).All(¬ifications) if err != nil { - log.Printf("notification not found: %v", err) - return c.JSON(http.StatusNotFound, map[string]string{"error": "notification not found"}) + log.Printf("notifications not found: %v", err) + return c.JSON(http.StatusNotFound, map[string]string{"error": "notifications not found"}) } return c.JSON(http.StatusOK, map[string]interface{}{ "message": "Success", - "data": notification, + "data": notifications, }) - }) e.Router.GET("/api/pushNotification", func(c echo.Context) error { @@ -812,7 +840,7 @@ func main() { } var cardResults []map[string]string - if record.GetString("is_chart") == "false" { // card data calculation + if record.GetString("is_chart") == "false" { // card data calculations // Extract `card_type` JSON from `record.Get("card_type")` requestData := record.Get("card_type_json") diff --git a/pb_data/logs.db b/pb_data/logs.db index 6afffdcf5aae1e68dfaed2d4ee9dfb31cf11bebb..4da74c9f4ca2556a3f557b165874525a8b00193c 100644 GIT binary patch delta 9960 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 aHPJPqZ-}lFeM@wM=q7UCY3W2N`hNh4&@OfW