Refactor notification structure in EventsWorker: Simplify the JSON notification format by separating the value object and ensuring it only contains relevant data without translations. Update action string for money changes to include specific event titles, enhancing clarity for frontend access.
This commit is contained in:
@@ -706,36 +706,35 @@ impl EventsWorker {
|
||||
|
||||
// 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_percent = money_change_info.and_then(|e| e.get("percent").and_then(|v| v.as_f64()));
|
||||
let money_absolute = money_change_info.and_then(|e| e.get("absolute").and_then(|v| v.as_f64()));
|
||||
|
||||
// Frontend: `tr` ist der i18n-Key, Details liegen in `value` (Interpolation/Detailansicht)
|
||||
// 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": {
|
||||
"event_id": event.id,
|
||||
"event_type": "personal",
|
||||
"title": event.title,
|
||||
"description": event.description,
|
||||
"effects": effect_results
|
||||
}
|
||||
"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);
|
||||
}
|
||||
|
||||
// Character-Informationen (falls vorhanden)
|
||||
if let Some(cid) = top_character_id {
|
||||
notification_json["value"]["character_id"] = serde_json::json!(cid);
|
||||
value_obj["character_id"] = serde_json::json!(cid);
|
||||
}
|
||||
if let Some(fn_) = top_first_name {
|
||||
notification_json["value"]["character_first_name"] = serde_json::json!(fn_);
|
||||
value_obj["character_first_name"] = serde_json::json!(fn_);
|
||||
}
|
||||
if let Some(ln_) = top_last_name {
|
||||
notification_json["value"]["character_last_name"] = serde_json::json!(ln_);
|
||||
value_obj["character_last_name"] = serde_json::json!(ln_);
|
||||
}
|
||||
// Geld-Beträge direkt im value-Objekt für einfachen Frontend-Zugriff
|
||||
if let Some(percent) = money_percent {
|
||||
notification_json["value"]["money_change_percent"] = serde_json::json!(percent);
|
||||
}
|
||||
if let Some(absolute) = money_absolute {
|
||||
notification_json["value"]["money_change_absolute"] = serde_json::json!(absolute);
|
||||
|
||||
// Nur value setzen, wenn es nicht leer ist
|
||||
if !value_obj.as_object().unwrap().is_empty() {
|
||||
notification_json["value"] = value_obj;
|
||||
}
|
||||
|
||||
Self::notify_user(
|
||||
@@ -1163,6 +1162,8 @@ impl EventsWorker {
|
||||
conn: &mut DbConnection,
|
||||
user_id: i32,
|
||||
percent_change: f64,
|
||||
_event_id: &str,
|
||||
event_title: &str,
|
||||
) -> Result<f64, DbError> {
|
||||
// Hole aktuelles Geld
|
||||
conn.prepare("get_money", QUERY_GET_MONEY)?;
|
||||
@@ -1182,7 +1183,8 @@ impl EventsWorker {
|
||||
};
|
||||
|
||||
let change = current_money * (percent_change / 100.0);
|
||||
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);
|
||||
// Spezifischer action-String für money history (z.B. "Zufallsereignis: Unerwarteter Geldsegen")
|
||||
let action = format!("Zufallsereignis: {}", event_title);
|
||||
|
||||
// Verwende parametrisierte Queries für Sicherheit gegen SQL-Injection
|
||||
conn.prepare("update_money_event", QUERY_UPDATE_MONEY)?;
|
||||
|
||||
Reference in New Issue
Block a user