discourse/app/serializers/topic_list_item_serializer.rb

54 lines
1.4 KiB
Ruby
Raw Normal View History

class TopicListItemSerializer < ListableTopicSerializer
2013-02-05 14:16:51 -05:00
2013-02-25 11:42:20 -05:00
attributes :views,
:like_count,
2013-11-18 12:48:26 -05:00
:has_summary,
2013-04-02 16:52:51 -04:00
:archetype,
2013-10-23 14:40:39 -04:00
:last_poster_username,
:category_id,
:op_like_count,
:pinned_globally,
:bookmarked_post_numbers
2013-02-05 14:16:51 -05:00
has_many :posters, serializer: TopicPosterSerializer, embed: :objects
has_many :participants, serializer: TopicPosterSerializer, embed: :objects
2013-02-05 14:16:51 -05:00
def posters
object.posters || []
end
def op_like_count
object.first_post && object.first_post.like_count
end
def last_poster_username
posters.find { |poster| poster.user.id == object.last_post_user_id }.try(:user).try(:username)
end
def participants
object.participants_summary || []
end
def include_bookmarked_post_numbers?
object.user_data &&
object.user_data.post_action_data &&
object.user_data.post_action_data.key?(PostActionType.types[:bookmark])
end
def bookmarked_post_numbers
object.user_data.post_action_data[PostActionType.types[:bookmark]]
end
def include_participants?
object.private_message?
end
def include_op_like_count?
2015-01-05 01:54:38 -05:00
# PERF: long term we probably want a cheaper way of looking stuff up
# this is rather odd code, but we need to have op_likes loaded somehow
# simplest optimisation is adding a cache column on topic.
object.association(:first_post).loaded?
end
2013-02-05 14:16:51 -05:00
end