public-market/spree_batch_api

View on GitHub
app/actions/spree/inventory/upload_file_action.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Spree
  module Inventory
    class UploadFileAction < BaseAction
      param :upload_meta

      def call
        upload = create_upload

        if upload.valid?
          job_id = UploadInventoryWorker.set(queue: queue_name).perform_async(upload.id.to_s)

          upload.update(job_id: job_id)
          upload.reload
        else
          { errors: upload.errors.full_messages }
        end
      end

      private

      def create_upload
        assign_default_meta
        Upload.create(**upload_options, metadata: upload_meta)
      end

      def queue_name; end

      def upload_options
        {}
      end

      def assign_default_meta
        upload_meta[:product_type] ||= 'fake'
      end
    end
  end
end