Statistiky: dokoncene hry rozdelene na s ludmi / s botmi

Karta "Dokoncene hry" (%) nahradena dvomi poctami dokoncenych hier
podla toho, ci na niektorom sedadle sedel bot (username "bot:...").
Zaroven oprava serializacie avg_game_duration_minutes -- Postgres
vracia z func.avg Decimal, ktory json.dumps nevie serializovat (500
na /api/admin/stats).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
tim
2026-07-10 22:25:32 +02:00
co-authored by Claude Opus 4.8
parent 8e18325660
commit 1636757217
3 changed files with 66 additions and 12 deletions
+4 -5
View File
@@ -17,7 +17,8 @@ import PageviewsChart from './PageviewsChart';
interface DailyStats {
games_per_day: Record<string, number>;
players_per_day: Record<string, number>;
completion_rate: number | null;
finished_bot_games: number;
finished_human_games: number;
avg_game_duration_minutes: number | null;
total_players: number;
unconfirmed_players: number;
@@ -157,10 +158,8 @@ export default function AdminStats() {
<div className={`flex gap-3 ${desktop ? '' : 'flex-wrap'}`}>
<SummaryCard label="Hráči celkom" value={String(data.total_players)} />
<SummaryCard label="Nedokončené registrácie" value={String(data.unconfirmed_players)} />
<SummaryCard
label="Dokončené hry"
value={data.completion_rate != null ? `${Math.round(data.completion_rate * 100)}%` : '—'}
/>
<SummaryCard label="Dokončené hry s ľuďmi" value={String(data.finished_human_games)} />
<SummaryCard label="Dokončené hry s botmi" value={String(data.finished_bot_games)} />
<SummaryCard
label="Priem. dĺžka hry"
value={data.avg_game_duration_minutes != null ? `${Math.round(data.avg_game_duration_minutes)} min` : '—'}