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)
|
(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(
|
||||||
|
|||||||
Reference in New Issue
Block a user