mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-06-30 03:22:17 +00:00
# Preview https://github.com/user-attachments/assets/3fe3ac8f-c938-4df4-9afe-11980046944d # Details - Group pms by `last_posted_at`. In this first iteration we are group by `7 days`, `30 days`, then by month beyond that. - I inject a sidebar section link with the relative (last_posted_at) date and then update a tracked value to ensure we don't do it again. Then for each month beyond the first 30days, I add a value to the `loadedMonthLabels` set and we reference that (plus the year) to see if we need to load a new month label. - I took the creative liberty to remove the `Conversations` section label - this had no purpose - I hid the _collapse all sidebar sections_ carrot. This had no purpose. - Swap `BasicTopicSerializer` to `ListableTopicSerializer` to get access to `last_posted_at`
40 lines
1.2 KiB
Ruby
40 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module AiBot
|
|
class ConversationsController < ::ApplicationController
|
|
requires_plugin ::DiscourseAi::PLUGIN_NAME
|
|
requires_login
|
|
|
|
def index
|
|
page = params[:page].to_i
|
|
per_page = params[:per_page]&.to_i || 40
|
|
|
|
base_query =
|
|
Topic
|
|
.private_messages_for_user(current_user)
|
|
.where(user: current_user) # Only show PMs where the current user is the author
|
|
.joins(
|
|
"INNER JOIN topic_custom_fields tcf ON tcf.topic_id = topics.id
|
|
AND tcf.name = '#{DiscourseAi::AiBot::TOPIC_AI_BOT_PM_FIELD}'
|
|
AND tcf.value = 't'",
|
|
)
|
|
.distinct
|
|
|
|
total = base_query.count
|
|
pms = base_query.order(last_posted_at: :desc).offset(page * per_page).limit(per_page)
|
|
|
|
render json: {
|
|
conversations: serialize_data(pms, ListableTopicSerializer),
|
|
meta: {
|
|
total: total,
|
|
page: page,
|
|
per_page: per_page,
|
|
has_more: total > (page + 1) * per_page,
|
|
},
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|