60 lines
1.3 KiB
Ruby
60 lines
1.3 KiB
Ruby
class Community < ApplicationRecord
|
|
has_one :proposal
|
|
has_one :investment, class_name: "Budget::Investment"
|
|
has_many :topics
|
|
|
|
def participants
|
|
users_participants = users_who_commented +
|
|
users_who_topics_author +
|
|
author_from_community
|
|
users_participants.uniq
|
|
end
|
|
|
|
def from_proposal?
|
|
proposal.present?
|
|
end
|
|
|
|
def latest_activity
|
|
activity = []
|
|
|
|
most_recent_comment = Comment.where(commentable: topics).order(updated_at: :desc).take(1).first
|
|
activity << most_recent_comment.updated_at unless most_recent_comment.nil?
|
|
|
|
most_recent_topic = topics.order(updated_at: :desc).take(1).first
|
|
activity << most_recent_topic.updated_at unless most_recent_topic.nil?
|
|
|
|
activity.max
|
|
end
|
|
|
|
def comments_count
|
|
comments.count
|
|
end
|
|
|
|
def comments
|
|
Comment.where(commentable: topics)
|
|
end
|
|
|
|
def debates_count
|
|
topics.count
|
|
end
|
|
|
|
def participants_count
|
|
participants.count
|
|
end
|
|
|
|
private
|
|
|
|
def users_who_commented
|
|
User.by_comments(topics)
|
|
end
|
|
|
|
def users_who_topics_author
|
|
author_ids = topics.pluck(:author_id)
|
|
User.by_authors(author_ids)
|
|
end
|
|
|
|
def author_from_community
|
|
from_proposal? ? User.where(id: proposal&.author_id) : User.where(id: investment&.author_id)
|
|
end
|
|
end
|