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)?;