1
0
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:
2025-04-02 16:23:20 -04:00
parent f32e711d2b
commit 9c25a6cc39
29 changed files with 1138 additions and 756 deletions

View 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