class V2::Reports::TeamSummaryBuilder < V2::Reports::BaseSummaryBuilder pattr_initialize [:account!, :params!] private attr_reader :conversations_count, :resolved_count, :avg_resolution_time, :avg_first_response_time, :avg_reply_time def fetch_conversations_count account.conversations.where(created_at: range).group(:team_id).count end def reporting_events @reporting_events ||= account.reporting_events.where(created_at: range).joins(:conversation) end def prepare_report account.teams.map do |team| build_team_stats(team) end end def build_team_stats(team) { id: team.id, conversations_count: conversations_count[team.id] || 0, resolved_conversations_count: resolved_count[team.id] || 0, avg_resolution_time: avg_resolution_time[team.id], avg_first_response_time: avg_first_response_time[team.id], avg_reply_time: avg_reply_time[team.id] } end def group_by_key 'conversations.team_id' end end