Feature: Hunde-Persönlichkeitstest + Kilometer-Lebenswerk-Badge (SW by-v698)
- personality.js: 10-Fragen-Quiz mit 4 Typen (Abenteurer/Entdecker/Kuschler/Denker), Ergebnis-Speicherung in localStorage, Share-Funktion - achievements.py: neue Badge-Kategorie km_lebenswerk (Bronze 100 km bis Platin 5000 km) - settings.js: Lifetime-km-Balken mit Meilenstein-Markierungen bei 100/500/1000/5000 km - app.js + index.html: personality-Seite registriert
This commit is contained in:
parent
a4e97348ed
commit
0fdc32eaf4
5 changed files with 601 additions and 27 deletions
|
|
@ -131,6 +131,20 @@ CATEGORIES = [
|
|||
("platin", 30, "Schneewolf"),
|
||||
],
|
||||
},
|
||||
{
|
||||
"id": "km_lebenswerk",
|
||||
"name": "Kilometer-Lebenswerk",
|
||||
"emoji": "🐾",
|
||||
"metrik": "gesamt_km_lebenswerk",
|
||||
"einheit": " km",
|
||||
"icon": "path",
|
||||
"stufen": [
|
||||
("bronze", 100, "100-km-Club"),
|
||||
("silber", 500, "500-km-Wanderer"),
|
||||
("gold", 1000, "Tausend-km-Held"),
|
||||
("platin", 5000, "Ultraläufer"),
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
# Flat-Liste aller Badge-IDs für DB-Kompatibilität
|
||||
|
|
@ -222,14 +236,15 @@ def check_and_award(user_id: int, conn):
|
|||
""", (user_id,)).fetchone()
|
||||
|
||||
metrics = {
|
||||
"total_km": stats["total_km"] if stats else 0,
|
||||
"routen": stats["routen"] if stats else 0,
|
||||
"pois": stats["pois"] if stats else 0,
|
||||
"streak": (streak_row["current_streak"] if streak_row else 0),
|
||||
"wiki_fotos": stats["wiki_fotos"] if stats else 0,
|
||||
"wetter_tapfer_score": wetter_row["cnt"] if wetter_row else 0,
|
||||
"jahreszeiten_score": (jahreszeiten_row["jahreszeiten_score"] if jahreszeiten_row else 0),
|
||||
"schnee_eintraege": schnee_row["cnt"] if schnee_row else 0,
|
||||
"total_km": stats["total_km"] if stats else 0,
|
||||
"routen": stats["routen"] if stats else 0,
|
||||
"pois": stats["pois"] if stats else 0,
|
||||
"streak": (streak_row["current_streak"] if streak_row else 0),
|
||||
"wiki_fotos": stats["wiki_fotos"] if stats else 0,
|
||||
"wetter_tapfer_score": wetter_row["cnt"] if wetter_row else 0,
|
||||
"jahreszeiten_score": (jahreszeiten_row["jahreszeiten_score"] if jahreszeiten_row else 0),
|
||||
"schnee_eintraege": schnee_row["cnt"] if schnee_row else 0,
|
||||
"gesamt_km_lebenswerk": stats["total_km"] if stats else 0,
|
||||
}
|
||||
|
||||
earned = {r["badge_id"] for r in
|
||||
|
|
@ -336,14 +351,15 @@ async def my_achievements(user=Depends(get_current_user)):
|
|||
""", (stats["punkte"] if stats else 0,)).fetchone()
|
||||
|
||||
metrics = {
|
||||
"total_km": stats["total_km"] if stats else 0,
|
||||
"routen": stats["routen"] if stats else 0,
|
||||
"pois": stats["pois"] if stats else 0,
|
||||
"streak": (streak_row["current_streak"] if streak_row else 0),
|
||||
"wiki_fotos": stats["wiki_fotos"] if stats else 0,
|
||||
"wetter_tapfer_score": wetter_row["cnt"] if wetter_row else 0,
|
||||
"jahreszeiten_score": (jahreszeiten_row["jahreszeiten_score"] if jahreszeiten_row else 0),
|
||||
"schnee_eintraege": schnee_row["cnt"] if schnee_row else 0,
|
||||
"total_km": stats["total_km"] if stats else 0,
|
||||
"routen": stats["routen"] if stats else 0,
|
||||
"pois": stats["pois"] if stats else 0,
|
||||
"streak": (streak_row["current_streak"] if streak_row else 0),
|
||||
"wiki_fotos": stats["wiki_fotos"] if stats else 0,
|
||||
"wetter_tapfer_score": wetter_row["cnt"] if wetter_row else 0,
|
||||
"jahreszeiten_score": (jahreszeiten_row["jahreszeiten_score"] if jahreszeiten_row else 0),
|
||||
"schnee_eintraege": schnee_row["cnt"] if schnee_row else 0,
|
||||
"gesamt_km_lebenswerk": stats["total_km"] if stats else 0,
|
||||
}
|
||||
|
||||
# Kategorien mit aktuellem Tier + Fortschritt aufbauen
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue