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

@ -101,9 +101,9 @@
</script>
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
<link rel="stylesheet" href="/css/design-system.css?v=1098">
<link rel="stylesheet" href="/css/layout.css?v=1098">
<link rel="stylesheet" href="/css/components.css?v=1098">
<link rel="stylesheet" href="/css/design-system.css?v=1099">
<link rel="stylesheet" href="/css/layout.css?v=1099">
<link rel="stylesheet" href="/css/components.css?v=1099">
</head>
<body>
@ -625,11 +625,11 @@
<div id="modal-container"></div>
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
<script src="/js/api.js?v=1098"></script>
<script src="/js/ui.js?v=1098"></script>
<script src="/js/app.js?v=1098"></script>
<script src="/js/worlds.js?v=1098"></script>
<script src="/js/offline-indicator.js?v=1098"></script>
<script src="/js/api.js?v=1099"></script>
<script src="/js/ui.js?v=1099"></script>
<script src="/js/app.js?v=1099"></script>
<script src="/js/worlds.js?v=1099"></script>
<script src="/js/offline-indicator.js?v=1099"></script>
<!-- Feature-Seiten werden lazy geladen -->

View file

@ -3,7 +3,7 @@
Router, State-Management, Navigation, Initialisierung.
============================================================ */
const APP_VER = '1098'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
const APP_VER = '1099'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt
window.APP_VER = APP_VER; // global verfügbar für andere Module (z.B. offline-indicator)
window.APP_VERSION = APP_VERSION;

View file

@ -652,17 +652,43 @@ window.Page_admin = (() => {
</div>` : ''}
</div>
<div class="card" style="padding:var(--space-4)">
<p style="font-size:var(--text-sm);font-weight:600;margin:0 0 var(--space-3)">OSM-Cache nach Typ</p>
<div style="display:flex;flex-direction:column;gap:var(--space-2)">
${Object.entries(s.osm_by_type).map(([type, count]) => `
${(() => {
const POI_LABELS = {
waste_basket: 'Mülleimer', dog_park: 'Hundewiese', drinking_water: 'Wasserstelle',
tierarzt: 'Tierarzt', hundesalon: 'Hundesalon', hundeschule: 'Hundeschule',
shop: 'Shop', restaurant: 'Café / Restaurant', bank: 'Sitzbank',
hotel: 'Hotel', freilauf: 'Freilauf', kotbeutel: 'Kotbeutel',
parkplatz: 'Parkplatz', treffpunkt: 'Treffpunkt', sonstiges: 'Sonstiges',
giftkoeder: 'Giftköder', gefahr: 'Gefahr',
};
const label = t => POI_LABELS[t] || t;
const row = ([type, count]) => `
<div style="display:flex;justify-content:space-between;font-size:var(--text-sm)">
<span style="color:var(--c-text-secondary)">${type}</span>
<span style="color:var(--c-text-secondary)">${label(type)}</span>
<span style="font-weight:600">${count.toLocaleString('de')}</span>
</div>
`).join('')}
</div>`;
const userByType = s.user_poi_by_type || {};
const userTotal = s.user_poi_total ?? 0;
return `
<div class="card" style="padding:var(--space-4)">
<p style="font-size:var(--text-sm);font-weight:600;margin:0 0 var(--space-3)">
OSM-Cache nach Typ <span style="color:var(--c-text-muted);font-weight:400"> ${(s.osm_total || 0).toLocaleString('de')} gecacht</span>
</p>
<div style="display:flex;flex-direction:column;gap:var(--space-2)">
${Object.entries(s.osm_by_type).map(row).join('')}
</div>
</div>
</div>
<div class="card" style="padding:var(--space-4)">
<p style="font-size:var(--text-sm);font-weight:600;margin:0 0 var(--space-3)">
Nutzer-POIs nach Typ <span style="color:var(--c-text-muted);font-weight:400"> ${userTotal.toLocaleString('de')} gesamt</span>
</p>
<div style="display:flex;flex-direction:column;gap:var(--space-2)">
${Object.keys(userByType).length
? Object.entries(userByType).map(row).join('')
: '<div style="color:var(--c-text-muted);font-size:var(--text-sm);text-align:center;padding:var(--space-2)">Noch keine Nutzer-POIs</div>'}
</div>
</div>`;
})()}
<!-- Social Media Tracking -->
<div class="card" style="padding:var(--space-4)">

View file

@ -4,7 +4,7 @@
============================================================ */
// ← EINZIGE Stelle für die Version — STATIC_ASSETS und CACHE_VERSION leiten sich ab
const VER = '1098';
const VER = '1099';
const CACHE_VERSION = `by-v${VER}`;
const CACHE_STATIC = `${CACHE_VERSION}-static`;
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten