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);
    }
}