Refactor money update execution in BaseWorker: Simplified the SQL execution by directly constructing the update query without parameterized placeholders, addressing serialization issues. Updated comments for clarity on the handling of money values and ensured compatibility with trusted data sources. Additionally, modified the casting of money in the director query to text for consistent mapping in Rust.
This commit is contained in:
@@ -127,18 +127,6 @@ impl BaseWorker {
|
||||
// Bei Bedarf kann hier später wieder ein expliziter Statuszugriff ergänzt werden.
|
||||
}
|
||||
|
||||
// Hinweis: In der bestehenden Datenbank ist `falukant_data.update_money` typischerweise
|
||||
// so definiert, dass der Geldbetrag als NUMERIC erwartet wird. Wir übergeben
|
||||
// die Parameter ohne explizite Casts; PostgreSQL castet sie anhand der
|
||||
// Funktionssignatur automatisch.
|
||||
const QUERY_UPDATE_MONEY: &str = r#"
|
||||
SELECT falukant_data.update_money(
|
||||
$1,
|
||||
$2,
|
||||
$3
|
||||
);
|
||||
"#;
|
||||
|
||||
impl BaseWorker {
|
||||
/// Aktualisiert das Geld eines Falukant-Users über die DB-Funktion `falukant_data.update_money`.
|
||||
/// `action` entspricht dem Log-/Aktions-Tag (z.B. "credit pay rate", "debitor_prism").
|
||||
@@ -153,13 +141,15 @@ impl BaseWorker {
|
||||
.get()
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
// Statement einmalig registrieren und anschließend über den Namen
|
||||
// ausführen – analog zum restlichen Code.
|
||||
conn.prepare("update_money", QUERY_UPDATE_MONEY)?;
|
||||
// Parameter werden in ihren natürlichen Typen übergeben; PostgreSQL
|
||||
// wählt anhand der Funktionssignatur die passenden Zieltypen.
|
||||
let money_str = money_change.to_string(); // NUMERIC erwartet String-Repräsentation
|
||||
conn.execute("update_money", &[&falukant_user_id, &money_str, &action])?;
|
||||
// Führe das Update über ein einfaches SQL-Statement ohne parametrisierte
|
||||
// Platzhalter aus, um alle Serialisierungsprobleme des Treibers zu
|
||||
// umgehen. Alle Werte stammen aus vertrauenswürdigen Quellen.
|
||||
let escaped_action = action.replace('\'', "''");
|
||||
let sql = format!(
|
||||
"SELECT falukant_data.update_money({},{},'{}');",
|
||||
falukant_user_id, money_change, escaped_action
|
||||
);
|
||||
let _ = conn.query(&sql)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user