diff --git a/src/worker/base.rs b/src/worker/base.rs index 36aa61d..2ed2707 100644 --- a/src/worker/base.rs +++ b/src/worker/base.rs @@ -128,14 +128,14 @@ impl BaseWorker { } // Hinweis: In der bestehenden Datenbank ist `falukant_data.update_money` typischerweise -// so definiert, dass der Geldbetrag als NUMERIC erwartet wird. Wir casten den -// zweiten Parameter in SQL explizit nach `numeric`; alle Parameter werden als -// Strings übergeben und in SQL auf die Zieltypen gecastet. +// 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::int4, - $2::numeric, - $3::text + $1, + $2, + $3 ); "#; @@ -156,16 +156,10 @@ impl BaseWorker { // Statement einmalig registrieren und anschließend über den Namen // ausführen – analog zum restlichen Code. conn.prepare("update_money", QUERY_UPDATE_MONEY)?; - // Zur Umgehung von Serialisierungsproblemen werden alle Parameter als - // Strings übergeben und in SQL auf die erwarteten Typen gecastet. - let user_id_str = falukant_user_id.to_string(); - let money_str = money_change.to_string(); - let action_str = action.to_string(); - - conn.execute( - "update_money", - &[&user_id_str, &money_str, &action_str], - )?; + // 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])?; Ok(()) } diff --git a/src/worker/director.rs b/src/worker/director.rs index 201b76e..4aa6769 100644 --- a/src/worker/director.rs +++ b/src/worker/director.rs @@ -82,7 +82,10 @@ const QUERY_GET_DIRECTORS: &str = r#" const QUERY_GET_BEST_PRODUCTION: &str = r#" SELECT fdu.id falukant_user_id, - fdu.money, + -- Geld explizit in einen numerischen Wert casten, damit das Mapping im + -- Rust-Code zuverlässig funktioniert (kein Sonderformat des PostgreSQL- + -- Typs `money` o.Ä.). + CAST(fdu.money AS numeric) AS money, fdu.certificate, ftp.id product_id, ftp.label_tr,