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