You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.0 KiB
50 lines
1.0 KiB
class Csv::Downloader |
|
attr_reader :csv_download |
|
|
|
delegate :path, to: :file |
|
|
|
def initialize(csv_download:) |
|
@csv_download = csv_download |
|
end |
|
|
|
def call |
|
download |
|
end |
|
|
|
def delete_local_file! |
|
file.unlink |
|
end |
|
|
|
def presigned_url |
|
s3_storage_service.get_presigned_url(csv_download.filename, 60, response_content_disposition: "attachment; filename=#{csv_download.filename}") |
|
end |
|
|
|
private |
|
|
|
def download |
|
io = storage_service.get_file_io(csv_download.filename) |
|
file.write(io.read) |
|
io.close |
|
file.close |
|
end |
|
|
|
def file |
|
@file ||= Tempfile.new |
|
end |
|
|
|
def storage_service |
|
@storage_service ||= if FeatureToggle.upload_enabled? |
|
s3_storage_service |
|
else |
|
local_disk_storage_service |
|
end |
|
end |
|
|
|
def s3_storage_service |
|
Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["BULK_UPLOAD_BUCKET"]) |
|
end |
|
|
|
def local_disk_storage_service |
|
Storage::LocalDiskService.new |
|
end |
|
end
|
|
|