From 1cfa9cab8c55fd1a9fb70ee9809c79dd18a55c94 Mon Sep 17 00:00:00 2001 From: robin Date: Thu, 18 Dec 2025 15:35:02 +0100 Subject: [PATCH] feat: add Gemini AI tracking and fix admin dashboard - Integrated API tracking into analyze-bottle service - Added credit balance check before Gemini API calls - Deduct credits after successful Gemini analysis - Track both successful and failed Gemini API calls - Added debug logging to admin dashboard for recent API calls - Fixed error handling in analyze-bottle Now tracks both Google Search and Gemini AI API usage! --- src/app/admin/page.tsx | 5 +++- src/services/analyze-bottle.ts | 47 +++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 9e4985b..29989d0 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -30,7 +30,8 @@ export default async function AdminPage() { const stats = await getGlobalApiStats(); // Fetch recent API usage - const { data: recentUsage } = await supabase + console.log('[Admin Page] Fetching recent API usage...'); + const { data: recentUsage, error: recentError } = await supabase .from('api_usage') .select(` *, @@ -41,6 +42,8 @@ export default async function AdminPage() { .order('created_at', { ascending: false }) .limit(50); + console.log('[Admin Page] Recent usage - count:', recentUsage?.length, 'error:', recentError); + // Fetch per-user statistics const { data: userStats } = await supabase .from('api_usage') diff --git a/src/services/analyze-bottle.ts b/src/services/analyze-bottle.ts index 364c2eb..116ba8a 100644 --- a/src/services/analyze-bottle.ts +++ b/src/services/analyze-bottle.ts @@ -5,6 +5,8 @@ import { BottleMetadataSchema, AnalysisResponse } from '@/types/whisky'; import { createServerActionClient } from '@supabase/auth-helpers-nextjs'; import { cookies } from 'next/headers'; import { createHash } from 'crypto'; +import { trackApiUsage } from './track-api-usage'; +import { checkCreditBalance, deductCredits } from './credit-service'; export async function analyzeBottle(base64Image: string): Promise { const supabase = createServerActionClient({ cookies }); @@ -16,10 +18,21 @@ export async function analyzeBottle(base64Image: string): Promise