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:
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user