FEATURE: first pass at user summary page
This commit is contained in:
parent
9ad226aaa8
commit
7303f8f309
16 changed files with 292 additions and 7 deletions
app/models
56
app/models/user_summary.rb
Normal file
56
app/models/user_summary.rb
Normal file
|
@ -0,0 +1,56 @@
|
|||
# ViewModel used on Summary tab on User page
|
||||
|
||||
class UserSummary
|
||||
|
||||
MAX_FEATURED_BADGES = 7
|
||||
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
|
||||
.where(user: @user)
|
||||
.order('like_count desc, created_at asc')
|
||||
.includes(:user, :category)
|
||||
.limit(MAX_TOPICS)
|
||||
end
|
||||
|
||||
def replies
|
||||
Post
|
||||
.secured(@guardian)
|
||||
.where(user: @user)
|
||||
.where('post_number > 1')
|
||||
.where('topics.archetype <> ?', Archetype.private_message)
|
||||
.order('posts.like_count desc, posts.created_at asc')
|
||||
.includes(:user, {topic: :category})
|
||||
.references(:topic)
|
||||
.limit(MAX_TOPICS)
|
||||
end
|
||||
|
||||
def badges
|
||||
user_badges = @user.user_badges
|
||||
user_badges = user_badges.group(:badge_id)
|
||||
.select(UserBadge.attribute_names.map {|x|
|
||||
"MAX(#{x}) as #{x}" }, 'COUNT(*) as count')
|
||||
.includes(badge: [:badge_grouping, :badge_type])
|
||||
.includes(post: :topic)
|
||||
.includes(:granted_by)
|
||||
.limit(MAX_FEATURED_BADGES)
|
||||
end
|
||||
|
||||
def user_stat
|
||||
@user.user_stat
|
||||
end
|
||||
|
||||
delegate :likes_given, :likes_received, :days_visited,
|
||||
:posts_read_count, :topic_count, :post_count,
|
||||
to: :user_stat
|
||||
|
||||
end
|
Reference in a new issue