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)",
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!({ 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) // 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(