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