diff --git a/backend/internal/db/tags.go b/backend/internal/db/tags.go --- a/backend/internal/db/tags.go +++ b/backend/internal/db/tags.go @@ -1,14 +1,45 @@ package db -import "fmt" - type TrendingTag struct { Tag string `json:"tag"` Count int `json:"count"` } func (db *DB) GetTrendingTags(limit int) ([]TrendingTag, error) { - query := ` + var query string + if db.driver == "postgres" { + query = ` + SELECT + value as tag, + COUNT(*) as count + FROM annotations, json_array_elements_text(tags_json::json) as value + WHERE tags_json IS NOT NULL + AND tags_json != '' + AND tags_json != '[]' + AND created_at > NOW() - INTERVAL '7 days' + GROUP BY tag + HAVING count > 2 + ORDER BY count DESC + LIMIT ? + ` + rows, err := db.Query(db.Rebind(query), limit) + if err != nil { + return nil, err + } + defer rows.Close() + + var tags []TrendingTag + for rows.Next() { + var t TrendingTag + if err := rows.Scan(&t.Tag, &t.Count); err != nil { + return nil, err + } + tags = append(tags, t) + } + return tags, nil + } + + query = ` SELECT json_each.value as tag, COUNT(*) as count @@ -16,19 +47,13 @@ WHERE tags_json IS NOT NULL AND tags_json != '' AND tags_json != '[]' - AND created_at > %s + AND created_at > datetime('now', '-7 days') GROUP BY tag HAVING count > 2 ORDER BY count DESC LIMIT ? ` - - dateFilter := "datetime('now', '-7 days')" - if db.driver == "postgres" { - dateFilter = "NOW() - INTERVAL '7 days'" - } - - rows, err := db.Query(db.Rebind(fmt.Sprintf(query, dateFilter)), limit) + rows, err := db.Query(db.Rebind(query), limit) if err != nil { return nil, err } diff --git a/web/src/pages/Profile.jsx b/web/src/pages/Profile.jsx --- a/web/src/pages/Profile.jsx +++ b/web/src/pages/Profile.jsx @@ -81,33 +81,8 @@ const handle = routeHandle || user?.did || user?.handle; const isOwnProfile = user && (user.did === handle || user.handle === handle); - if (authLoading) { - return ( -