Product.find(product_id) availability = backend.check_availability(product) if availability.any_available? reservation = backend.reserve_for_purchase(product) if points_program.eligible?(user) backend.pay_with_points(reservation, points_program.authorize(user, allocated_points)) else backend.pay_with_credit_card(reservation, credit_card_information) end else fail NoProductsAvailableError end end end