# frozen_string_literal: true

# Provides methods for refresh amount of order item
class Cart::RefreshItemService
  def call(order, orderable)
    raise Cart::InactiveProductError unless orderable.is_active

    item = order.order_items.find_by(orderable_type: orderable.class.name, orderable_id: orderable.id)

    raise ActiveRecord::RecordNotFound if item.nil?

    item.amount = orderable.amount || 0
    ActiveRecord::Base.transaction do
      item.save
      Cart::UpdateTotalService.new.call(order)
      order.save
    end
    order.reload
  end
end