Add dashboard summary tiles
Shows rider count, activities imported in the last 7 days, 7-day sync success rate, and how many riders currently need attention, right above the rider list where an admin looks first. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from datetime import timedelta
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import APIRouter, Form, HTTPException, Request, status
|
||||
@@ -6,11 +7,13 @@ from fastapi.templating import Jinja2Templates
|
||||
|
||||
from app.auth.admin import password_matches, require_admin
|
||||
from app.auth.csrf import ensure_csrf_token, validate_csrf
|
||||
from app.db.models import SyncUser
|
||||
from app.db.models import SyncUser, utcnow
|
||||
from app.db.repositories import ActivityRepository, SyncRunRepository, UserRepository
|
||||
from app.security.credentials import CredentialCipher
|
||||
from app.web.forms import UserFormData
|
||||
|
||||
DASHBOARD_SUMMARY_WINDOW = timedelta(days=7)
|
||||
|
||||
router = APIRouter()
|
||||
templates = Jinja2Templates(directory=str(Path(__file__).resolve().parent / "templates"))
|
||||
|
||||
@@ -70,11 +73,13 @@ def login(
|
||||
def dashboard(request: Request):
|
||||
require_admin(request)
|
||||
with request.app.state.session_factory() as session:
|
||||
rows = UserRepository(session).dashboard_rows()
|
||||
repository = UserRepository(session)
|
||||
rows = repository.dashboard_rows()
|
||||
summary = repository.dashboard_summary(since=utcnow() - DASHBOARD_SUMMARY_WINDOW)
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"dashboard.html",
|
||||
{"rows": rows, "csrf_token": ensure_csrf_token(request)},
|
||||
{"rows": rows, "summary": summary, "csrf_token": ensure_csrf_token(request)},
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user