From aa570475d64076bbf6de657b396515aafebff839 Mon Sep 17 00:00:00 2001 From: Osamu Takiya Date: Sun, 20 Jun 2021 17:23:31 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E6=8A=95=E7=A5=A8?= =?UTF-8?q?=E7=B5=90=E6=9E=9C=E7=A2=BA=E8=AA=8D=E7=94=A8=E3=81=AE=E5=90=84?= =?UTF-8?q?=E7=A8=AE=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=84=E3=83=A1=E3=82=BD?= =?UTF-8?q?=E3=83=83=E3=83=89=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../write_to_response_api_sheet_by_hashtag.rb | 2 +- app/lib/suikoden_database/check_all_votes.rb | 38 ++++++++++++++ .../suikoden_database/check_bonus_votes.rb | 51 +++++++++++++++++++ app/lib/suikoden_database/check_votes.rb | 35 +++++++++++++ app/models/tweet.rb | 30 ++++++++++- app/models/user.rb | 8 +++ 6 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 app/lib/suikoden_database/check_all_votes.rb create mode 100644 app/lib/suikoden_database/check_bonus_votes.rb create mode 100644 app/lib/suikoden_database/check_votes.rb diff --git a/app/lib/google_sheet_api/write_to_response_api_sheet_by_hashtag.rb b/app/lib/google_sheet_api/write_to_response_api_sheet_by_hashtag.rb index ae3720d..e89c790 100644 --- a/app/lib/google_sheet_api/write_to_response_api_sheet_by_hashtag.rb +++ b/app/lib/google_sheet_api/write_to_response_api_sheet_by_hashtag.rb @@ -87,7 +87,7 @@ def target_tweets(hashtag, options={}) tweeted_at: beginning_at..end_at ) active_record_relation = active_record_relation.not_retweet if options[:remove_rt] == true - active_record_relation = active_record_relation.not_by_gensosenkyo_families if options[:not_by_gensosenkyo_families] == true + active_record_relation = active_record_relation.not_by_gensosenkyo_family if options[:not_by_gensosenkyo_family] == true active_record_relation = active_record_relation.not_by_gensosenkyo_main if options[:not_by_gensosenkyo_main] == true active_record_relation = active_record_relation.not_by_gensosenkyo_sub if options[:not_by_gensosenkyo_sub] == true diff --git a/app/lib/suikoden_database/check_all_votes.rb b/app/lib/suikoden_database/check_all_votes.rb new file mode 100644 index 0000000..c73095e --- /dev/null +++ b/app/lib/suikoden_database/check_all_votes.rb @@ -0,0 +1,38 @@ +# rubocop:disable Rails/Output +module SuikodenDatabase + class CheckAllVotes + class << self + def user_list_who_has_two_or_more_tweets + users = users_has_two_or_more_tweets + + users.each do |user| + puts "#{user.name} (@#{user.screen_name} / #{user.id_number})" + end + end + + def tweets_by_user_who_has_two_or_more_tweets(user) + user.tweets + .valid_term_votes + .not_retweet + .contains_hashtag('幻水総選挙2021') + .not_by_gensosenkyo_main + .order(tweeted_at: :asc) + .order(id_number: :asc) + end + + def users_has_two_or_more_tweets + User.all.select do |user| + user.tweets + .valid_term_votes + .not_retweet + .contains_hashtag('幻水総選挙2021') + .not_by_gensosenkyo_main + .order(tweeted_at: :asc) + .order(id_number: :asc) + .count > 1 + end + end + end + end +end +# rubocop:enable Rails/Output diff --git a/app/lib/suikoden_database/check_bonus_votes.rb b/app/lib/suikoden_database/check_bonus_votes.rb new file mode 100644 index 0000000..8463252 --- /dev/null +++ b/app/lib/suikoden_database/check_bonus_votes.rb @@ -0,0 +1,51 @@ +module SuikodenDatabase + class CheckBonusVotes + class << self + def odai_shosetsu_user_vs_number_of_posts_sorted_by_number_of_posts + Hash[odai_shosetsu_user_vs_number_of_posts.sort_by { |_, v| -v }] + end + + # odai_shosetsu_user_vs_number_of_posts.keys.count: 総投稿人数 + # odai_shosetsu_user_vs_number_of_posts.values.sum: 総投稿数 + def odai_shosetsu_user_vs_number_of_posts + odai_shosetsu_user_vs_number_of_posts = {} + user_ids = users_who_posted_odai_shosetsu.pluck(:id_number).uniq + + user_ids.each do |user_id| + user = User.find_by(id_number: user_id) + + odai_shosetsu_user_vs_number_of_posts[user.id_number.to_s] = user.tweets.odai_shosetsu.is_public.count + end + + odai_shosetsu_user_vs_number_of_posts + end + + def users_who_posted_odai_shosetsu + User.all.select { |user| user.tweets.odai_shosetsu.is_public.count > 0 } + end + + def oshi_serifu_user_vs_number_of_posts_sorted_by_number_of_posts + Hash[oshi_serifu_user_vs_number_of_posts.sort_by { |_, v| -v }] + end + + # oshi_serifu_user_vs_number_of_posts.keys.count: 総投稿人数 + # oshi_serifu_user_vs_number_of_posts.values.sum: 総投稿数 + def oshi_serifu_user_vs_number_of_posts + oshi_serifu_user_vs_number_of_posts = {} + user_ids = users_who_posted_oshi_serifu.pluck(:id_number).uniq + + user_ids.each do |user_id| + user = User.find_by(id_number: user_id) + + oshi_serifu_user_vs_number_of_posts[user.id_number.to_s] = user.tweets.oshi_serifu.is_public.count + end + + oshi_serifu_user_vs_number_of_posts + end + + def users_who_posted_oshi_serifu + User.all.select { |user| user.tweets.oshi_serifu.is_public.count > 0 } + end + end + end +end diff --git a/app/lib/suikoden_database/check_votes.rb b/app/lib/suikoden_database/check_votes.rb new file mode 100644 index 0000000..4dc5586 --- /dev/null +++ b/app/lib/suikoden_database/check_votes.rb @@ -0,0 +1,35 @@ +module SuikodenDatabase + class CheckVotes + class << self + def user_vs_number_of_votes_sorted_by_number_of_votes + Hash[vote_two_or_more_user_vs_number_of_votes.sort_by { |_, v| -v }] + end + + def vote_two_or_more_user_vs_number_of_votes + vote_two_or_more_user_vs_number_of_votes = {} + user_ids = User.who_vote_two_or_more_without_not_public.pluck(:id_number).uniq + + user_ids.each do |user_id| + user = User.find_by(id_number: user_id) + + vote_two_or_more_user_vs_number_of_votes[user.id_number.to_s] = user.tweets.gensosenkyo_2021_votes.is_public.count + end + + vote_two_or_more_user_vs_number_of_votes + end + + def vote_user_vs_number_of_votes + vote_user_vs_number_of_votes = {} + user_ids = User.did_vote_without_not_public.pluck(:id_number).uniq + + user_ids.each do |user_id| + user = User.find_by(id_number: user_id) + + vote_user_vs_number_of_votes[user.id_number.to_s] = user.tweets.gensosenkyo_2021_votes.is_public.count + end + + vote_user_vs_number_of_votes + end + end + end +end diff --git a/app/models/tweet.rb b/app/models/tweet.rb index 4067ea9..92f7f7c 100644 --- a/app/models/tweet.rb +++ b/app/models/tweet.rb @@ -14,13 +14,23 @@ class Tweet < ApplicationRecord scope :be_retweet, -> { where(is_retweet: true) } scope :contains_hashtag, ->(hashtag) { joins(:hashtags).where(hashtags: { text: hashtag }) } scope :mentioned_user, ->(user) { joins(:mentions).where(mentions: { user_id_number: user.id_number }) } + scope :is_public, -> { where(is_public: true) } # TODO: TweetStorage の方にも書く def self.filter_by_tweeted_at(from, to) where(tweeted_at: from..to) end - def self.not_by_gensosenkyo_families + def self.gensosenkyo_2021_votes + valid_term_votes + .not_retweet + .contains_hashtag('幻水総選挙2021') + .not_by_gensosenkyo_main + .order(tweeted_at: :asc) + .order(id_number: :asc) + end + + def self.not_by_gensosenkyo_family # gensosenkyo: 1471724029, # sub_gensosenkyo: 1388758231825018881 @@ -55,6 +65,24 @@ def self.valid_term_votes where(tweeted_at: begin_datetime..end_datetime) end + def self.odai_shosetsu + not_retweet + .not_by_gensosenkyo_main + .contains_hashtag('幻水総選挙お題小説') + .where(tweeted_at: ..Time.zone.parse('2021-06-07 02:20:00')) + .order(tweeted_at: :asc) + .order(id_number: :asc) + end + + def self.oshi_serifu + not_retweet + .not_by_gensosenkyo_main + .contains_hashtag('幻水総選挙推し台詞') + .where(tweeted_at: ..Time.zone.parse('2021-06-10 23:59:59')) + .order(tweeted_at: :asc) + .order(id_number: :asc) + end + def valid_term_vote? begin_datetime = Time.zone.parse('2021-06-11 21:00:00') end_datetime = Time.zone.parse('2021-06-13 11:59:59') diff --git a/app/models/user.rb b/app/models/user.rb index b4c6cfc..9935ccf 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -30,4 +30,12 @@ def gensosenkyo_admin? id_number.in?(gensosenkyo_admin_user_id_numbers.values) end + + def self.who_vote_two_or_more_without_not_public + self.select { |user| user.tweets.gensosenkyo_2021_votes.is_public.count > 1 } + end + + def self.did_vote_without_not_public + self.select { |user| user.tweets.gensosenkyo_2021_votes.is_public.count > 0 } + end end