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.

This commit is contained in:
Torsten Schulz (local)
2026-01-15 13:27:30 +01:00
parent f32c4b1456
commit 63a89588ac

View File

@@ -704,37 +704,32 @@ impl EventsWorker {
(None, None) (None, None)
}; };
// Extrahiere Geld-Beträge aus Effekten (für Diebstahl/Geldsegen) // Keine Benachrichtigung erstellen, wenn kein Effekt angewendet wurde
let money_change_info = effect_results.iter().find(|e| e.get("type") == Some(&json!("money_change"))); if effect_results.is_empty() {
let money_absolute = money_change_info.and_then(|e| e.get("absolute").and_then(|v| v.as_f64())); eprintln!(
"[EventsWorker] Persönliches Ereignis '{}' für Spieler {} übersprungen (keine Effekte)",
// Frontend: `tr` ist der i18n-Key, `value` enthält nur die Daten (ohne deutsche Übersetzungen) event.id, user_id
let mut notification_json = serde_json::json!({ );
"tr": format!("random_event.{}", event.id) return Ok(());
});
// 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);
} }
// Baue die Benachrichtigung gemäß EVENT_JSON_MESSAGES.md Struktur
let mut notification_json = serde_json::json!({
"tr": format!("random_event.{}", event.id),
"event_id": event.id,
"event_type": "personal",
"effects": effect_results
});
// Character-Informationen (falls vorhanden) // Character-Informationen (falls vorhanden)
if let Some(cid) = top_character_id { 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 { 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 { if let Some(ln_) = top_last_name {
value_obj["character_last_name"] = serde_json::json!(ln_); notification_json["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;
} }
Self::notify_user( Self::notify_user(