fix price

This commit is contained in:
2026-08-22 18:06:35 +03:30
parent 89014821c5
commit 0c0b424a69
2 changed files with 53 additions and 9 deletions
@@ -2,12 +2,26 @@
namespace App\Services;
use Illuminate\Support\Facades\Cache;
/**
* تنظیمات پیشرفته سوپرادمین برای ConfigService و get_settings.
* کش پایدار ندارد؛ فقط یک بار در همان درخواست PHP نگه داشته می‌شود.
* در هر درخواست یک بار fetch می‌شود؛ آخرین پاسخ سالم برای قطعی لحظه‌ای کش می‌ماند.
*/
class SuperAdminProgramSettingsOverlay
{
/**
* آخرین پاسخ سالم سوپرادمین.
*
* کلیدهای can_edit=0 مالکشان سوپرادمین است و کپی‌شان در جدول settings لوکال
* ممکن است ماندهٔ deploy باشد. بدون این کش، یک timeout لحظه‌ای باعث می‌شود
* ConfigService به آن کپی سقوط کند — مثلاً price_provider از zaarbox به montzar
* می‌پرید و مظنهٔ قدیمی montzar_live_price به‌جای قیمت زنده نمایش داده می‌شد.
*/
private const LAST_GOOD_CACHE_KEY = 'superadmin:program_settings:last_good';
private const LAST_GOOD_CACHE_MINUTES = 1440;
/** کلیدهایی که هنوز صفحهٔ اختصاصی ادمین خانگی مالک‌شان است */
public const LOCAL_OWNED_KEYS = [
'tracking_systems',
@@ -81,6 +95,13 @@ class SuperAdminProgramSettingsOverlay
self::$loaded = true;
$items = app(SuperAdminProgramSettingsClient::class)->fetchItems();
if ($items !== null) {
$this->rememberLastGood($items);
} else {
$items = $this->lastGoodItems();
}
if ($items === null) {
self::$memo = null;
@@ -104,6 +125,34 @@ class SuperAdminProgramSettingsOverlay
return $map;
}
/** @param array<int, array<string, mixed>> $items */
private function rememberLastGood(array $items): void
{
try {
Cache::put(
self::LAST_GOOD_CACHE_KEY,
$items,
now()->addMinutes(self::LAST_GOOD_CACHE_MINUTES)
);
} catch (\Throwable $e) {
// کش در دسترس نیست — همان رفتار قبلی
}
}
/**
* @return array<int, array<string, mixed>>|null
*/
private function lastGoodItems(): ?array
{
try {
$cached = Cache::get(self::LAST_GOOD_CACHE_KEY);
} catch (\Throwable $e) {
return null;
}
return is_array($cached) && $cached !== [] ? $cached : null;
}
/**
* @return array<int, array<string, mixed>>
*/