Class: SpreeCmCommissioner::TripDistanceCalculator

Inherits:
BaseInteractor show all
Defined in:
app/interactors/spree_cm_commissioner/trip_distance_calculator.rb

Overview

Computes trip distance details and pricing payload.

Inputs via context:

  • origin: { lat:, lng: }

  • configured_destination: { lat:, lng: }

  • pickups: Array<{ lat:, lng: }> (optional)

  • dropoffs: Array<{ lat:, lng: }> (optional)

  • pickup_oob_confirmed: Boolean (optional)

  • dropoff_oob_confirmed: Boolean (optional)

  • base_price_usd: Numeric

  • boundary_km: Numeric (optional, default 0)

Outputs via context on success:

  • payload: Hash (compatible with previous controller response)

  • base_km, detour_pickup_km, detour_dropoff_km: Floats or nil

  • distance_km, directions_url, ordered_points, estimated_time_minutes (when optimize true)

Instance Method Summary collapse

Instance Method Details

#callObject



29
30
31
32
33
34
35
36
37
38
# File 'app/interactors/spree_cm_commissioner/trip_distance_calculator.rb', line 29

def call
  validate_inputs

  pickups_points, dropoffs_points, final_destination = prepare_points
  base_km, detour_pickup_km, detour_dropoff_km = compute_route_kms(pickups_points, dropoffs_points, final_destination)
  details_ctx = fetch_details(final_destination, pickups_points, dropoffs_points)
  extra_data = compute_extra_data(base_km, detour_pickup_km, detour_dropoff_km)
  payload = build_payload(details_ctx, base_km, detour_pickup_km, detour_dropoff_km, extra_data)
  assign_context(details_ctx, base_km, detour_pickup_km, detour_dropoff_km, payload)
end