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.
61 lines
1.1 KiB
61 lines
1.1 KiB
class BulkUpload::Processor |
|
attr_reader :bulk_upload |
|
|
|
def initialize(bulk_upload:) |
|
@bulk_upload = bulk_upload |
|
end |
|
|
|
def call |
|
download |
|
validator.call |
|
create_logs if validator.create_logs? |
|
ensure |
|
downloader.delete_local_file! |
|
end |
|
|
|
private |
|
|
|
def create_logs |
|
log_creator_class.new( |
|
bulk_upload:, |
|
path: downloader.path, |
|
).call |
|
end |
|
|
|
def log_creator_class |
|
case bulk_upload.log_type |
|
when "lettings" |
|
BulkUpload::Lettings::LogCreator |
|
when "sales" |
|
BulkUpload::Sales::LogCreator |
|
else |
|
raise "Log creator not found for #{bulk_upload.log_type}" |
|
end |
|
end |
|
|
|
def downloader |
|
@downloader ||= BulkUpload::Downloader.new(bulk_upload:) |
|
end |
|
|
|
def download |
|
downloader.call |
|
end |
|
|
|
def validator |
|
@validator ||= validator_class.new( |
|
bulk_upload:, |
|
path: downloader.path, |
|
) |
|
end |
|
|
|
def validator_class |
|
case bulk_upload.log_type |
|
when "lettings" |
|
BulkUpload::Lettings::Validator |
|
when "sales" |
|
BulkUpload::Sales::Validator |
|
else |
|
raise "Validator not found for #{bulk_upload.log_type}" |
|
end |
|
end |
|
end
|
|
|