From e5672b4694fdf6ebfe87e2e538c7320fbcb6d65c Mon Sep 17 00:00:00 2001 From: Osamu Takiya Date: Thu, 14 Jul 2022 09:23:43 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E6=9C=80=E7=B5=82?= =?UTF-8?q?=E9=9B=86=E8=A8=88=E3=81=BE=E3=82=8F=E3=82=8A=E3=82=92=E3=83=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=81=97=E3=81=9F=20(v18)=20(#270)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 9 ++-- app/services/counting/checkers/bonus_votes.rb | 15 ++++-- .../result_illustration_applications.rb | 27 +++++++--- .../final_summary/fav_quotes.rb | 2 +- config/credentials.yml.enc | 2 +- ...w_sheet_result_illustration_totallings.yml | 3 ++ import_all_counting_data_to_local_db.sh | 1 + lib/tasks/checkers.rake | 53 +++++++++++++++++++ 8 files changed, 96 insertions(+), 16 deletions(-) create mode 100644 lib/tasks/checkers.rake diff --git a/app/models/user.rb b/app/models/user.rb index ff313199..732d9369 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -42,16 +42,15 @@ def self.did_vote_without_not_public self.select { |user| user.tweets.gensosenkyo_2021_votes.is_public.count > 0 } end - def all_counting_records - # TODO: 集計対象となっている全てのレコードを引っ張ってこられる - end - def on_all_character_division_all_character_names counting_all_characters.map(&:three_chara_names).flatten.compact_blank end def on_all_character_division_voting_over_three? - on_all_character_division_all_character_names.size > 3 + op_cl_illustrator_screen_names = Rails.application.credentials.op_cl_illustrator_screen_names + limit_number_of_votes = screen_name.in?(op_cl_illustrator_screen_names) ? 4 : 3 + + on_all_character_division_all_character_names.size > limit_number_of_votes end def on_all_character_division_voting_to_the_same_characters? diff --git a/app/services/counting/checkers/bonus_votes.rb b/app/services/counting/checkers/bonus_votes.rb index 4a290742..fbabb78b 100644 --- a/app/services/counting/checkers/bonus_votes.rb +++ b/app/services/counting/checkers/bonus_votes.rb @@ -1,9 +1,18 @@ module Counting module Checkers class BonusVotes - def self.vote_to_the_same_characters_users - # TODO: 書く - # 票数に影響はない + def initialize + @excluded_character_names = Rails.application.credentials.excluded_not_in_db_character_names + end + + def character_names_who_not_exist_in_chara_db + in_local_db_character_names = CountingBonusVote.all.pluck(:character_name).compact_blank.uniq + + in_local_db_character_names.each do |character_name| + next if character_name.in?(@excluded_character_names) + + raise StandardError, "#{character_name} は キャラDB の中に存在しません。" unless o.in_local_db_character_names?(character_name) + end end end end diff --git a/app/services/sheets/result_illustration_applications.rb b/app/services/sheets/result_illustration_applications.rb index 8eed00b8..f701f59f 100644 --- a/app/services/sheets/result_illustration_applications.rb +++ b/app/services/sheets/result_illustration_applications.rb @@ -75,7 +75,7 @@ def self.import_totallings_data_to_database end end - # シートから持ってきたレコードのうち、無効なレコードを除外する + # シートから持ってきたレコードのうち、無効なレコードを除外する(TEMP_ は含まれていることに注意する) valid_character_name_for_public_rows = [] rows.each_with_index do |row, i| next if i == 0 || row[cloumn_names_and_sheet_index_number['character_name_for_public']].blank? @@ -85,24 +85,30 @@ def self.import_totallings_data_to_database valid_character_name_by_sheet_totalling_rows = rows.map.with_index { |row, index| row[7] unless index.zero? }.compact_blank # 更新がなければメソッドを抜ける - return '[NOT MODIFIED] Sheets::ResultIllustrationApplications.import_totallings_data_to_database' if valid_character_name_for_public_rows.count == OnRawSheetResultIllustrationTotalling.count && valid_character_name_by_sheet_totalling_rows.count == OnRawSheetResultIllustrationTotalling.pluck(:character_name_by_sheet_totalling).reject { |cell| cell.start_with?('TEMP_') }.count + return '[NOT MODIFIED] Sheets::ResultIllustrationApplications.import_totallings_data_to_database' if not_modified?( + valid_character_name_for_public_rows, + valid_character_name_by_sheet_totalling_rows + ) ActiveRecord::Base.transaction do # 主キーがないから問答無用で全削除して入れ直す OnRawSheetResultIllustrationTotalling.destroy_all rows.each_with_index do |row, i| - next if i == 0 || row[cloumn_names_and_sheet_index_number['character_name_for_public']].blank? + next if i == 0 || + (row[cloumn_names_and_sheet_index_number['character_name_for_public']].blank? && row[cloumn_names_and_sheet_index_number['character_name_for_sheet_totalling']].blank?) # FIXME: ワークアラウンドなので要修正 - temporary_inserted_data = "TEMP_#{SecureRandom.uuid}" + temporary_inserted_data_for_totalling = "TEMP_TOTALLING_#{SecureRandom.uuid}" + temporary_inserted_data_for_public = "TEMP_PUBLIC_#{SecureRandom.uuid}" - character_name_by_sheet_totalling_data = row[cloumn_names_and_sheet_index_number['character_name_for_sheet_totalling']].presence || temporary_inserted_data + character_name_by_sheet_totalling_data = row[cloumn_names_and_sheet_index_number['character_name_for_sheet_totalling']].presence || temporary_inserted_data_for_totalling + character_name_for_public = row[cloumn_names_and_sheet_index_number['character_name_for_public']].presence || temporary_inserted_data_for_public obj = OnRawSheetResultIllustrationTotalling.new( character_name_by_sheet_totalling: character_name_by_sheet_totalling_data, number_of_applications: row[cloumn_names_and_sheet_index_number['number_of_applications']], - character_name_for_public: row[cloumn_names_and_sheet_index_number['character_name_for_public']] + character_name_for_public: character_name_for_public ) obj.save! @@ -111,5 +117,14 @@ def self.import_totallings_data_to_database '[DONE] Sheets::ResultIllustrationApplications.import_totallings_data_to_database' end + + def self.not_modified?(public_rows, sheet_totalling_rows) + public_rows.count == without_temp_records(OnRawSheetResultIllustrationTotalling.pluck(:character_name_for_public)).count && + sheet_totalling_rows.count == without_temp_records(OnRawSheetResultIllustrationTotalling.pluck(:character_name_by_sheet_totalling)).count + end + + def self.without_temp_records(source_records) + source_records.reject { |cell| cell.start_with?('TEMP_') } + end end end diff --git a/app/services/sheets/write_and_update/final_summary/fav_quotes.rb b/app/services/sheets/write_and_update/final_summary/fav_quotes.rb index 6e0502f6..1124546d 100644 --- a/app/services/sheets/write_and_update/final_summary/fav_quotes.rb +++ b/app/services/sheets/write_and_update/final_summary/fav_quotes.rb @@ -3,7 +3,7 @@ module WriteAndUpdate module FinalSummary class FavQuotes def initialize - @sheet_name = 'まとめ' + @sheet_name = '最終まとめ' @column_name_to_index_hash = { id: 0, シートid: 1, diff --git a/config/credentials.yml.enc b/config/credentials.yml.enc index 8d40b058..6d523fad 100644 --- a/config/credentials.yml.enc +++ b/config/credentials.yml.enc @@ -1 +1 @@ -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--f+k4JIglA0416guD--vZl1YZSapwb0YG0Vh5Ofaw== \ No newline at end of file +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--u5JhE5ycWAx9Ibj/--z8dCNlf1Nf47kPxKCQZBRA== \ No newline at end of file diff --git a/config/sheet_headers_and_column_names_relations/on_raw_sheet_result_illustration_totallings.yml b/config/sheet_headers_and_column_names_relations/on_raw_sheet_result_illustration_totallings.yml index 7f82ae32..3ffb47fa 100644 --- a/config/sheet_headers_and_column_names_relations/on_raw_sheet_result_illustration_totallings.yml +++ b/config/sheet_headers_and_column_names_relations/on_raw_sheet_result_illustration_totallings.yml @@ -1,3 +1,6 @@ +- + sheet_header: キャラ + column_name: raw_character_name_by_hand - sheet_header: キャラ(集計) column_name: character_name_for_sheet_totalling diff --git a/import_all_counting_data_to_local_db.sh b/import_all_counting_data_to_local_db.sh index 028f27d8..59c24043 100755 --- a/import_all_counting_data_to_local_db.sh +++ b/import_all_counting_data_to_local_db.sh @@ -3,6 +3,7 @@ bin/rails runner 'CountingAllCharacter.destroy_all' bin/rails import_counting_all_characters:exec_all +# 協力攻撃部門 # bin/rails runner 'CountingUniteAttack.destroy_all' # bin/rails import_counting_unite_attacks:exec_all diff --git a/lib/tasks/checkers.rake b/lib/tasks/checkers.rake new file mode 100644 index 00000000..692f4db0 --- /dev/null +++ b/lib/tasks/checkers.rake @@ -0,0 +1,53 @@ +namespace :checkers do + desc 'ローカルデータベースが対象の全てのチェッカを実行する' + task in_db_data: :environment do + # User 規定票数以上投票チェック + over_three_votes_users = Counting::Checkers::AllCharacters.over_three_votes_users + raise StandardError, "以下の User は規定票数以上の票を投票しています。\n#{over_three_votes_users.map(&:screen_name).join("\n")}" if over_three_votes_users.present? + + puts '[LOG] 規定票数以上の投票をしていないかのチェックが終了しました。' + + # User 同キャラ投票チェック + vote_to_the_same_characters_users = Counting::Checkers::AllCharacters.vote_to_the_same_characters_users + raise StandardError, "以下の User は同じキャラに対して投票しています。\n#{vote_to_the_same_characters_users.map(&:screen_name).join("\n")}" if vote_to_the_same_characters_users.present? + + puts '[LOG] 同キャラ投票をしていないかのチェックが終了しました。' + + # DM データチェック + not_good_rows = Counting::Checkers::DirectMessages.new.not_good_rows_if_same_vote_contents_exist + raise StandardError, "シート上の以下の id の DM は不適切です。\n#{not_good_rows.map { |row| row[0]}.join("\n")}" if not_good_rows.present? + + puts '[LOG] シート上の DM のデータのチェックが終了しました。' + + # 開票イラストのキャラ名が DB に存在するかどうかをチェック + imported_local_db_character_names = OnRawSheetResultIllustrationTotalling.all.pluck(:character_name_by_sheet_totalling) + filtered_imported_local_db_character_names = imported_local_db_character_names.reject { |name| name.start_with?('TEMP_') } + + o = Counting::Checkers::ResultIllustrations.new + + filtered_imported_local_db_character_names.each do |character_name| + raise StandardError, "#{character_name} は キャラDB の中に存在しません。" unless o.is_in_sheet_character_name_in_db?(character_name) + end + + puts '[WARN] 開票イラストのキャラ名に "TEMP_" のデータが含まれています。' if imported_local_db_character_names.find { |name| name.start_with?('TEMP_') } + puts '[LOG] 開票イラストのキャラ名が DB に存在するかどうかのチェックが終了しました' + end + + desc '最終スプレッドシートが対象の全てのチェッカを実行する' + task in_final_sheets_data: :environment do + final_sheet_id = ENV.fetch('COUNTING_FINAL_RESULTS_SHEET_ID', nil) + + # キャラ名辞書一致 + # ボ・OP・CLイラスト(オールキャラ) + # ボ・選挙運動 + # ボ・開票イラスト + # ボ・推し台詞 + # ボ・お題小説 + + # さらに、開票イラストあるなし、推し台詞あるなし + # 単体・①オールキャラ部門 + + # さらに、OPCLイラストあるなし、選挙運動あるなし + # 最終・①オールキャラ部門 + end +end