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