mirror of
https://github.com/jcwimer/wrestlingApp
synced 2026-03-24 17:04:43 +00:00
New bracket positions for double elim brackets. Each bracket position will now wrestle during the same round. Made a rake task to migrate previous matches to the new bracket positions.
This commit is contained in:
135
lib/tasks/migrate_bracket_position.rake
Normal file
135
lib/tasks/migrate_bracket_position.rake
Normal file
@@ -0,0 +1,135 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user