@php $total = $logs->total(); $formatUsd = function ($value): string { return '$' . rtrim(rtrim(number_format((float) $value, 8, '.', ''), '0'), '.'); }; $formatUsdFixed3 = function ($value): string { return '$' . number_format((float) $value, 3, '.', ''); }; $formatMp = function ($value): string { return rtrim(rtrim(number_format((float) $value, 2, '.', ''), '0'), '.') . ' MP'; }; $formatUsageSummary = function ($log): string { $usageData = (array) ($log->usage_data ?? []); $type = (string) ($log->type ?? ''); if ($type === 'image' || data_get($usageData, 'image_count') !== null || data_get($usageData, 'megapixels') !== null) { $count = (int) (data_get($usageData, 'image_count') ?? data_get($usageData, 'count') ?? 1); $megapixels = data_get($usageData, 'megapixels'); if ($megapixels !== null) { return number_format($count) . '장 · ' . rtrim(rtrim(number_format((float) $megapixels, 2, '.', ''), '0'), '.') . ' MP'; } return number_format($count) . '장'; } if ($type === 'video' || data_get($usageData, 'duration_seconds') !== null) { $duration = data_get($usageData, 'duration_seconds'); $resolution = data_get($usageData, 'resolution'); $parts = []; if ($duration !== null) { $parts[] = rtrim(rtrim(number_format((float) $duration, 1, '.', ''), '0'), '.') . '초'; } if ($resolution) { $parts[] = (string) $resolution; } return $parts !== [] ? implode(' · ', $parts) : 'Video'; } $inputTokens = (int) data_get($usageData, 'input_tokens', $log->input_tokens ?? 0); $cachedInputTokens = (int) data_get($usageData, 'cached_input_tokens', 0); $outputTokens = (int) data_get($usageData, 'output_tokens', $log->output_tokens ?? 0); if ($cachedInputTokens > 0) { return 'Input ' . number_format($inputTokens) . ' / Cached ' . number_format($cachedInputTokens) . ' / Output ' . number_format($outputTokens); } return 'Input ' . number_format($inputTokens) . ' / Output ' . number_format($outputTokens); }; $formatTypeLabel = function ($log): string { return match ((string) ($log->type ?? '')) { 'text' => 'Text', 'image' => 'Image', 'video' => 'Video', 'audio' => 'Audio', default => (string) ($log->type ?? '-'), }; }; @endphp
전체 {{ $total }}
검색 @if ($logs->isEmpty()) @else
@foreach ($logs as $log) @php $pricing = (array) data_get($log->usage_data, 'pricing', []); $quote = (array) data_get($log->usage_data, 'quote', []); $quoteUsage = (array) data_get($quote, 'usage_data', []); $isImageLog = (string) ($log->type ?? '') === 'image'; $imageQuote = $isImageLog && $quoteUsage !== []; $creditTransaction = $log->creditTransaction; $billableUsd = (float) ($log->billable_cost_usd ?? 0); $providerUsd = (float) ($log->provider_cost_usd ?? 0); $markup = data_get($pricing, 'markup'); $usdPerCredit = data_get($pricing, 'usd_per_credit'); $quoteWidth = data_get($quoteUsage, 'width', data_get($log->usage_data, 'width')); $quoteHeight = data_get($quoteUsage, 'height', data_get($log->usage_data, 'height')); $quoteOutputMp = data_get($quoteUsage, 'output_mp', data_get($log->usage_data, 'megapixels')); $quoteFirstMpUsd = data_get($quoteUsage, 'first_mp_usd'); $quoteAdditionalMp = data_get($quoteUsage, 'additional_mp'); $quoteAdditionalMpUsd = data_get($quoteUsage, 'additional_mp_usd'); $quoteReferenceMp = data_get($quoteUsage, 'reference_mp'); $quoteReferenceMpUsd = data_get($quoteUsage, 'reference_mp_usd'); $quoteProviderUsd = data_get($quoteUsage, 'provider_cost_usd', $providerUsd); @endphp @endforeach
일시 테넌트 사용자 유형 Provider / Model 사용량 API 원가 과금 기준 차감 Credit 상세
{{ $log->created_at?->format('Y.m.d H:i') }}
{{ $log->tenant?->name ?? $log->tenant_id }}
{{ $log->tenant_id }}
{{ $log->user?->name ?? '-' }}
{{ $log->user?->email ?? '' }}
{{ $formatTypeLabel($log) }} {{ $log->provider }}/{{ $log->model }} {{ $formatUsageSummary($log) }} {{ $formatUsd($providerUsd) }}
{{ $markup !== null ? rtrim(rtrim(number_format((float) $markup, 2, '.', ''), '0'), '.') . 'x' : '-' }}
{{ $usdPerCredit !== null ? $formatUsd($usdPerCredit) . ' / Credit' : '-' }}
{{ number_format((int) ($log->credits_used ?? 0)) }} Credit
월 {{ number_format((int) ($log->monthly_credits_used ?? 0)) }} · 충전 {{ number_format((int) ($log->purchased_credits_used ?? 0)) }}
@endif