Wiki-Foto-System: Gallery-Flow, Community-Fotos, Wiki-Fotos-Badge
- review_submission: Fotos ins gallery/-Verzeichnis statt breeds/ kopieren; foto_url der Rasse nur überschreiben wenn noch keins vorhanden (Erstbild) - Rassen-Detail-API: user_fotos (approved submissions) mitliefern - Rassen-Listen-API: user_foto-Subquery als Fallback wenn foto_url leer - achievements: neue Badge-Kategorie "Wiki-Fotos" (bronze 1, silber 3, gold 10) mit wiki_fotos-Metrik in check_and_award und my_achievements - Badge-Check + Push nach Foto-Approval - wiki.js: Karten-Bild nutzt r.foto_url || r.user_foto - wiki.js: Detail-Ansicht zeigt Community-Foto-Galerie (scrollbar, clickable) - Dockerfile: breeds/gallery + breeds/submissions im Image anlegen - SW by-v366, APP_VER 351
This commit is contained in:
parent
b608d5635f
commit
6064a1d750
6 changed files with 111 additions and 43 deletions
|
|
@ -80,6 +80,18 @@ CATEGORIES = [
|
|||
("diamant", 365, "Ein ganzes Jahr"),
|
||||
],
|
||||
},
|
||||
{
|
||||
"id": "wiki_fotos",
|
||||
"name": "Wiki-Fotos",
|
||||
"emoji": "📸",
|
||||
"metrik": "wiki_fotos",
|
||||
"einheit": " Foto(s)",
|
||||
"stufen": [
|
||||
("bronze", 1, "Erster Klick"),
|
||||
("silber", 3, "Foto-Fan"),
|
||||
("gold", 10, "Wiki-Fotograf"),
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
# Flat-Liste aller Badge-IDs für DB-Kompatibilität
|
||||
|
|
@ -129,19 +141,21 @@ def check_and_award(user_id: int, conn):
|
|||
COALESCE((SELECT SUM(w.walked_km) FROM route_walks w WHERE w.user_id=?), 0),
|
||||
1) AS total_km,
|
||||
(SELECT COUNT(*) FROM routes r WHERE r.user_id=? AND r.is_valid=1) AS routen,
|
||||
(SELECT COUNT(*) FROM user_map_pois p WHERE p.user_id=?) AS pois
|
||||
(SELECT COUNT(*) FROM user_map_pois p WHERE p.user_id=?) AS pois,
|
||||
(SELECT COUNT(*) FROM wiki_foto_submissions WHERE user_id=? AND status='approved') AS wiki_fotos
|
||||
FROM (SELECT 1)
|
||||
""", (user_id, user_id, user_id, user_id)).fetchone()
|
||||
""", (user_id, user_id, user_id, user_id, user_id)).fetchone()
|
||||
|
||||
streak_row = conn.execute(
|
||||
"SELECT current_streak FROM users WHERE id=?", (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),
|
||||
"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,
|
||||
}
|
||||
|
||||
earned = {r["badge_id"] for r in
|
||||
|
|
@ -183,6 +197,7 @@ async def my_achievements(user=Depends(get_current_user)):
|
|||
1) AS total_km,
|
||||
(SELECT COUNT(*) FROM routes r WHERE r.user_id=? AND r.is_valid=1) AS routen,
|
||||
(SELECT COUNT(*) FROM user_map_pois p WHERE p.user_id=?) AS pois,
|
||||
(SELECT COUNT(*) FROM wiki_foto_submissions WHERE user_id=? AND status='approved') AS wiki_fotos,
|
||||
ROUND(
|
||||
COALESCE((SELECT SUM(r.distanz_km) FROM routes r WHERE r.user_id=? AND r.is_valid=1), 0) +
|
||||
COALESCE((SELECT SUM(w.walked_km) FROM route_walks w WHERE w.user_id=?), 0),
|
||||
|
|
@ -190,7 +205,7 @@ async def my_achievements(user=Depends(get_current_user)):
|
|||
+ (SELECT COUNT(*) FROM user_map_pois p WHERE p.user_id=?)*5
|
||||
+ (SELECT COUNT(*) FROM routes r WHERE r.user_id=? AND r.is_valid=1)*10 AS punkte
|
||||
FROM (SELECT 1)
|
||||
""", (uid, uid, uid, uid, uid, uid, uid, uid)).fetchone()
|
||||
""", (uid, uid, uid, uid, uid, uid, uid, uid, uid)).fetchone()
|
||||
|
||||
streak_row = conn.execute(
|
||||
"SELECT current_streak, max_streak FROM users WHERE id=?", (uid,)
|
||||
|
|
@ -215,10 +230,11 @@ 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),
|
||||
"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,
|
||||
}
|
||||
|
||||
# Kategorien mit aktuellem Tier + Fortschritt aufbauen
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue