Sprint 15: Zeitzone-Fix, Gewichts-Sync, Öffnungszeiten, KI-Bericht, POI-Moderation — SW by-v432, APP_VER 411
- client_time: Browser-Lokalzeit bei allen Creates mitschicken (Tagebuch, Notizen, Forum, Verlorener Hund, Routen) — kein UTC-Versatz mehr bei Einträgen - Gewicht-Sync: health typ=gewicht schreibt dogs.gewicht_kg, einmalige Migration - Praxen: opening_hours + lat/lon/osm_id in tieraerzte-Tabelle, OSM-Nearby-Lookup, Öffnungszeiten in Karte und Detailansicht - KI-Gesundheitsbericht: alle 2 Wochen automatisch, ki_health_reports-Tabelle, Frontend-Banner mit Archiv (letzten 5 Berichte) - POI-Korrekturen: User schlägt Öffnungszeiten-Änderung vor, Moderatoren-Tab genehmigt/lehnt ab, user_edited-Flag schützt vor Overpass-Überschreibung - timeutils.py: safe_client_time() zentral für alle Routen
This commit is contained in:
parent
679dbdd862
commit
06bd8525ed
21 changed files with 724 additions and 75 deletions
15
backend/timeutils.py
Normal file
15
backend/timeutils.py
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
"""Hilfsfunktionen für client-seitige Zeitstempel."""
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
def safe_client_time(client_time: str | None) -> str:
|
||||
"""Gibt client_time zurück falls valides ISO-Datetime, sonst UTC-Now.
|
||||
|
||||
Schützt gegen Injection: nur YYYY-MM-DD HH:MM[:SS] erlaubt.
|
||||
"""
|
||||
if client_time and re.match(
|
||||
r'^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2})?$', client_time
|
||||
):
|
||||
return client_time.replace('T', ' ')[:19]
|
||||
return datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
|
||||
Loading…
Add table
Add a link
Reference in a new issue