From 80910e10bd4d93d496be664d3f9dee0d13065a4b Mon Sep 17 00:00:00 2001 From: Keegan George Date: Wed, 26 Mar 2025 12:27:30 -0700 Subject: [PATCH] FIX: Ensure category badging present in sentiment reports --- .../discourse_ai/sentiment/sentiment_controller.rb | 4 ---- app/serializers/ai_sentiment_post_serializer.rb | 12 +----------- .../components/admin-report-sentiment-analysis.gjs | 12 +++++++++++- lib/sentiment/sentiment_analysis_report.rb | 13 ++++++++++++- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/app/controllers/discourse_ai/sentiment/sentiment_controller.rb b/app/controllers/discourse_ai/sentiment/sentiment_controller.rb index 220488ec3..5dd289932 100644 --- a/app/controllers/discourse_ai/sentiment/sentiment_controller.rb +++ b/app/controllers/discourse_ai/sentiment/sentiment_controller.rb @@ -46,10 +46,6 @@ def posts u.name, u.uploaded_avatar_id, c.id AS category_id, - c.name AS category_name, - c.color AS category_color, - c.slug AS category_slug, - c.description AS category_description, (CASE WHEN (cr.classification::jsonb->'positive')::float > :threshold THEN 'positive' WHEN (cr.classification::jsonb->'negative')::float > :threshold THEN 'negative' diff --git a/app/serializers/ai_sentiment_post_serializer.rb b/app/serializers/ai_sentiment_post_serializer.rb index faefcba7f..53668db61 100644 --- a/app/serializers/ai_sentiment_post_serializer.rb +++ b/app/serializers/ai_sentiment_post_serializer.rb @@ -11,7 +11,7 @@ class AiSentimentPostSerializer < ApplicationSerializer :excerpt, :sentiment, :truncated, - :category, + :category_id, :created_at def avatar_template @@ -25,14 +25,4 @@ def excerpt def truncated object.post_cooked.length > SiteSetting.post_excerpt_maxlength end - - def category - { - id: object.category_id, - name: object.category_name, - color: object.category_color, - slug: object.category_slug, - description: object.category_description, - } - end end diff --git a/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs b/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs index 154d07305..ec1b993af 100644 --- a/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs +++ b/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs @@ -11,6 +11,7 @@ import DButton from "discourse/components/d-button"; import HorizontalOverflowNav from "discourse/components/horizontal-overflow-nav"; import PostList from "discourse/components/post-list"; import bodyClass from "discourse/helpers/body-class"; +import categoryBadge from "discourse/helpers/category-badge"; import dIcon from "discourse/helpers/d-icon"; import replaceEmoji from "discourse/helpers/replace-emoji"; import { ajax } from "discourse/lib/ajax"; @@ -18,6 +19,7 @@ import { popupAjaxError } from "discourse/lib/ajax-error"; import { getAbsoluteURL } from "discourse/lib/get-url"; import discourseLater from "discourse/lib/later"; import { clipboardCopy } from "discourse/lib/utilities"; +import Category from "discourse/models/category"; import Post from "discourse/models/post"; import closeOnClickOutside from "discourse/modifiers/close-on-click-outside"; import { i18n } from "discourse-i18n"; @@ -111,6 +113,7 @@ export default class AdminReportSentimentAnalysis extends Component { get transformedData() { return this.args.model.data.map((data) => { return { + category: Category.findById(data.category_id), title: data.category_name || data.tag_name, scores: [ data.positive_count, @@ -139,6 +142,7 @@ export default class AdminReportSentimentAnalysis extends Component { return this.posts.filter((post) => { post.topic_title = replaceEmoji(post.topic_title); + post.category = Category.findById(post.category_id); if (this.activeFilter === "all") { return true; @@ -347,7 +351,13 @@ export default class AdminReportSentimentAnalysis extends Component { ) }} > - {{data.title}} + + {{#if data.category}} + {{categoryBadge data.category}} + {{else}} + {{data.title}} + {{/if}} + {{data.total_score}} diff --git a/lib/sentiment/sentiment_analysis_report.rb b/lib/sentiment/sentiment_analysis_report.rb index 5584582ea..b820cc287 100644 --- a/lib/sentiment/sentiment_analysis_report.rb +++ b/lib/sentiment/sentiment_analysis_report.rb @@ -80,6 +80,7 @@ def self.fetch_data(report, opts) case grouping when :category <<~SQL + c.id AS category_id, c.name AS category_name, SQL when :tag @@ -90,6 +91,16 @@ def self.fetch_data(report, opts) raise Discourse::InvalidParameters end + group_by_clause = + case grouping + when :category + "GROUP BY c.id, c.name" + when :tag + "GROUP BY tags.name" + else + raise Discourse::InvalidParameters + end + grouping_join = case grouping when :category @@ -154,7 +165,7 @@ def self.fetch_data(report, opts) cr.model_used = 'cardiffnlp/twitter-roberta-base-sentiment-latest' AND (p.created_at > :report_start AND p.created_at < :report_end) #{where_clause} - GROUP BY 1 + #{group_by_clause} #{order_by_clause} SQL report_start: report.start_date,