- ai_pricing_configs 테이블 마이그레이션 생성 (기본 시드 데이터 포함) - AiPricingConfig 모델 추가 (캐시 적용 단가/환율 조회) - AiReportService 하드코딩 단가를 DB 조회로 변경 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
68 lines
1.7 KiB
PHP
68 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Models\Tenants;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
class AiPricingConfig extends Model
|
|
{
|
|
protected $table = 'ai_pricing_configs';
|
|
|
|
protected $fillable = [
|
|
'provider',
|
|
'model_name',
|
|
'input_price_per_million',
|
|
'output_price_per_million',
|
|
'unit_price',
|
|
'unit_description',
|
|
'exchange_rate',
|
|
'is_active',
|
|
'description',
|
|
];
|
|
|
|
protected $casts = [
|
|
'input_price_per_million' => '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');
|
|
}
|
|
}
|