Refactor money change handling in EventsWorker: Updated the logic for applying money changes to use the current money value for calculations, ensuring accurate adjustments. Introduced a new method to retrieve the current money of a user, enhancing error handling and improving the overall clarity of the code.

This commit is contained in:
Torsten Schulz (local)
2026-02-05 08:16:54 +01:00
parent deaf5ac6ca
commit 1e565e6dd9
2 changed files with 54 additions and 48 deletions

View File

@@ -514,13 +514,15 @@ impl EventsWorker {
} => {
if effect_roll < *probability {
let percent_change = rng.gen_range(*min_percent..=*max_percent);
if let Ok(absolute_change) = Self::apply_money_change(&mut conn, user_id, percent_change) {
effect_results.push(json!({
"type": "money_change",
"percent": percent_change,
"absolute": absolute_change
}));
}
let current_money = Self::get_current_money(&mut conn, user_id).unwrap_or(0.0);
let computed_change = current_money * (percent_change / 100.0);
let absolute_change = Self::apply_money_change(&mut conn, user_id, percent_change)
.unwrap_or(computed_change);
effect_results.push(json!({
"type": "money_change",
"percent": percent_change,
"absolute": absolute_change
}));
}
}
EventEffect::StorageCapacityChange {
@@ -1003,28 +1005,29 @@ impl EventsWorker {
// Hilfsfunktionen zum Anwenden von Effekten
/// Liefert das aktuelle Geld des Spielers (für Events, z. B. Anzeige der Diebstahlhöhe).
fn get_current_money(conn: &mut DbConnection, user_id: i32) -> Result<f64, DbError> {
conn.prepare("get_money", QUERY_GET_MONEY)?;
let rows = conn.execute("get_money", &[&user_id])?;
let current_money: Option<f64> = rows
.first()
.and_then(|r| r.get("money"))
.and_then(|v| v.parse::<f64>().ok());
match current_money {
Some(m) => Ok(m),
None => {
eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id);
Err(DbError::new("Spieler nicht gefunden".to_string()))
}
}
}
fn apply_money_change(
conn: &mut DbConnection,
user_id: i32,
percent_change: f64,
) -> Result<f64, DbError> {
// Hole aktuelles Geld
conn.prepare("get_money", QUERY_GET_MONEY)?;
let rows = conn.execute("get_money", &[&user_id])?;
let current_money: Option<f64> = rows
.first()
.and_then(|r| r.get("money"))
.and_then(|v| v.parse::<f64>().ok());
let current_money = match current_money {
Some(m) => m,
None => {
eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id);
return Err(DbError::new("Spieler nicht gefunden".to_string()));
}
};
let current_money = Self::get_current_money(conn, user_id)?;
let change = current_money * (percent_change / 100.0);
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);

View File

@@ -514,13 +514,15 @@ impl EventsWorker {
} => {
if effect_roll < *probability {
let percent_change = rng.gen_range(*min_percent..=*max_percent);
if let Ok(absolute_change) = Self::apply_money_change(&mut conn, user_id, percent_change) {
effect_results.push(json!({
"type": "money_change",
"percent": percent_change,
"absolute": absolute_change
}));
}
let current_money = Self::get_current_money(&mut conn, user_id).unwrap_or(0.0);
let computed_change = current_money * (percent_change / 100.0);
let absolute_change = Self::apply_money_change(&mut conn, user_id, percent_change)
.unwrap_or(computed_change);
effect_results.push(json!({
"type": "money_change",
"percent": percent_change,
"absolute": absolute_change
}));
}
}
EventEffect::StorageCapacityChange {
@@ -1007,28 +1009,29 @@ impl EventsWorker {
// Hilfsfunktionen zum Anwenden von Effekten
/// Liefert das aktuelle Geld des Spielers (für Events, z. B. Anzeige der Diebstahlhöhe).
fn get_current_money(conn: &mut DbConnection, user_id: i32) -> Result<f64, DbError> {
conn.prepare("get_money", QUERY_GET_MONEY)?;
let rows = conn.execute("get_money", &[&user_id])?;
let current_money: Option<f64> = rows
.first()
.and_then(|r| r.get("money"))
.and_then(|v| v.parse::<f64>().ok());
match current_money {
Some(m) => Ok(m),
None => {
eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id);
Err(DbError::new("Spieler nicht gefunden".to_string()))
}
}
}
fn apply_money_change(
conn: &mut DbConnection,
user_id: i32,
percent_change: f64,
) -> Result<f64, DbError> {
// Hole aktuelles Geld
conn.prepare("get_money", QUERY_GET_MONEY)?;
let rows = conn.execute("get_money", &[&user_id])?;
let current_money: Option<f64> = rows
.first()
.and_then(|r| r.get("money"))
.and_then(|v| v.parse::<f64>().ok());
let current_money = match current_money {
Some(m) => m,
None => {
eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id);
return Err(DbError::new("Spieler nicht gefunden".to_string()));
}
};
let current_money = Self::get_current_money(conn, user_id)?;
let change = current_money * (percent_change / 100.0);
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);