diff --git a/analyticsApi/main.go b/analyticsApi/main.go index 048c4f8..e45ba03 100644 --- a/analyticsApi/main.go +++ b/analyticsApi/main.go @@ -1,6 +1,7 @@ package analyticsApi import ( + "encoding/json" "git.stuve.uni-ulm.de/stuve-it/stuve-it-backend/ldapApi" "git.stuve.uni-ulm.de/stuve-it/stuve-it-backend/logger" "github.com/labstack/echo/v5" @@ -124,7 +125,13 @@ func initPageViewCount(app *pocketbase.PocketBase, e *core.ServeEvent) { } // Query paginated items, sorted by count - var items []Item + var rawItems []struct { + ID int `json:"id"` + Path string `json:"path"` + Count int `json:"count"` + Last30DaysData string `json:"last_30_days_data"` // JSON string to parse + } + err = app.Dao().DB(). NewQuery(` SELECT @@ -138,20 +145,15 @@ func initPageViewCount(app *pocketbase.PocketBase, e *core.ServeEvent) { ( SELECT json_group_array( json_object( - 'date', date, - 'count', daily_count + 'date', strftime('%Y-%m-%d', created), + 'count', COUNT(id) ) ) - FROM ( - SELECT - strftime('%Y-%m-%d', created) AS date, - COUNT(id) AS daily_count - FROM analyticsPageViews - WHERE - path = view.path AND - created >= datetime('now', '-30 days') - GROUP BY date - ) AS daily_data + FROM analyticsPageViews + WHERE + path = view.path AND + created >= datetime('now', '-30 days') + GROUP BY strftime('%Y-%m-%d', created) ) AS last_30_days_data FROM analyticsPageViews view @@ -166,23 +168,38 @@ func initPageViewCount(app *pocketbase.PocketBase, e *core.ServeEvent) { "perPage": perPage, "offset": offset, }). - All(&items) + All(&rawItems) if err != nil { return apis.NewApiError(500, "Failed to query page view data", err) } - // Final response structure - response := map[string]interface{}{ + // Parse last_30_days_data JSON string into structured data + var items []Item + for _, rawItem := range rawItems { + var last30DaysData []Last30DaysData + if rawItem.Last30DaysData != "" { + if err := json.Unmarshal([]byte(rawItem.Last30DaysData), &last30DaysData); err != nil { + return apis.NewApiError(500, "Failed to parse last_30_days_data", err) + } + } + + items = append(items, Item{ + ID: rawItem.ID, + Path: rawItem.Path, + Count: rawItem.Count, + Last30DaysData: last30DaysData, + }) + } + + // Return the final JSON response + return c.JSON(200, map[string]interface{}{ "page": page, "perPage": perPage, "totalItems": totalItems, "totalPages": totalPages, "items": items, - } - - // Return the final JSON response - return c.JSON(200, response) + }) }, apis.ActivityLogger(app)) }