Class: SpreeCmCommissioner::Transit::RoutePreviousTripCountDecrementerService

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/transit/route_previous_trip_count_decrementer_service.rb

Instance Method Summary collapse

Instance Method Details

#call(previous_route_id:) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/services/spree_cm_commissioner/transit/route_previous_trip_count_decrementer_service.rb', line 6

def call(previous_route_id:)
  previous_route = SpreeCmCommissioner::Route.find_by(id: previous_route_id)
  return failure(nil, 'Route not found') unless previous_route

  if previous_route.vendors.exists?

    # Build a trip-like object that responds to :route and :vendor so the delegated
    # service can locate vendor routes correctly.
    trip_like = Struct.new(:route, :vendor).new(previous_route, previous_route.vendors.first)
    result = SpreeCmCommissioner::Transit::RouteTripCountDecrementerService.call(trip: trip_like)
    return result if result.failure?
  else
    previous_route.with_lock do
      new_count = [previous_route.trip_count.to_i - 1, 0].max
      previous_route.update!(trip_count: new_count)
    end
  end

  success(previous_route: previous_route)
rescue StandardError => e
  failure(nil, e.message)
end