Admin: POI-Statistik erweitert (Nutzer-POIs nach Typ + Labels), SW by-v1099

- /admin/stats liefert jetzt zusätzlich user_poi_total + user_poi_by_type
  (User-POIs aus user_map_pois aufgeschlüsselt, komma-separierte Typen
  werden einzeln gezählt)
- Admin System-Tab zeigt zwei Karten:
  · OSM-Cache nach Typ (was Overpass-Cache enthält)
  · Nutzer-POIs nach Typ (selbst erstellte Marker)
- Interne Typ-Namen werden in lokalisierte Labels gemappt
  (tierarzt → Tierarzt, hundesalon → Hundesalon, etc.)
- Header der Karten zeigt Gesamtzahl inline
This commit is contained in:
rene 2026-05-26 21:37:35 +02:00
parent cc4f030fd0
commit 15d319fbd5
6 changed files with 57 additions and 19 deletions

View file

@ -211,6 +211,16 @@ async def stats(user=Depends(require_mod)):
"SELECT type, COUNT(*) FROM osm_pois GROUP BY type ORDER BY 2 DESC"
).fetchall()
}
# User-erstellte POIs nach Typ (type-Spalte kann komma-separiert sein wie 'freilauf,treffpunkt')
user_poi_total = conn.execute("SELECT COUNT(*) FROM user_map_pois").fetchone()[0]
user_poi_by_type = {}
for row in conn.execute("SELECT type FROM user_map_pois").fetchall():
for t in (row[0] or "").split(","):
t = t.strip()
if t:
user_poi_by_type[t] = user_poi_by_type.get(t, 0) + 1
# absteigend sortieren
user_poi_by_type = dict(sorted(user_poi_by_type.items(), key=lambda x: x[1], reverse=True))
# KI-Nutzung
try:
@ -312,6 +322,8 @@ async def stats(user=Depends(require_mod)):
"osm_total": osm_total,
"osm_tiles": osm_tiles,
"osm_by_type": osm_by_type,
"user_poi_total": user_poi_total,
"user_poi_by_type": user_poi_by_type,
"ki_today": ki_today,
"ki_week": ki_week,
"ki_month": ki_month,