feat: [rd] 사운드로고/나레이션 AI 토큰 사용량 기록 추가

- RdController: 사운드로고-AI생성, 사운드로고-TTS 토큰 기록
- CmSongController: 나레이션-가사생성, 나레이션-TTS 토큰 기록
- AI 토큰 사용량 UI에 사운드로고/나레이션 카테고리 분류 추가
This commit is contained in:
김보곤
2026-03-08 12:57:29 +09:00
parent e7f81cb063
commit d02c142f65
3 changed files with 20 additions and 0 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Rd;
use App\Helpers\AiTokenHelper;
use App\Http\Controllers\Controller;
use App\Models\Rd\CmSong;
use Illuminate\Http\JsonResponse;
@@ -114,6 +115,10 @@ public function generateLyrics(Request $request): JsonResponse
}
$data = $response->json();
// 토큰 사용량 기록
AiTokenHelper::saveGeminiUsage($data, 'gemini-2.5-flash', '나레이션-가사생성');
$text = $data['candidates'][0]['content']['parts'][0]['text'] ?? '';
return response()->json([
@@ -165,6 +170,10 @@ public function generateAudio(Request $request): JsonResponse
}
$data = $response->json();
// 토큰 사용량 기록
AiTokenHelper::saveGeminiUsage($data, 'gemini-2.5-flash-preview-tts', '나레이션-TTS');
$inlineData = $data['candidates'][0]['content']['parts'][0]['inlineData'] ?? null;
if (! $inlineData || empty($inlineData['data'])) {

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Helpers\AiTokenHelper;
use App\Models\HR\Employee;
use App\Models\Rd\AiQuotation;
use App\Models\Tenants\Department;
@@ -438,6 +439,10 @@ public function soundLogoGenerate(Request $request): JsonResponse
}
$data = $response->json();
// 토큰 사용량 기록
AiTokenHelper::saveGeminiUsage($data, $model, '사운드로고-AI생성');
$text = $data['candidates'][0]['content']['parts'][0]['text'] ?? '';
// JSON 파싱 (코드블록 제거)
@@ -510,6 +515,10 @@ public function soundLogoTts(Request $request): JsonResponse
}
$data = $response->json();
// 토큰 사용량 기록
AiTokenHelper::saveGeminiUsage($data, 'gemini-2.5-flash-preview-tts', '사운드로고-TTS');
$inlineData = $data['candidates'][0]['content']['parts'][0]['inlineData'] ?? null;
if (! $inlineData || empty($inlineData['data'])) {

View File

@@ -230,6 +230,8 @@
if (menuName.startsWith('회의록')) return '회의록';
if (menuName.includes('명함')) return '명함OCR';
if (menuName.includes('사업자등록증')) return '사업자등록증OCR';
if (menuName.startsWith('사운드로고')) return '사운드로고';
if (menuName.startsWith('나레이션')) return '나레이션';
return menuName;
};