diff --git a/backend/admin.py b/backend/admin.py index ec9c314..ae72736 100644 --- a/backend/admin.py +++ b/backend/admin.py @@ -47,6 +47,8 @@ async def read_api_keys( item.tokens_used_month = usage.tokens_used_month or 0 item.requests_today = usage.requests_today or 0 item.requests_month = usage.requests_month or 0 + item.daily_reset_at = usage.daily_reset_at + item.monthly_reset_at = usage.monthly_reset_at result.append(item) return result diff --git a/backend/schemas.py b/backend/schemas.py index 15cf563..7fe788a 100644 --- a/backend/schemas.py +++ b/backend/schemas.py @@ -58,6 +58,8 @@ class APIKeyWithUsage(APIKey): tokens_used_month: int = 0 requests_today: int = 0 requests_month: int = 0 + daily_reset_at: Optional[datetime] = None + monthly_reset_at: Optional[datetime] = None class Config: from_attributes = True \ No newline at end of file diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index cc5a985..0b66f63 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -11,17 +11,28 @@ function authHeaders(token) { const fmtK = (n) => { const k = n / 1000; return k % 1 === 0 ? `${k}k` : `${k.toFixed(1)}k`; }; -function QuotaBar({ used, limit, isToken = false }) { - if (limit == null) return ∞; +function QuotaBar({ used, limit, isToken = false, since = null }) { + const fmt = isToken ? fmtK : (n) => n.toLocaleString('de-DE'); + const sinceLabel = since + ? new Date(since).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit' }) + : null; + + if (limit == null) return ( +