57 lines
1.1 KiB
Ruby
57 lines
1.1 KiB
Ruby
# ViewModel used on Summary tab on User page
|
|
|
|
class UserSummary
|
|
|
|
MAX_BADGES = 6
|
|
MAX_TOPICS = 6
|
|
|
|
alias :read_attribute_for_serialization :send
|
|
|
|
def initialize(user, guardian)
|
|
@user = user
|
|
@guardian = guardian
|
|
end
|
|
|
|
def topics
|
|
Topic
|
|
.secured(@guardian)
|
|
.listable_topics
|
|
.visible
|
|
.where(user: @user)
|
|
.order('like_count DESC, created_at ASC')
|
|
.includes(:user, :category)
|
|
.limit(MAX_TOPICS)
|
|
end
|
|
|
|
def replies
|
|
Post
|
|
.secured(@guardian)
|
|
.includes(:user, topic: :category)
|
|
.references(:topic)
|
|
.merge(Topic.listable_topics.visible.secured(@guardian))
|
|
.where(user: @user)
|
|
.where('post_number > 1')
|
|
.where('topics.archetype <> ?', Archetype.private_message)
|
|
.order('posts.like_count DESC, posts.created_at ASC')
|
|
.limit(MAX_TOPICS)
|
|
end
|
|
|
|
def badges
|
|
@user.featured_user_badges(MAX_BADGES)
|
|
end
|
|
|
|
def user_stat
|
|
@user.user_stat
|
|
end
|
|
|
|
delegate :likes_given,
|
|
:likes_received,
|
|
:days_visited,
|
|
:posts_read_count,
|
|
:topic_count,
|
|
:post_count,
|
|
:time_read,
|
|
to: :user_stat
|
|
|
|
end
|