Otázka 02 / 15
Cena dopravy
Kolega připravil výpočet ceny dopravy v košíku. E-shop zatím vozí přes PPL, Zásilkovnu a DPD a cena závisí na hmotnosti zásilky, dobírce a DPH. Merge request čeká na tvoje review. Schválil bys ho, nebo co bys vrátil?
Ctrl/Cmd+klik na metodu, třídu nebo konstantu otevře její deklaraci, Alt+← vrátí zpět.
app › Checkout › ShippingPriceCalculator.php
<?php declare(strict_types=1);
namespace App\Checkout;
use App\Cart\Cart;
use App\Shipping\DpdShipping;
use App\Shipping\PplShipping;
use App\Shipping\ZasilkovnaShipping;
final class ShippingPriceCalculator
{
public function calculate(object $carrier, Cart $cart): float
{
if ($carrier instanceof PplShipping) {
return $carrier->getPrice($cart->getWeight(), $cart->isCashOnDelivery());
}
if ($carrier instanceof ZasilkovnaShipping) {
return $carrier->priceFor($cart->getWeight(), $cart->isCashOnDelivery());
}
if ($carrier instanceof DpdShipping) {
return $carrier->calculatePrice($cart);
}
throw new \InvalidArgumentException('Unsupported carrier ' . $carrier::class);
}
}