mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 12:23:46 +08:00
66 lines
1.5 KiB
Ruby
66 lines
1.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class UserNotificationTotalSerializer < ApplicationSerializer
|
||
|
attributes :username,
|
||
|
:unread_notifications,
|
||
|
:unread_personal_messages,
|
||
|
:unseen_reviewables,
|
||
|
:topic_tracking,
|
||
|
:group_inboxes
|
||
|
|
||
|
def unread_notifications
|
||
|
object.all_unread_notifications_count - new_personal_messages_notifications_count
|
||
|
end
|
||
|
|
||
|
def include_unread_personal_messages?
|
||
|
object.in_any_groups?(SiteSetting.personal_message_enabled_groups_map)
|
||
|
end
|
||
|
|
||
|
def unread_personal_messages
|
||
|
new_personal_messages_notifications_count
|
||
|
end
|
||
|
|
||
|
def include_unseen_reviewables?
|
||
|
scope.user.staff?
|
||
|
end
|
||
|
|
||
|
def unseen_reviewables
|
||
|
Reviewable.unseen_reviewable_count(object)
|
||
|
end
|
||
|
|
||
|
def topic_tracking
|
||
|
TopicTrackingState.report_totals(object)
|
||
|
end
|
||
|
|
||
|
def group_inboxes
|
||
|
group_inbox_data =
|
||
|
Notification
|
||
|
.unread
|
||
|
.where(
|
||
|
user_id: scope.user.id,
|
||
|
notification_type: Notification.types[:group_message_summary],
|
||
|
)
|
||
|
.pluck(:data)
|
||
|
|
||
|
results = []
|
||
|
|
||
|
return results if group_inbox_data.blank?
|
||
|
|
||
|
group_inbox_data.map do |json|
|
||
|
data = JSON.parse(json, symbolize_names: true)
|
||
|
|
||
|
results << {
|
||
|
group_id: data[:group_id],
|
||
|
group_name: data[:group_name],
|
||
|
count: data[:inbox_count],
|
||
|
}
|
||
|
end
|
||
|
|
||
|
results
|
||
|
end
|
||
|
|
||
|
def new_personal_messages_notifications_count
|
||
|
@new_personal_messages_notifications_count ||= object.new_personal_messages_notifications_count
|
||
|
end
|
||
|
end
|