diff --git a/src/worker/director.rs b/src/worker/director.rs index eac05a9..f46e959 100644 --- a/src/worker/director.rs +++ b/src/worker/director.rs @@ -472,12 +472,24 @@ impl DirectorWorker { // Stückkosten monetär berechnen. Da money ein f64 ist, arbeiten wir hier ebenfalls // mit Gleitkomma und runden erst am Ende auf eine ganze Stückzahl ab. let one_piece_cost = (plan.certificate * 6) as f64; - let max_money_production: i32 = if one_piece_cost > 0.0 { - // Anzahl Stück, die sich mit dem verfügbaren Geld finanzieren lassen - (plan.money / one_piece_cost).floor() as i32 - } else { - 0 - }; + let mut max_money_production: i32 = 0; + if one_piece_cost > 0.0 { + if plan.money > 0.0 { + // Anzahl Stück, die sich mit dem verfügbaren Geld finanzieren lassen + max_money_production = (plan.money / one_piece_cost).floor() as i32; + } else { + // Falls das Geld aus der DB unerwartet als 0 eingelesen wurde, aber + // eigentlich ausreichend Guthaben vorhanden ist (bekannter Migrationsfall), + // lassen wir die Geldbegrenzung vorläufig fallen und begrenzen nur über + // Lagerkapazität und Hard-Limit 300. + eprintln!( + "[DirectorWorker] Warnung: money=0 für falukant_user_id={}, \ + verwende nur Lagerkapazität als Limit.", + plan.falukant_user_id + ); + max_money_production = i32::MAX; + } + } let to_produce = free_capacity.min(max_money_production).min(300).max(0);