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.

This commit is contained in:
Torsten Schulz (local)
2025-12-08 11:51:10 +01:00
parent 0198bcd603
commit 2948586041

View File

@@ -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<f64, DbError> {
// 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<i32, DbError> {
) -> 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<i32, DbError> {
) -> 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(