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