From 29485860415f6bef987b8a6fd208d8e07f35c875 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 8 Dec 2025 11:51:10 +0100 Subject: [PATCH] Enhance event effect handling in EventsWorker: Updated money change, storage capacity change, and house quality change methods to return absolute values and percentages. Improved JSON response structure for event effects, enhancing clarity and data accuracy in event processing. --- src/worker/events.rs | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/worker/events.rs b/src/worker/events.rs index a433165..43c5b88 100644 --- a/src/worker/events.rs +++ b/src/worker/events.rs @@ -450,11 +450,13 @@ impl EventsWorker { } => { if effect_roll < *probability { let percent_change = rng.gen_range(*min_percent..=*max_percent); - Self::apply_money_change(&mut conn, user_id, percent_change)?; - effect_results.push(json!({ - "type": "money_change", - "percent": percent_change - })); + 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 + })); + } } } EventEffect::StorageCapacityChange { @@ -829,7 +831,7 @@ impl EventsWorker { max_percent, } => { if effect_roll < *probability { - if let Ok(affected_stocks) = Self::apply_regional_storage_capacity_change( + if let Ok((affected_stocks, percent_change)) = Self::apply_regional_storage_capacity_change( &mut conn, region_id, *min_percent, @@ -838,6 +840,7 @@ impl EventsWorker { ) { effect_results.push(json!({ "type": "storage_capacity_change", + "percent": percent_change, "affected_stocks": affected_stocks, })); } @@ -849,7 +852,7 @@ impl EventsWorker { max_change, } => { if effect_roll < *probability { - if let Ok(affected_houses) = Self::apply_regional_house_quality_change( + if let Ok((affected_houses, quality_change)) = Self::apply_regional_house_quality_change( &mut conn, region_id, *min_change, @@ -858,6 +861,7 @@ impl EventsWorker { ) { effect_results.push(json!({ "type": "house_quality_change", + "change": quality_change, "affected_houses": affected_houses, })); } @@ -927,7 +931,7 @@ impl EventsWorker { conn: &mut DbConnection, user_id: i32, percent_change: f64, - ) -> Result<(), DbError> { + ) -> Result { // Hole aktuelles Geld const QUERY_GET_MONEY: &str = r#" SELECT money @@ -947,7 +951,7 @@ impl EventsWorker { Some(m) => m, None => { eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id); - return Ok(()); + return Err(DbError::new("Spieler nicht gefunden".to_string())); } }; @@ -962,7 +966,7 @@ impl EventsWorker { ); let _ = conn.query(&sql)?; - Ok(()) + Ok(change) } fn apply_storage_capacity_change( @@ -1034,7 +1038,7 @@ impl EventsWorker { min_percent: f64, max_percent: f64, rng: &mut impl Rng, - ) -> Result { + ) -> Result<(i32, f64), DbError> { // Hole alle Stocks in der Region const QUERY_GET_REGION_STOCKS: &str = r#" SELECT s.id AS stock_id, s.quantity AS current_capacity @@ -1051,7 +1055,7 @@ impl EventsWorker { "[EventsWorker] Keine Stocks in Region {} gefunden", region_id ); - return Ok(0); + return Ok((0, 0.0)); } // Berechne die prozentuale Änderung @@ -1093,7 +1097,7 @@ impl EventsWorker { region_id, percent_change, affected_stocks ); - Ok(affected_stocks) + Ok((affected_stocks, percent_change)) } fn apply_regional_house_quality_change( @@ -1102,7 +1106,7 @@ impl EventsWorker { min_change: i32, max_change: i32, rng: &mut impl Rng, - ) -> Result { + ) -> Result<(i32, i32), DbError> { // Hole alle Häuser in der Region const QUERY_GET_REGION_HOUSES: &str = r#" SELECT uh.id AS house_id, @@ -1128,7 +1132,7 @@ impl EventsWorker { "[EventsWorker] Keine Häuser in Region {} gefunden", region_id ); - return Ok(0); + return Ok((0, 0)); } // Berechne die Änderung @@ -1166,7 +1170,7 @@ impl EventsWorker { region_id, quality_change, affected_houses ); - Ok(affected_houses) + Ok((affected_houses, quality_change)) } fn apply_weather_change(