diff --git a/app/actions/admin/matches/create.rb b/app/actions/admin/matches/create.rb index 3a385f7..3e2683f 100644 --- a/app/actions/admin/matches/create.rb +++ b/app/actions/admin/matches/create.rb @@ -5,24 +5,71 @@ module EuchreCamp module Admin module Matches class Create < EuchreCamp::Action - include Deps[repo: 'repositories.matches'] + include Deps[ + matches_repo: 'repositories.matches', + teams_repo: 'repositories.teams', + brackets_repo: 'repositories.bracket_matchups' + ] def handle(request, response) - match_params = request.params.to_h - match_params[:played_at] = Time.parse(match_params[:played_at]) if match_params[:played_at] + params = request.params.to_h + tournament_id = params[:event_id]&.to_i + + # Build match parameters + match_params = { + played_at: params[:played_at] ? Time.parse(params[:played_at]) : Time.now + } + + if tournament_id && params[:team_1_id] && params[:team_2_id] + # Tournament match - use team IDs + team_1 = teams_repo.teams.by_pk(params[:team_1_id].to_i).one + team_2 = teams_repo.teams.by_pk(params[:team_2_id].to_i).one + + match_params.merge!( + event_id: tournament_id, + team_1_p1_id: team_1.player_1_id, + team_1_p2_id: team_1.player_2_id, + team_2_p1_id: team_2.player_1_id, + team_2_p2_id: team_2.player_2_id, + team_1_score: params[:team_1_score]&.to_i || 0, + team_2_score: params[:team_2_score]&.to_i || 0, + status: 'completed' + ) + else + # Non-tournament match - use individual players + match_params.merge!( + team_1_p1_id: params[:team_1_p1_id]&.to_i, + team_1_p2_id: params[:team_1_p2_id]&.to_i, + team_1_score: params[:team_1_score]&.to_i || 0, + team_2_p1_id: params[:team_2_p1_id]&.to_i, + team_2_p2_id: params[:team_2_p2_id]&.to_i, + team_2_score: params[:team_2_score]&.to_i || 0, + status: 'completed' + ) + end # Create the match - match = repo.create(match_params) + match = matches_repo.create(match_params) # Enqueue background job to calculate Elo EuchreCamp::Jobs::CalculateEloJob.perform_later(match[:id]) - response.redirect_to("/admin/matches") + # Redirect based on context + if tournament_id + response.redirect_to("/admin/tournaments/#{tournament_id}") + else + response.redirect_to("/admin/matches") + end rescue StandardError => e # Handle validation errors or other issues puts "Error: #{e.message}" puts e.backtrace.join("\n") - response.redirect_to("/admin/matches/new") + + if tournament_id + response.redirect_to("/admin/tournaments/#{tournament_id}") + else + response.redirect_to("/admin/matches/new") + end end end end diff --git a/app/actions/admin/matches/new.rb b/app/actions/admin/matches/new.rb index 8a0120e..0306fe7 100644 --- a/app/actions/admin/matches/new.rb +++ b/app/actions/admin/matches/new.rb @@ -5,11 +5,30 @@ module EuchreCamp module Admin module Matches class New < EuchreCamp::Action - include Deps[repo: 'repositories.players'] + include Deps[ + players_repo: 'repositories.players', + events_repo: 'repositories.events', + teams_repo: 'repositories.teams' + ] - def handle(_request, response) - players = repo.all - response.render(view, players: players) + def handle(request, response) + players = players_repo.all + tournament = nil + teams = [] + + # Check if creating match for specific tournament + if request.params[:event_id] + tournament = events_repo.by_id(request.params[:event_id]) + teams = teams_repo.by_event(tournament[:id]) + end + + response.render(view, + players: players, + tournament: tournament, + teams: teams, + preselected_team_1: request.params[:team_1_id]&.to_i, + preselected_team_2: request.params[:team_2_id]&.to_i + ) end end end diff --git a/app/templates/admin/matches/new.html.erb b/app/templates/admin/matches/new.html.erb index 45bd54d..1e7c7da 100644 --- a/app/templates/admin/matches/new.html.erb +++ b/app/templates/admin/matches/new.html.erb @@ -1,66 +1,106 @@ -

Enter New Match

+

<%= tournament ? "Enter Match for #{tournament.name}" : "Enter New Match" %>

+ +<% if tournament %> +

Format: <%= tournament.format %> | Status: <%= tournament.status %>

+
+<% end %>
+
-
- Team 1 -
- - -
-
- - -
-
- - -
-
+ <% if tournament && teams.any? %> + +
+ Team 1 +
+ + +
+
-
- Team 2 -
- - -
-
- - -
-
- - -
-
+
+ Team 2 +
+ + +
+
+ <% else %> + +
+ Team 1 +
+ + +
+
+ + +
+
+ + +
+
+ +
+ Team 2 +
+ + +
+
+ + +
+
+ + +
+
+ <% end %>
-

Back to Matches

+

">Back

diff --git a/app/views/admin/matches/new.rb b/app/views/admin/matches/new.rb index 93f8ddf..a1c0371 100644 --- a/app/views/admin/matches/new.rb +++ b/app/views/admin/matches/new.rb @@ -6,6 +6,10 @@ module EuchreCamp module Matches class New < EuchreCamp::View expose :players + expose :tournament + expose :teams + expose :preselected_team_1 + expose :preselected_team_2 end end end