'decimal:4', 'output_price_per_million' => 'decimal:4', 'unit_price' => 'decimal:6', 'exchange_rate' => 'decimal:2', 'is_active' => 'boolean', ]; /** * 활성 단가 설정 조회 (캐시 적용) */ public static function getActivePricing(string $provider): ?self { return Cache::remember("ai_pricing_{$provider}", 3600, function () use ($provider) { return self::where('provider', $provider) ->where('is_active', true) ->first(); }); } /** * 환율 조회 (첫 번째 활성 레코드 기준) */ public static function getExchangeRate(): float { return Cache::remember('ai_pricing_exchange_rate', 3600, function () { $config = self::where('is_active', true)->first(); return $config ? (float) $config->exchange_rate : 1400.0; }); } /** * 캐시 초기화 */ public static function clearCache(): void { $providers = ['gemini', 'claude', 'google-stt', 'google-gcs']; foreach ($providers as $provider) { Cache::forget("ai_pricing_{$provider}"); } Cache::forget('ai_pricing_exchange_rate'); } }