mayukorin / atp_tennis_tour_search

0 stars 0 forks source link

バルセロナオープンのページで,優勝者の名前も灰色の表示になってしまう. #63

Open mayukorin opened 2 years ago

mayukorin commented 2 years ago

image

バッチ処理で実行された後のため,デバックするのが難しいが検討する必要あり.

mayukorin commented 2 years ago

tournament_year_and_playerremain_flag の更新の部分で問題が起きているはず.

tournament_yearchampion も,本来の優勝者が登録されていない.

mayukorin commented 2 years ago

tournament_yearchampion が間違って登録されているということは,下のコードの if remain_players_cnt == 1 以下が実行されている時点で,優勝者の remain_flag が false になっているということ

if @tournament_year.champion.nil?
                    remain_players_cnt = TournamentYearAndPlayer.where(tournament_year: @tournament_year.id, remain_flag: 't').size
                    if remain_players_cnt == 1
                        champion_id = TournamentYearAndPlayer.find_by(tournament_year: @tournament_year.id, remain_flag: 't').player.id
                        @tournament_year.update(champion_id: champion_id)
                    end
                end
mayukorin commented 2 years ago

4/24 3:00 の時点で,優勝者の remain_flag が false になり,champion が一人だけとなり,間違った champion 登録がされてる. 間違って champion に登録されている人は,match の登録と一緒に remain_flag が正しく false に更新されている. 準優勝者も,4/22 21:00 の時点で, remain_flag が false

mayukorin commented 2 years ago

"match.day > ?", result_nil_match.day の部分で,match.day は日本時間になっているのに,result_nil_match.day は現地時間になっていることが原因で,本来 result_nil_match より早い match が if でひっかかったとか?

if PlayerMatch.eager_loading.where(match: {home_player: home_player.id, tournament_year: @tournament_year.id} ).where("match.day > ?", result_nil_match.day).exists?
                        result_nil_match.update(win_player_id: home_player.id)
                        tournament_year_and_away_player = TournamentYearAndPlayer.joins(:tournament_year, :player).where(tournament_year: @tournament_year.id, player: away_player.id)
                        tournament_year_and_away_player.update(remain_flag: 'f')
mayukorin commented 2 years ago

たしかに,match.day が一部正しい時刻ではないところがある. 例)カレーニョブスタとシュワルツマンの試合.Tennis Live Data API 的には,4/24 18:00 のはずなのに,データベースでは 4/23 20:30 で登録されてる.

mayukorin commented 2 years ago

バッチ処理のたびに,match.day を正しいものに更新する必要はあり

mayukorin commented 2 years ago

原因として考えられるのは,試合結果が出ていないのに API の方で,winner_id を書いてしまっているとか?

mayukorin commented 2 years ago

else の部分が原因な気がする. result_match["result"] は nil ではないが winner_id が nil(つまり試合途中)の場合,else 以下が実行され,試合結果に関わらず home_playerremain_flagf になってしまう.

if !result_match["result"].nil?
      # 試合結果が出ている場合
      if result_match["result"]["winner_id"] == result_match["home_id"]
          # home_player が勝った場合
          match.update(win_player_id: home_player.id)
          tournament_year_and_away_player.update(remain_flag: 'f')
          # tournament_year_and_home_player.update(remain_flag: 't')
      else ## !!
          # away_player が勝った場合
          match.update(win_player_id: away_player.id)
          tournament_year_and_home_player.update(remain_flag: 'f')
          # tournament_year_and_away_player.update(remain_flag: 't')

      end
end

この原因の仮説は合っている気がする. 優勝者と準優勝者の remain_flag が false になった原因の match では, 優勝者と準優勝者どちらも home_player であるため.