Skip to content

Instantly share code, notes, and snippets.

@austindoeswork
Created February 18, 2019 23:49
Show Gist options
  • Save austindoeswork/4ec8d6faaecc575e7d56339f16d76ba8 to your computer and use it in GitHub Desktop.
Save austindoeswork/4ec8d6faaecc575e7d56339f16d76ba8 to your computer and use it in GitHub Desktop.
company_map = Hash.new{|h,k| h[k] = {
count: 0,
viewed: 0,
replied: 0,
}}
comments = Comment
.joins("inner join users u on u.id = comments.user_id")
.joins("inner join mentions m on m.comment_id = comments.id")
.joins("inner join users mu on mu.id = m.user_id")
.where("u.role @> ARRAY[200] and u.admin = false")
.where("mu.role @> ARRAY[100]")
.where(created_at: 2.month.ago..Time.now)
comments.each_with_progress do |c|
viewed = false
replied = false
company_id = c.user.company_id
mentions = Mention
.joins("inner join users mu on mu.id = mentions.user_id")
.where("mu.role @> ARRAY[100]")
.where(comment_id: c.id)
.pluck(:user_id)
replys = Comment
.where(user_id: mentions, comment_thread_id: c.comment_thread_id)
.where("created_at > '#{c.created_at}'")
replied = replys.count > 0
views = UserCallView
.where(user_id: mentions)
.where(call_id: c.comment_thread.call_id)
viewed = views.count > 0
company_map[company_id][:count] += 1
company_map[company_id][:viewed] += 1 if viewed
company_map[company_id][:replied] += 1 if replied
end
puts company_map
# data = {55=>{:count=>1936, :viewed=>1450, :replied=>308}, 57=>{:count=>349, :viewed=>232, :replied=>58}, 62=>{:count=>876, :viewed=>668, :replied=>429}, 61=>{:count=>382, :viewed=>238, :replied=>47}, 37=>{:count=>21, :viewed=>21, :replied=>0}, 58=>{:count=>60, :viewed=>43, :replied=>25}, 59=>{:count=>43, :viewed=>40, :replied=>11}, 47=>{:count=>3, :viewed=>2, :replied=>1}, 49=>{:count=>30, :viewed=>11, :replied=>3}, 51=>{:count=>2, :viewed=>2, :replied=>0}, 63=>{:count=>9, :viewed=>6, :replied=>0}, 42=>{:count=>1, :viewed=>0, :replied=>0}, 64=>{:count=>1, :viewed=>0, :replied=>0}}
# puts "company id, company name, count, % viewed, % replied"
# data.each do |co_id, val|
# puts "#{co_id}, #{Company.find(co_id).name}, #{val[:count]}, #{val[:viewed].to_f / val[:count].to_f}, #{val[:replied].to_f / val[:count].to_f}"
# end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment