From 408221ffb4f5716b025fbbd06bf9dc209f57f1f6 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 12 Jan 2026 16:35:47 +0100 Subject: [PATCH] Refactor notification structure in EventsWorker: Simplify the JSON notification format by separating the value object and ensuring it only contains relevant data without translations. Update action string for money changes to include specific event titles, enhancing clarity for frontend access. --- src/worker/events.rs | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/worker/events.rs b/src/worker/events.rs index a3569fb..5cf0db5 100644 --- a/src/worker/events.rs +++ b/src/worker/events.rs @@ -706,36 +706,35 @@ impl EventsWorker { // Extrahiere Geld-Beträge aus Effekten (für Diebstahl/Geldsegen) let money_change_info = effect_results.iter().find(|e| e.get("type") == Some(&json!("money_change"))); - let money_percent = money_change_info.and_then(|e| e.get("percent").and_then(|v| v.as_f64())); let money_absolute = money_change_info.and_then(|e| e.get("absolute").and_then(|v| v.as_f64())); - // Frontend: `tr` ist der i18n-Key, Details liegen in `value` (Interpolation/Detailansicht) + // Frontend: `tr` ist der i18n-Key, `value` enthält nur die Daten (ohne deutsche Übersetzungen) let mut notification_json = serde_json::json!({ - "tr": format!("random_event.{}", event.id), - "value": { - "event_id": event.id, - "event_type": "personal", - "title": event.title, - "description": event.description, - "effects": effect_results - } + "tr": format!("random_event.{}", event.id) }); + // value-Objekt: nur die relevanten Daten, keine deutschen Übersetzungen + let mut value_obj = serde_json::json!({}); + + // Geld-Beträge: wichtigster Wert für Geldsegen/Diebstahl + if let Some(absolute) = money_absolute { + value_obj["money_change_absolute"] = serde_json::json!(absolute); + } + + // Character-Informationen (falls vorhanden) if let Some(cid) = top_character_id { - notification_json["value"]["character_id"] = serde_json::json!(cid); + value_obj["character_id"] = serde_json::json!(cid); } if let Some(fn_) = top_first_name { - notification_json["value"]["character_first_name"] = serde_json::json!(fn_); + value_obj["character_first_name"] = serde_json::json!(fn_); } if let Some(ln_) = top_last_name { - notification_json["value"]["character_last_name"] = serde_json::json!(ln_); + value_obj["character_last_name"] = serde_json::json!(ln_); } - // Geld-Beträge direkt im value-Objekt für einfachen Frontend-Zugriff - if let Some(percent) = money_percent { - notification_json["value"]["money_change_percent"] = serde_json::json!(percent); - } - if let Some(absolute) = money_absolute { - notification_json["value"]["money_change_absolute"] = serde_json::json!(absolute); + + // Nur value setzen, wenn es nicht leer ist + if !value_obj.as_object().unwrap().is_empty() { + notification_json["value"] = value_obj; } Self::notify_user( @@ -1163,6 +1162,8 @@ impl EventsWorker { conn: &mut DbConnection, user_id: i32, percent_change: f64, + _event_id: &str, + event_title: &str, ) -> Result { // Hole aktuelles Geld conn.prepare("get_money", QUERY_GET_MONEY)?; @@ -1182,7 +1183,8 @@ impl EventsWorker { }; let change = current_money * (percent_change / 100.0); - let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change); + // Spezifischer action-String für money history (z.B. "Zufallsereignis: Unerwarteter Geldsegen") + let action = format!("Zufallsereignis: {}", event_title); // Verwende parametrisierte Queries für Sicherheit gegen SQL-Injection conn.prepare("update_money_event", QUERY_UPDATE_MONEY)?;