Otázka 12 / 15

Rozsypaný čaj pana Žluťoučkého

Pan Zdeněk Žluťoučký si objednal sypaný čaj a podpoře přeposlal e-mail o odeslání s předmětem „ZdenĚk, váš Sypaný čaj Úpěl �... je na cestě“ s dotazem, jestli mu ho kurýr opravdu rozsypal. Podpora k tomu dodává, že u některých objednávek nepřišla SMS o odeslání vůbec, ale nikdo zatím nepřišel na to, u kterých. Tady je část modulu, která texty notifikací skládá. Co se děje a co bys udělal?

Ctrl/Cmd+klik na metodu, třídu nebo konstantu otevře její deklaraci, Alt+← vrátí zpět.

app › Services › Notification › ShipmentNotificationFormatter.php
<?php declare(strict_types=1);

namespace App\Services\Notification;

use App\Models\Order;
use Illuminate\Contracts\Translation\Translator;

final class ShipmentNotificationFormatter
{
    private const int PRODUCT_NAME_MAX_LENGTH = 24;
    private const string ELLIPSIS = '...';

    public function __construct(
        private readonly Translator $translator,
    )
    {}

    public function formatEmailSubject(Order $order): string
    {
        return $this->translator->get('mail.shipment.subject', [
            'firstName' => ucfirst(strtolower($order->customer_first_name)),
            'product' => $this->shortenProductName($order->main_product_name),
        ]);
    }

    public function formatSms(Order $order): string
    {
        return $this->translator->get('sms.shipment.text', [
            'number' => $order->number,
            'product' => $this->shortenProductName($order->main_product_name),
            'trackingUrl' => $order->tracking_url,
        ]);
    }

    private function shortenProductName(string $productName): string
    {
        return strlen($productName) > self::PRODUCT_NAME_MAX_LENGTH
            ? substr($productName, 0, self::PRODUCT_NAME_MAX_LENGTH - strlen(self::ELLIPSIS)) . self::ELLIPSIS
            : $productName;
    }
}