Files
euchre_camp/app/actions/admin/matches/process_upload.rb
T

51 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module EuchreCamp
module Actions
module Admin
module Matches
class ProcessUpload < EuchreCamp::Action
include Deps[events_repo: 'repositories.events']
def handle(request, response)
# In Hanami, file uploads are in request.params
file = request.params[:csv_file]
event_id = request.params[:event_id]&.to_i
unless file && file[:tempfile]
response.flash[:error] = "No file uploaded"
response.redirect_to("/admin/matches/upload")
return
end
unless event_id
response.flash[:error] = "Please select a tournament"
response.redirect_to("/admin/matches/upload")
return
end
# Verify event exists
begin
events_repo.by_id(event_id)
rescue
response.flash[:error] = "Invalid tournament ID"
response.redirect_to("/admin/matches/upload")
return
end
# Use the specialized importer for Euchre tournament results
importer = EuchreCamp::Services::TournamentCsvImporter.new(event_id: event_id)
results = importer.import(file[:tempfile].path)
message = "Created #{results[:matches_created]} matches, #{results[:teams_created]} teams"
message += ". Errors: #{results[:errors].join(', ')}" if results[:errors].any?
response.flash[:message] = message
response.redirect_to("/admin/tournaments/#{event_id}")
end
end
end
end
end
end