From 63a89588ac0373a7dac0221160d76d1278c0ab59 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 15 Jan 2026 13:27:30 +0100 Subject: [PATCH] Refactor event notification handling in EventsWorker: Simplify notification creation by removing unnecessary value object and directly incorporating character information into the notification JSON. Add early exit for events with no effects, improving clarity and efficiency in event processing. --- src/worker/events.rs | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/src/worker/events.rs b/src/worker/events.rs index ca4819f..c96cfd6 100644 --- a/src/worker/events.rs +++ b/src/worker/events.rs @@ -704,37 +704,32 @@ impl EventsWorker { (None, None) }; - // 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_absolute = money_change_info.and_then(|e| e.get("absolute").and_then(|v| v.as_f64())); + // Keine Benachrichtigung erstellen, wenn kein Effekt angewendet wurde + if effect_results.is_empty() { + eprintln!( + "[EventsWorker] Persönliches Ereignis '{}' für Spieler {} übersprungen (keine Effekte)", + event.id, user_id + ); + return Ok(()); + } - // Frontend: `tr` ist der i18n-Key, `value` enthält nur die Daten (ohne deutsche Übersetzungen) + // Baue die Benachrichtigung gemäß EVENT_JSON_MESSAGES.md Struktur let mut notification_json = serde_json::json!({ - "tr": format!("random_event.{}", event.id) + "tr": format!("random_event.{}", event.id), + "event_id": event.id, + "event_type": "personal", + "effects": effect_results }); - // 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 { - value_obj["character_id"] = serde_json::json!(cid); + notification_json["character_id"] = serde_json::json!(cid); } if let Some(fn_) = top_first_name { - value_obj["character_first_name"] = serde_json::json!(fn_); + notification_json["character_first_name"] = serde_json::json!(fn_); } if let Some(ln_) = top_last_name { - value_obj["character_last_name"] = serde_json::json!(ln_); - } - - // Nur value setzen, wenn es nicht leer ist - if !value_obj.as_object().unwrap().is_empty() { - notification_json["value"] = value_obj; + notification_json["character_last_name"] = serde_json::json!(ln_); } Self::notify_user(