import React from 'react'; import { BarChart3, TrendingUp, ArrowUpRight, ArrowDownRight, Globe, Monitor, Smartphone, Calendar } from 'lucide-react'; import { db } from '@/lib/db'; import { format, subDays } from 'date-fns'; import { tr } from 'date-fns/locale'; import AnalyticsBarChart from '@/components/admin/AnalyticsBarChart'; import QueryRangeSelector from '@/components/admin/QueryRangeSelector'; async function getAnalyticsData(rangeDays: number = 12) { const result = await db.query('SELECT * FROM transactions ORDER BY created_at ASC'); const transactions = result.rows; if (!transactions) return null; const successfulTransactions = transactions.filter(t => t.status === 'succeeded'); const totalRevenue = successfulTransactions.reduce((acc, t) => acc + Number(t.amount), 0); const avgOrderValue = successfulTransactions.length > 0 ? totalRevenue / successfulTransactions.length : 0; // Monthly data for chart (grouped by month or last N periods) const lastPeriods = Array.from({ length: rangeDays }, (_, i) => { const d = subDays(new Date(), (rangeDays - 1) - i); return { date: d.toISOString().split('T')[0], label: format(d, 'd MMM', { locale: tr }), amount: 0 }; }); successfulTransactions.forEach(t => { const dateStr = new Date(t.created_at).toISOString().split('T')[0]; const periodMatch = lastPeriods.find(p => p.date === dateStr); if (periodMatch) { periodMatch.amount += Number(t.amount); } }); return { totalRevenue, avgOrderValue, chartData: lastPeriods, totalCount: transactions.length, successCount: successfulTransactions.length, }; } export default async function AnalyticsPage(props: { searchParams: Promise<{ range?: string }>; }) { const searchParams = await props.searchParams; const range = searchParams.range ? parseInt(searchParams.range) : 12; const data = await getAnalyticsData(range); if (!data) return
Sistem performans verileri
{item.label}