Refactor QUERY_GET_BEST_PRODUCTION SQL query in Worker: Improve readability and maintainability by restructuring the query with clearer aliases and consistent use of COALESCE. Enhance join conditions and ensure proper handling of character health, resulting in more accurate production worth calculations.

This commit is contained in:
Torsten Schulz (local)
2026-01-05 11:44:44 +01:00
parent 713504d3ab
commit 108ac6c82b
2 changed files with 90 additions and 19 deletions

View File

@@ -3,6 +3,7 @@ use std::collections::HashMap;
use crate::message_broker::MessageBroker;
use std::sync::atomic::Ordering;
use std::sync::Arc;
use std::sync::Mutex;
use std::time::{Duration, Instant};
use crate::db::ConnectionPool;
@@ -318,10 +319,36 @@ impl DirectorWorker {
conn.prepare("get_to_produce", QUERY_GET_BEST_PRODUCTION)?;
let rows = conn.execute("get_to_produce", &[&director.id, &director.branch_id])?;
if rows.is_empty() {
eprintln!(
"[DirectorWorker] Keine Produktionskandidaten für Director {} gefunden.",
director.id
);
// Debug: SQL-Vorschau nur gedrosselt loggen, damit wir die Query testen können
// ohne Log-Flut.
static LAST_EMPTY_PROD_LOG: Mutex<Option<Instant>> = Mutex::new(None);
let mut last = LAST_EMPTY_PROD_LOG.lock().unwrap();
let should_log = last
.map(|t| t.elapsed().as_secs() >= 60)
.unwrap_or(true);
if should_log {
// SQL ggf. kürzen, um Log-Flut zu vermeiden
let mut sql_preview = QUERY_GET_BEST_PRODUCTION.to_string();
const MAX_SQL_PREVIEW: usize = 1200;
if sql_preview.len() > MAX_SQL_PREVIEW {
sql_preview.truncate(MAX_SQL_PREVIEW);
sql_preview.push_str("");
}
eprintln!(
"[DirectorWorker] Keine Produktionskandidaten für Director {} (branch_id={}). Query (get_to_produce): {} | params: director_id={}, branch_id={}",
director.id,
director.branch_id,
sql_preview,
director.id,
director.branch_id
);
*last = Some(Instant::now());
} else {
eprintln!(
"[DirectorWorker] Keine Produktionskandidaten für Director {} gefunden.",
director.id
);
}
return Ok(());
}