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:
@@ -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()));
|
||||
|
||||
// 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-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);
|
||||
// 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(());
|
||||
}
|
||||
|
||||
// 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)
|
||||
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(
|
||||
|
||||
Reference in New Issue
Block a user