feat(ui): rich dashboard cards with countries and recent postcards

This commit is contained in:
2026-07-05 19:22:10 +08:00
parent 419ec47b99
commit 9decb570c2
3 changed files with 27 additions and 3 deletions

View File

@@ -102,17 +102,20 @@ def root(user: User = Depends(get_current_user_web)):
@router.get("/dashboard", response_class=HTMLResponse)
def dashboard(request: Request, user: User = Depends(get_current_user_web), db: Session = Depends(get_db)):
profiles = db.query(Profile).filter(Profile.user_id == user.id).all()
# stats per profile
stats = {}
extras = {}
for p in profiles:
cards = db.query(Postcard).filter(Postcard.profile_id == p.id).all()
cards = db.query(Postcard).filter(Postcard.profile_id == p.id).order_by(Postcard.created_at.desc()).all()
stats[p.id] = {
"total": len(cards),
"sent": sum(1 for c in cards if c.status == "sent"),
"delivered": sum(1 for c in cards if c.status == "delivered"),
"received": sum(1 for c in cards if c.status == "received"),
}
return templates.TemplateResponse("dashboard.html", {"request": request, "user": user, "profiles": profiles, "stats": stats})
countries = sorted({c.country for c in cards if c.country})
recent = cards[:3]
extras[p.id] = {"countries": countries, "recent": recent}
return templates.TemplateResponse("dashboard.html", {"request": request, "user": user, "profiles": profiles, "stats": stats, "extras": extras})
# ---------- Profiles ----------