diff --git a/app/api/admin/analytics/route.ts b/app/api/admin/analytics/route.ts index cad3c85..d90442d 100644 --- a/app/api/admin/analytics/route.ts +++ b/app/api/admin/analytics/route.ts @@ -37,17 +37,17 @@ export async function GET(request: NextRequest) { const today = new Date().toISOString().split('T')[0] const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString().split('T')[0] - // 批次查詢基本統計數據 + // 批次查詢基本統計數據 - 主要使用 activity_logs 表 let basicStats try { basicStats = await db.query(` SELECT (SELECT COUNT(*) FROM users) as total_users, - (SELECT COUNT(DISTINCT user_id) FROM activity_logs WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+08:00')) = ? AND action IN ('login', 'view', 'submit', 'vote', 'like')) as today_active_users, - (SELECT COUNT(DISTINCT user_id) FROM activity_logs WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+08:00')) = ? AND action IN ('login', 'view', 'submit', 'vote', 'like')) as yesterday_active_users, + (SELECT COUNT(DISTINCT user_id) FROM activity_logs WHERE DATE(created_at) = ? AND action IN ('login', 'view', 'submit', 'vote', 'like', 'favorite')) as today_active_users, + (SELECT COUNT(DISTINCT user_id) FROM activity_logs WHERE DATE(created_at) = ? AND action IN ('login', 'view', 'submit', 'vote', 'like', 'favorite')) as yesterday_active_users, (SELECT COALESCE(AVG(rating), 0) FROM user_ratings WHERE rating > 0) as avg_rating, (SELECT COUNT(*) FROM apps) as total_apps, - (SELECT COUNT(*) FROM apps WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+08:00')) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)) as new_this_week + (SELECT COUNT(*) FROM apps WHERE DATE(created_at) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)) as new_this_week `, [today, yesterday]) } catch (dbError) { console.error('📊 資料庫查詢錯誤:', dbError) @@ -89,7 +89,7 @@ export async function GET(request: NextRequest) { const debugActivityLogs = await db.query(` SELECT action, COUNT(*) as count FROM activity_logs - WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+08:00')) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) + WHERE DATE(created_at) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY action ORDER BY count DESC `) @@ -98,7 +98,7 @@ export async function GET(request: NextRequest) { const debugTodayActivity = await db.query(` SELECT action, COUNT(DISTINCT user_id) as unique_users FROM activity_logs - WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+08:00')) = ? + WHERE DATE(created_at) = ? GROUP BY action ORDER BY unique_users DESC `, [today]) @@ -221,31 +221,35 @@ export async function GET(request: NextRequest) { console.log('📊 查詢日期範圍:', { startDate, endDate }) - // 先測試查詢是否有數據 + // 先測試查詢是否有數據 - 使用 activity_logs 表 const testQuery = await db.query(` SELECT - viewed_at, - DATE(viewed_at) as date_direct, + created_at, + DATE(created_at) as date_direct, user_id, - app_id - FROM user_views - WHERE DATE(viewed_at) BETWEEN ? AND ? - ORDER BY viewed_at DESC + action, + resource_type + FROM activity_logs + WHERE DATE(created_at) BETWEEN ? AND ? + ORDER BY created_at DESC LIMIT 10 `, [startDate, endDate]) console.log('📊 測試查詢結果(最近10筆):', testQuery) + // 使用 activity_logs 表獲取每日用戶和會話數據 dailyStats = await db.query(` SELECT - DATE(viewed_at) as date, + DATE(created_at) as date, COUNT(DISTINCT user_id) as daily_users, COUNT(*) as daily_sessions - FROM user_views - WHERE DATE(viewed_at) BETWEEN ? AND ? - GROUP BY DATE(viewed_at) + FROM activity_logs + WHERE DATE(created_at) BETWEEN ? AND ? + AND action IN ('login', 'view', 'submit', 'vote', 'like', 'favorite') + GROUP BY DATE(created_at) ORDER BY date DESC `, [startDate, endDate]) + // 獲取所有活動的統計 dailyActivityStats = await db.query(` SELECT DATE(created_at) as date, diff --git a/env.example b/env.example index 3ca790d..188161e 100644 --- a/env.example +++ b/env.example @@ -3,18 +3,18 @@ # ===================================================== # ===== 主機資料庫配置 ===== -DB_HOST=mysql.theaken.com -DB_PORT=33306 -DB_NAME=db_AI_Platform -DB_USER=AI_Platform -DB_PASSWORD=Aa123456 +DB_HOST=XXXXX +DB_PORT=XXXX +DB_NAME=XXXXX +DB_USER=XXXX +DB_PASSWORD=XXXX # ===== 備機資料庫配置 ===== -SLAVE_DB_HOST=122.100.99.161 -SLAVE_DB_PORT=43306 -SLAVE_DB_NAME=db_AI_Platform -SLAVE_DB_USER=A999 -SLAVE_DB_PASSWORD=1023 +SLAVE_DB_HOST=XXXX +SLAVE_DB_PORT=XXXX +SLAVE_DB_NAME=XXXX +SLAVE_DB_USER=XXXX +SLAVE_DB_PASSWORD=XXXX # ===== 資料庫備援配置 ===== DB_FAILOVER_ENABLED=true @@ -30,7 +30,7 @@ DB_RETRY_DELAY=2000 # ===== AI API 配置 ===== # Gemini API 配置 (主要使用) -NEXT_PUBLIC_GEMINI_API_KEY=AIzaSyAN3pEJr_Vn2xkCidGZAq9eQqsMVvpj8g4 +NEXT_PUBLIC_GEMINI_API_KEY=your_api_key_here NEXT_PUBLIC_GEMINI_API_URL=https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent # DeepSeek API 配置 (備用)