diff --git a/app/services/tournament_services/wrestlingdev_importer.rb b/app/services/tournament_services/wrestlingdev_importer.rb index 5354836..e5d06cd 100644 --- a/app/services/tournament_services/wrestlingdev_importer.rb +++ b/app/services/tournament_services/wrestlingdev_importer.rb @@ -1,16 +1,18 @@ class WrestlingdevImporter - def initialize( tournament, import_text ) - @tournament = tournament - @import_text = import_text - @attribute_separator = ";;" - @model_separator = ",," + + ##### Note, the json contains id's for each row in the tables as well as it's associations + ##### this ignores those ids and uses this tournament id and then looks up associations based on name + ##### and this tournament id + def initialize(tournament, import_json) + @tournament = tournament + @import_data = JSON.parse(import_json) end def import if Rails.env.production? - self.delay(:job_owner_id => @tournament.id, :job_owner_type => "Importing a backup").import_raw + self.delay(job_owner_id: @tournament.id, job_owner_type: "Importing a backup").import_raw else - import_raw + import_raw end end @@ -18,168 +20,89 @@ class WrestlingdevImporter @tournament.curently_generating_matches = 1 @tournament.save destroy_all - parse_text + parse_data @tournament.curently_generating_matches = nil @tournament.save end def destroy_all - @tournament.mats.reload.each do | mat | - mat.destroy - end - @tournament.matches.each do | match | - match.destroy - end - @tournament.schools.each do | school | - school.wrestlers.each do | wrestler | - wrestler.destroy - end + @tournament.mats.destroy_all + @tournament.matches.destroy_all + @tournament.schools.each do |school| + school.wrestlers.destroy_all school.destroy end - @tournament.weights.each do | weight | - weight.destroy - end + @tournament.weights.destroy_all end - def parse_text - @import_text.each_line do |line| - line_array = line.split(@model_separator,-1) - if line_array[0] == "--Tournament--" - line_array.shift - parse_tournament(line_array) - elsif line_array[0] == "--Schools--" - line_array.shift - parse_schools(line_array) - elsif line_array[0] == "--Weights--" - line_array.shift - parse_weights(line_array) - elsif line_array[0] == "--Mats--" - line_array.shift - parse_mats(line_array) - elsif line_array[0] == "--Wrestlers--" - line_array.shift - parse_wrestlers(line_array) - elsif line_array[0] == "--Matches--" - line_array.shift - parse_matches(line_array) - end - end + def parse_data + parse_tournament(@import_data["tournament"]["attributes"]) + parse_schools(@import_data["tournament"]["schools"]) + parse_weights(@import_data["tournament"]["weights"]) + parse_mats(@import_data["tournament"]["mats"]) + parse_wrestlers(@import_data["tournament"]["wrestlers"]) + parse_matches(@import_data["tournament"]["matches"]) end - def parse_tournament(tournament_attributes) - tournament_array = tournament_attributes[0].split(@attribute_separator,-1) - @tournament.name = tournament_array[0] - @tournament.address = tournament_array[1] - @tournament.director = tournament_array[2] - @tournament.director_email = tournament_array[3] - @tournament.tournament_type = tournament_array[4] - @tournament.weigh_in_ref = tournament_array[5] - @tournament.user_id = tournament_array[6] - #@tournament.curently_generating_matches = tournament_array[7] - @tournament.date = tournament_array[8] - @tournament.save - end - - def parse_wrestlers(wrestlers) - wrestlers.each do | wrestler | - puts wrestler - wrestler_array = wrestler.split(@attribute_separator,-1) - new_wrestler = Wrestler.new - new_wrestler.name = wrestler_array[0] - - school_id = School.where("name = ? and tournament_id = ?",wrestler_array[1],@tournament.id).first.id - weight_id = Weight.where("max = ? and tournament_id = ?",wrestler_array[2],@tournament.id).first.id - new_wrestler.school_id = school_id - new_wrestler.weight_id = weight_id - - new_wrestler.bracket_line = wrestler_array[3] - new_wrestler.original_seed = wrestler_array[4] - new_wrestler.season_win = wrestler_array[5] - new_wrestler.season_loss = wrestler_array[6] - new_wrestler.criteria = wrestler_array[7] - new_wrestler.extra = wrestler_array[8] - new_wrestler.offical_weight = wrestler_array[9] - new_wrestler.pool = wrestler_array[10] - new_wrestler.pool_placement = wrestler_array[11] - new_wrestler.pool_placement_tiebreaker = wrestler_array[12] - new_wrestler.save - end - end - - def parse_matches(matches) - matches.each do | match | - puts match - @tournament.reload - @tournament.mats.reload - match_array = match.split(@attribute_separator,-1) - new_match = Match.new - weight_id = Weight.where("max = ? and tournament_id = ?",match_array[10],@tournament.id).first.id - if match_array[0].size > 0 - w1_id = Wrestler.where("name = ? and weight_id = ?",match_array[0],weight_id).first.id - end - if match_array[1].size > 0 - w2_id = Wrestler.where("name = ? and weight_id = ?",match_array[1],weight_id).first.id - end - if match_array[4].size > 0 - winner_id = Wrestler.where("name = ? and weight_id = ?",match_array[4],weight_id).first.id - end - if match_array[15].size > 0 - # mat_id = Mat.where("name = ? and tournament_id = ?",match_array[15],@tournament.id).first.id - end - new_match.w1 = w1_id if match_array[0].size > 0 - new_match.w2 = w2_id if match_array[1].size > 0 - new_match.winner_id = winner_id if match_array[4].size > 0 - new_match.w1_stat = match_array[2] - new_match.w2_stat = match_array[3] - new_match.win_type = match_array[5] - new_match.score = match_array[6] - new_match.tournament_id = @tournament.id - new_match.round = match_array[7] - new_match. finished = match_array[8] - new_match.bout_number = match_array[9] - new_match.weight_id = weight_id - new_match.bracket_position = match_array[11] - new_match.bracket_position_number = match_array[12] - new_match.loser1_name = match_array[13] - new_match.loser2_name = match_array[14] - # new_match.mat_id = mat_id if match_array[15].size > 0 - new_match.overtime_type = match_array[16] - new_match.save - end + def parse_tournament(attributes) + attributes.except!("id") + @tournament.update(attributes) end def parse_schools(schools) - schools.each do | school | - puts school - school_array = school.split(@attribute_separator,-1) - new_school = School.new - new_school.tournament_id = @tournament.id - new_school.name = school_array[0] - new_school.score = school_array[1] - new_school.save + schools.each do |school_attributes| + school_attributes.except!("id") + School.create(school_attributes.merge(tournament_id: @tournament.id)) end end def parse_weights(weights) - weights.each do | weight | - puts weight - weight_array = weight.split(@attribute_separator,-1) - new_weight = Weight.new - new_weight.tournament_id = @tournament.id - new_weight.max = weight_array[0] - new_weight.save + weights.each do |weight_attributes| + weight_attributes.except!("id") + Weight.create(weight_attributes.merge(tournament_id: @tournament.id)) end end def parse_mats(mats) - mats.each do | mat | - puts mat - mat_array = mat.split(@attribute_separator,-1) - new_mat = Mat.new - new_mat.tournament_id = @tournament.id - new_mat.name = mat_array[0] - new_mat.save + mats.each do |mat_attributes| + mat_attributes.except!("id") + Mat.create(mat_attributes.merge(tournament_id: @tournament.id)) end end -end \ No newline at end of file + def parse_wrestlers(wrestlers) + wrestlers.each do |wrestler_attributes| + school = School.find_by(name: wrestler_attributes["school"]["name"], tournament_id: @tournament.id) + weight = Weight.find_by(max: wrestler_attributes["weight"]["max"], tournament_id: @tournament.id) + wrestler_attributes.except!("id", "school", "weight") + Wrestler.create(wrestler_attributes.merge( + school_id: school&.id, + weight_id: weight&.id + )) + end + end + + def parse_matches(matches) + matches.each do |match_attributes| + next unless match_attributes # Skip if match_attributes is nil + + weight = Weight.find_by(max: match_attributes.dig("weight", "max"), tournament_id: @tournament.id) + mat = Mat.find_by(name: match_attributes.dig("mat", "name"), tournament_id: @tournament.id) + + w1 = Wrestler.find_by(name: match_attributes["w1_name"], weight_id: weight&.id) if match_attributes["w1_name"] + w2 = Wrestler.find_by(name: match_attributes["w2_name"], weight_id: weight&.id) if match_attributes["w2_name"] + winner = Wrestler.find_by(name: match_attributes["winner_name"], weight_id: weight&.id) if match_attributes["winner_name"] + + match_attributes.except!("id", "weight", "mat", "w1_name", "w2_name", "winner_name", "tournament_id") + + Match.create(match_attributes.merge( + tournament_id: @tournament.id, + weight_id: weight&.id, + mat_id: mat&.id, + w1: w1&.id, + w2: w2&.id, + winner_id: winner&.id + )) + end + end +end diff --git a/app/views/tournaments/export.html.erb b/app/views/tournaments/export.html.erb index dfae226..4cc4121 100644 --- a/app/views/tournaments/export.html.erb +++ b/app/views/tournaments/export.html.erb @@ -1,22 +1,23 @@ ---COPY AND PASTE ALL OF THIS TEXT INTO A FILE ON YOUR COMPUTER--
---CLICK ANYWHERE ON THIS PAGE, PRESS CTRL + A (OR COMMAND + A ON MAC) TO SELECT ALL, THEN PRESS CTRL + C (OR COMMAND + C ON MAC) TO COPY--
---THEN IN A DOCUMENT, RIGHT CLICK PASTE--
---WE RECOMMEND USING NOTEPAD (NOT MICROSOFT WORD) TO SAVE THIS TEXT ON WINDOWS--
-
-
---TO RESTORE PASTE THIS TEXT INTO THE FORM ON THE TOURNAMENT HOME PAGE--
-
-
-<% attribute_separator = ";;" %> -<% model_separator = ",," %> ---Tournament--<%= model_separator %><%= @tournament.name %><%= attribute_separator %><%= @tournament.address %><%= attribute_separator %><%= @tournament.director %><%= attribute_separator %><%= @tournament.director_email %><%= attribute_separator %><%= @tournament.tournament_type %><%= attribute_separator %><%= @tournament.weigh_in_ref %><%= attribute_separator %><%= @tournament.user_id %><%= attribute_separator %><%= @tournament.curently_generating_matches %><%= attribute_separator %><%= @tournament.date %> -
---Schools--<% @tournament.schools.each do |school| %><%= model_separator %><%= school.name %><%= attribute_separator %><%= school.score %><% end %> -
---Weights--<% @tournament.weights.each do |weight| %><%= model_separator %><%= weight.max %><% end %> -
---Mats--<% @tournament.mats.each do |mat| %><%= model_separator %><%= mat.name %><% end %> -
---Wrestlers--<% @tournament.wrestlers.each do |wrestler| %><%= model_separator %><%= wrestler.name %><%= attribute_separator %><%= wrestler.school.name %><%= attribute_separator %><%= wrestler.weight.max %><%= attribute_separator %><%= wrestler.bracket_line %><%= attribute_separator %><%= wrestler.original_seed %><%= attribute_separator %><%= wrestler.season_win %><%= attribute_separator %><%= wrestler.season_loss %><%= attribute_separator %><%= wrestler.criteria %><%= attribute_separator %><%= wrestler.extra %><%= attribute_separator %><%= wrestler.offical_weight %><%= attribute_separator %><%= wrestler.pool %><%= attribute_separator %><%= wrestler.pool_placement %><%= attribute_separator %><%= wrestler.pool_placement_tiebreaker %><% end %> -
---Matches--<% @tournament.matches.sort_by{|match| match.bout_number}.each do |match| %><%= model_separator %><%= Wrestler.where("id = ?",match.w1).first.name if match.w1 %><%= attribute_separator %><%= Wrestler.where("id = ?",match.w2).first.name if match.w2 %><%= attribute_separator %><%= match.w1_stat %><%= attribute_separator %><%= match.w2_stat %><%= attribute_separator %><%= Wrestler.where("id = ?",match.winner_id).first.name if match.winner_id %><%= attribute_separator %><%= match.win_type %><%= attribute_separator %><%= match.score %><%= attribute_separator %><%= match.round %><%= attribute_separator %><%= match.finished %><%= attribute_separator %><%= match.bout_number %><%= attribute_separator %><%= Weight.where("id = ?",match.weight_id).first.max if match.weight_id %><%= attribute_separator %><%= match.bracket_position %><%= attribute_separator %><%= match.bracket_position_number %><%= attribute_separator %><%= match.loser1_name %><%= attribute_separator %><%= match.loser2_name %><%= attribute_separator %><%= Mat.where("id = ?",match.mat_id).first.name if match.mat_id %><%= attribute_separator %><%= match.overtime_type %><% end %> \ No newline at end of file +{ + "tournament": { + "attributes": <%= @tournament.attributes.to_json %>, + "schools": <%= @tournament.schools.map(&:attributes).to_json %>, + "weights": <%= @tournament.weights.map(&:attributes).to_json %>, + "mats": <%= @tournament.mats.map(&:attributes).to_json %>, + "wrestlers": <%= @tournament.wrestlers.map { |wrestler| wrestler.attributes.merge( + { + "school": wrestler.school&.attributes, + "weight": wrestler.weight&.attributes + } + ) }.to_json %>, + "matches": <%= @tournament.matches.sort_by(&:bout_number).map { |match| match.attributes.merge( + { + "w1_name": Wrestler.find_by(id: match.w1)&.name, + "w2_name": Wrestler.find_by(id: match.w2)&.name, + "winner_name": Wrestler.find_by(id: match.winner_id)&.name, + "weight": Weight.find_by(id: match.weight_id)&.attributes, + "mat": Mat.find_by(id: match.mat_id)&.attributes + } + ) }.to_json %> + } +} \ No newline at end of file