mirror of
https://github.com/jcwimer/wrestlingApp
synced 2026-03-25 01:14:43 +00:00
136 lines
4.6 KiB
Ruby
136 lines
4.6 KiB
Ruby
# lib/tasks/migrate_bracket_position.rake
|
|
# rake tournament:migrate_bracket_position
|
|
namespace :tournament do
|
|
desc "Fix bracket_position for matches labeled 'Bracket' or 'Conso' in Regular and Modified Double Elimination tournaments"
|
|
task migrate_bracket_position: :environment do
|
|
|
|
############################################################
|
|
# 1) Loop over REGULAR Double Elimination Tournaments
|
|
############################################################
|
|
Tournament.where("tournament_type LIKE ?", "%Regular Double Elimination%").find_each do |tournament|
|
|
tournament.weights.each do |weight|
|
|
# Determine bracket_size: 16-man if 9..16 wrestlers, 32-man if 17..32, otherwise skip
|
|
bracket_size = if (9..16).cover?(weight.wrestlers.size)
|
|
"16-man"
|
|
elsif (17..32).cover?(weight.wrestlers.size)
|
|
"32-man"
|
|
else
|
|
"small"
|
|
end
|
|
|
|
# Skip small
|
|
next if bracket_size == "small"
|
|
|
|
weight.matches.each do |match|
|
|
# Only update if old bracket_position is 'Bracket' or 'Conso'
|
|
next unless ["Bracket", "Conso"].include?(match.bracket_position)
|
|
|
|
new_pos =
|
|
if bracket_size == "16-man"
|
|
determine_new_bracket_position_16_man_reg(match.round, match.bracket_position)
|
|
else
|
|
# bracket_size == "32-man"
|
|
determine_new_bracket_position_32_man_reg(match.round, match.bracket_position)
|
|
end
|
|
|
|
# If new_pos != "Default Position", update the record
|
|
match.update!(bracket_position: new_pos) unless new_pos == "Default Position"
|
|
end
|
|
end
|
|
end
|
|
|
|
############################################################
|
|
# 2) Loop over MODIFIED Double Elimination Tournaments
|
|
############################################################
|
|
# Bracket + round=1 => "Bracket Round of 16"
|
|
# Conso + round=2 => "Conso Round of 8"
|
|
# else => "Default Position"
|
|
Tournament.where("tournament_type LIKE ?", "%Modified 16 Man Double Elimination%").find_each do |tournament|
|
|
tournament.weights.each do |weight|
|
|
# If not 9..16 wrestlers, skip
|
|
next unless (9..16).cover?(weight.wrestlers.size)
|
|
|
|
weight.matches.each do |match|
|
|
next unless ["Bracket", "Conso"].include?(match.bracket_position)
|
|
|
|
new_pos = determine_new_bracket_position_modified_16(match.round, match.bracket_position)
|
|
|
|
match.update!(bracket_position: new_pos) unless new_pos == "Default Position"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
############################################################
|
|
# HELPER METHODS
|
|
############################################################
|
|
|
|
#
|
|
# 16-MAN REGULAR Double Elimination
|
|
# - bracket => round=1 => "Bracket Round of 16"
|
|
# - conso => round=2 => "Conso Round of 8.1", round=3 => "Conso Round of 8.2"
|
|
#
|
|
def determine_new_bracket_position_16_man_reg(round, old_pos)
|
|
if old_pos == "Bracket"
|
|
case round
|
|
when 1 then "Bracket Round of 16"
|
|
else
|
|
"Default Position"
|
|
end
|
|
elsif old_pos == "Conso"
|
|
case round
|
|
when 2 then "Conso Round of 8.1"
|
|
when 3 then "Conso Round of 8.2"
|
|
else
|
|
"Default Position"
|
|
end
|
|
else
|
|
"Default Position"
|
|
end
|
|
end
|
|
|
|
#
|
|
# 32-MAN REGULAR Double Elimination
|
|
# bracket => round=1 => "Bracket Round of 32", round=2 => "Bracket Round of 16"
|
|
# conso => round=2 => "Conso Round of 16.1", round=3 => "Conso Round of 16.2",
|
|
# round=4 => "Conso Round of 8.1", round=5 => "Conso Round of 8.2"
|
|
#
|
|
def determine_new_bracket_position_32_man_reg(round, old_pos)
|
|
if old_pos == "Bracket"
|
|
case round
|
|
when 1 then "Bracket Round of 32"
|
|
when 2 then "Bracket Round of 16"
|
|
else
|
|
"Default Position"
|
|
end
|
|
elsif old_pos == "Conso"
|
|
case round
|
|
when 2 then "Conso Round of 16.1"
|
|
when 3 then "Conso Round of 16.2"
|
|
when 4 then "Conso Round of 8.1"
|
|
when 5 then "Conso Round of 8.2"
|
|
else
|
|
"Default Position"
|
|
end
|
|
else
|
|
"Default Position"
|
|
end
|
|
end
|
|
|
|
#
|
|
# MODIFIED Double Elimination (16-man).
|
|
# bracket => round=1 => "Bracket Round of 16"
|
|
# conso => round=2 => "Conso Round of 8"
|
|
# else => "Default Position"
|
|
#
|
|
def determine_new_bracket_position_modified_16(round, old_pos)
|
|
if old_pos == "Bracket"
|
|
round == 1 ? "Bracket Round of 16" : "Default Position"
|
|
elsif old_pos == "Conso"
|
|
round == 2 ? "Conso Round of 8" : "Default Position"
|
|
else
|
|
"Default Position"
|
|
end
|
|
end
|
|
end
|