From b54d9fda99c19311955dd8ddd264727b73b75489 Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 16 May 2026 12:02:52 +0200 Subject: [PATCH] Fix: users.geburtstag Migration + Format TT.MM statt MM-DD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - database.py: ALTER TABLE users ADD COLUMN geburtstag TEXT (fehlte!) - profile.py: Validierung auf \d{2}\.\d{2} (TT.MM Format) - settings.js: Placeholder/Pattern auf TT.MM geändert - worlds.js: Birthday-Check auf DD.MM Format angepasst SW by-v1029, APP_VER 1029 --- backend/database.py | 6 ++++++ backend/main.py | 2 +- backend/routes/profile.py | 4 ++-- backend/static/js/app.js | 2 +- backend/static/js/pages/settings.js | 6 +++--- backend/static/js/worlds.js | 4 ++-- backend/static/sw.js | 2 +- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/backend/database.py b/backend/database.py index 8ba722f..6a90f38 100644 --- a/backend/database.py +++ b/backend/database.py @@ -2450,6 +2450,12 @@ def _migrate(conn_factory): except Exception: pass + try: + conn.execute("ALTER TABLE users ADD COLUMN geburtstag TEXT") + logger.info("Migration: users.geburtstag bereit.") + except Exception: + pass + def _seed_help_articles(conn): """Befüllt help_articles mit Starter-FAQs — nur wenn die Tabelle noch leer ist.""" diff --git a/backend/main.py b/backend/main.py index 7c32d41..5138abd 100644 --- a/backend/main.py +++ b/backend/main.py @@ -410,7 +410,7 @@ async def serve_media(path: str, request: _Request): raise _HE(404, "Nicht gefunden.") return _media_response(filepath) -APP_VER = "1028" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "1029" # muss mit APP_VER in app.js übereinstimmen @app.get("/.well-known/assetlinks.json") async def assetlinks(): diff --git a/backend/routes/profile.py b/backend/routes/profile.py index ad387bc..baa196c 100644 --- a/backend/routes/profile.py +++ b/backend/routes/profile.py @@ -68,8 +68,8 @@ async def update_profile(data: ProfileUpdate, user=Depends(get_current_user)): if "social_link" in fields and len(fields["social_link"]) > 120: raise HTTPException(400, "social_link darf maximal 120 Zeichen lang sein.") if "geburtstag" in fields and fields["geburtstag"]: - if not re.fullmatch(r"\d{2}-\d{2}", fields["geburtstag"]): - raise HTTPException(400, "geburtstag muss im Format MM-DD sein (z.B. 03-15).") + if not re.fullmatch(r"\d{2}\.\d{2}", fields["geburtstag"]): + raise HTTPException(400, "geburtstag muss im Format TT.MM sein (z.B. 16.05).") if not fields: return _load_user(user["id"]) diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 489d3a8..a8cbe7c 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '1028'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '1029'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; // Cache-Bust-Parameter nach Update-Reload sofort entfernen diff --git a/backend/static/js/pages/settings.js b/backend/static/js/pages/settings.js index c2906d8..ebfe79e 100644 --- a/backend/static/js/pages/settings.js +++ b/backend/static/js/pages/settings.js @@ -1186,10 +1186,10 @@ window.Page_settings = (() => {
-
Wird nur für Geburtstagsgrüße in der App verwendet.
diff --git a/backend/static/js/worlds.js b/backend/static/js/worlds.js index 903b90c..bb0201f 100644 --- a/backend/static/js/worlds.js +++ b/backend/static/js/worlds.js @@ -1096,8 +1096,8 @@ window.Worlds = (() => { const dayStr = new Date().toLocaleDateString('de-DE', { weekday:'long', day:'numeric', month:'long' }); // User-Geburtstag heute? - const _todayMmDd = (() => { const d = new Date(); return String(d.getMonth()+1).padStart(2,'0')+'-'+String(d.getDate()).padStart(2,'0'); })(); - const userBdayToday = user?.geburtstag && user.geburtstag === _todayMmDd; + const _todayDdMm = (() => { const d = new Date(); return String(d.getDate()).padStart(2,'0')+'.'+String(d.getMonth()+1).padStart(2,'0'); })(); + const userBdayToday = user?.geburtstag && user.geburtstag === _todayDdMm; const greet = userBdayToday ? `Herzlichen Glückwunsch` : (hour < 5 ? 'Gute Nacht' : hour < 12 ? 'Guten Morgen' : hour < 18 ? 'Hallo' : 'Guten Abend'); diff --git a/backend/static/sw.js b/backend/static/sw.js index fdd58d5..6d31f3f 100644 --- a/backend/static/sw.js +++ b/backend/static/sw.js @@ -3,7 +3,7 @@ Offline-Cache + Push Notifications + Tile-Cache ============================================================ */ -const CACHE_VERSION = 'by-v1028'; +const CACHE_VERSION = 'by-v1029'; const CACHE_STATIC = `${CACHE_VERSION}-static`; const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache