app/models/community.rb
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