Otázka 09 / 15
Ceník pro velkoodběratele
Obchodník přeposílá rozzlobený e-mail od velkoodběratele: ráno u vrtaček viděl ceny o třetinu vyšší, než má ve smlouvě, a kolega z téže firmy si o hodinu později vyfotil vrtačku za 119,90 Kč. Pokaždé se to po pár minutách samo spravilo a jiný odběratel mezitím poslal screenshot s cenami, které má ve smlouvě úplně jiná firma. Tady je část modulu, která ceny v kategorii připravuje. 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 › Pricing › CategoryPriceListProvider.php
<?php declare(strict_types=1);
namespace App\Services\Pricing;
use App\Models\Category;
use App\Models\Customer;
use App\Repositories\PriceRepository;
use Illuminate\Contracts\Cache\Repository as CacheRepository;
final class CategoryPriceListProvider
{
private const string CACHE_KEY_PREFIX = 'category-prices';
private const int CACHE_TTL_SECONDS = 300;
public function __construct(
private readonly CacheRepository $cache,
private readonly PriceRepository $priceRepository,
)
{}
/** @return array<int, int> */
public function getPricesInMinorUnits(Category $category, Customer $customer, string $locale): array
{
$cacheKey = self::CACHE_KEY_PREFIX . ":{$category->id}:{$locale}";
return $this->cache->remember(
$cacheKey,
self::CACHE_TTL_SECONDS,
fn (): array => $this->priceRepository->findForCategory($category->id, $customer->price_group_id, $customer->currency),
);
}
}