51 lines
1.7 KiB
Ruby
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
|