Sha256: 82f5648ae071030278a26adecac2dedfcc3c2431dd0a8441af749c6bc90f1d82

Contents?: true

Size: 1.42 KB

Versions: 8

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

module SolidusBacktracs
  module Shipment
    class PendingApiSyncQuery
      SQLITE_CONDITION = <<~SQL.squish
        (
          spree_shipments.backtracs_synced_at IS NULL
        ) AND ((JULIANDAY(CURRENT_TIMESTAMP) - JULIANDAY(spree_orders.updated_at)) * 86400.0) < :threshold
      SQL

      POSTGRES_CONDITION = <<~SQL.squish
        (
          spree_shipments.backtracs_synced_at IS NULL
        ) AND (EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - spree_orders.updated_at))) < :threshold
      SQL

      MYSQL2_CONDITION = <<~SQL.squish
        (
          spree_shipments.backtracs_synced_at IS NULL
        ) AND (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(spree_orders.updated_at)) < :threshold
      SQL

      class << self
        def apply(scope)
          scope
            .joins(:order)
            .merge(::Spree::Order.complete)
            .where(condition_for_adapter, threshold: SolidusBacktracs.config.api_sync_threshold / 1.second)
        end

        private

        def condition_for_adapter
          db_adapter = ActiveRecord::Base.connection.adapter_name.downcase

          case db_adapter
          when /sqlite/
            SQLITE_CONDITION
          when /postgres/
            POSTGRES_CONDITION
          when /mysql2/
            MYSQL2_CONDITION
          else
            fail "Backtracs API sync not supported for DB adapter #{db_adapter}!"
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
solidus_bactracs-3.0.0 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb
solidus_backtracs-2.2.6 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb
solidus_backtracs-2.2.5 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb
solidus_backtracs-2.2.4 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb
solidus_backtracs-2.2.3 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb
solidus_backtracs-2.2.2 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb
solidus_backtracs-2.2.1 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb
solidus_backtracs-2.2.0 app/queries/solidus_backtracs/shipment/pending_api_sync_query.rb