45 lines
1.2 KiB
Ruby
45 lines
1.2 KiB
Ruby
module Reports
|
|
class PostFlags
|
|
attr_reader :user_id, :date_range
|
|
|
|
def initialize(user_id:, date_range:)
|
|
@user_id = user_id
|
|
@date_range = date_range
|
|
end
|
|
|
|
def candidates
|
|
PostFlag.where("posts.uploader_id = ? and posts.created_at >= ? and post_flags.creator_id <> ?", user_id, date_range, User.system.id).joins(:post).pluck("post_flags.creator_id").uniq
|
|
end
|
|
|
|
def attackers
|
|
matches = []
|
|
|
|
build.each do |flagger, uploaders|
|
|
if uploaders[user_id].to_i > 50
|
|
matches << flagger
|
|
end
|
|
end
|
|
|
|
return matches
|
|
end
|
|
|
|
def build
|
|
flaggers = Hash.new {|h, k| h[k] = {}}
|
|
|
|
candidates.each do |candidate|
|
|
PostFlag.joins(:post).where("post_flags.creator_id = ? and posts.created_at >= ?", candidate, date_range).select("posts.uploader_id").group("posts.uploader_id").having("count(*) > 1").count.each do |uploader_id, count|
|
|
flaggers[candidate][uploader_id] = count
|
|
end
|
|
|
|
sum = flaggers[candidate].values.sum
|
|
|
|
flaggers[candidate].each_key do |user_id|
|
|
flaggers[candidate][user_id] = DanbooruMath.ci_lower_bound(flaggers[candidate][user_id], sum)
|
|
end
|
|
end
|
|
|
|
return flaggers
|
|
end
|
|
end
|
|
end
|