Refactor money update logic in BaseWorker: Simplified the SQL execution by removing named prepared statement caches to avoid signature conflicts during schema changes. Updated comments for clarity on the handling of money change as a numeric type, ensuring compatibility with the database.

This commit is contained in:
Torsten Schulz (local)
2025-12-01 10:59:02 +01:00
parent d98620ea06
commit 0825c05c31

View File

@@ -128,9 +128,9 @@ impl BaseWorker {
} }
// Hinweis: In der bestehenden Datenbank ist `falukant_data.update_money` typischerweise // Hinweis: In der bestehenden Datenbank ist `falukant_data.update_money` typischerweise
// so definiert, dass der Geldbetrag als NUMERIC erwartet wird. Um keine // so definiert, dass der Geldbetrag als NUMERIC erwartet wird. Wir casten den
// Signaturkonflikte zu erzeugen, casten wir den zweiten Parameter in SQL nach // zweiten Parameter in SQL nach `numeric`, damit der Aufruf auch mit einem
// `numeric` und übergeben den Wert als Text. // f64-Wert funktioniert.
const QUERY_UPDATE_MONEY: &str = r#" const QUERY_UPDATE_MONEY: &str = r#"
SELECT falukant_data.update_money( SELECT falukant_data.update_money(
$1::int4, $1::int4,
@@ -148,22 +148,17 @@ impl BaseWorker {
money_change: f64, money_change: f64,
action: &str, action: &str,
) -> Result<(), DbError> { ) -> Result<(), DbError> {
use postgres::types::ToSql;
let mut conn = self let mut conn = self
.pool .pool
.get() .get()
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?; .map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
conn.prepare("update_money", QUERY_UPDATE_MONEY)?; // Direkter Aufruf ohne benannte Prepared-Statement-Caches, um
// Signaturkonflikte bei Schemaänderungen zu vermeiden.
let p1: &(dyn ToSql + Sync) = &falukant_user_id; conn.execute(
// Als String übergeben, damit die DB ihn nach NUMERIC casten kann. QUERY_UPDATE_MONEY,
let money_str = money_change.to_string(); &[&falukant_user_id, &money_change, &action],
let p2: &(dyn ToSql + Sync) = &money_str; )?;
let p3: &(dyn ToSql + Sync) = &action;
conn.execute("update_money", &[p1, p2, p3])?;
Ok(()) Ok(())
} }