Refactor change_falukant_user_money: Update parameter types for database call and enhance logging for better traceability
This commit is contained in:
@@ -158,76 +158,22 @@ impl BaseWorker {
|
|||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some Postgres functions expect BIGINT; cast to i64 to be safe when
|
// Send exact types matching the DB function signature:
|
||||||
// serializing the first parameter.
|
// p_falukant_user_id integer, p_money_change numeric, p_activity text
|
||||||
let uid_i64: i64 = falukant_user_id as i64;
|
let uid_i32: i32 = falukant_user_id;
|
||||||
let p1: &(dyn ToSql + Sync) = &uid_i64;
|
let money_str = money_change.to_string(); // numeric accepts text
|
||||||
let p2: &(dyn ToSql + Sync) = &money_change;
|
|
||||||
|
let p1: &(dyn ToSql + Sync) = &uid_i32;
|
||||||
|
let p2: &(dyn ToSql + Sync) = &money_str;
|
||||||
let p3: &(dyn ToSql + Sync) = &action;
|
let p3: &(dyn ToSql + Sync) = &action;
|
||||||
|
|
||||||
// Debug: Logge die Parameter kurz vor dem Execute (nur stderr)
|
// Minimal logging
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"[BaseWorker] change_falukant_user_money: calling update_money with user_id={}, money_change={}, action={}",
|
"[BaseWorker] change_falukant_user_money: update_money(user_id={}, money_change='{}', action={})",
|
||||||
falukant_user_id, money_change, action
|
uid_i32, money_str, action
|
||||||
);
|
);
|
||||||
|
|
||||||
// Zusätzlich: logge die konkreten Rust-Typen, damit wir sehen können,
|
let _ = conn.execute("update_money", &[p1, p2, p3])?;
|
||||||
// ob unerwartete Typen (z.B. String vs i32) übergeben werden.
|
|
||||||
use std::any::type_name_of_val;
|
|
||||||
eprintln!(
|
|
||||||
"[BaseWorker] param types: user_id={} ({}), uid_i64={} ({}), money_change={} ({}), action_type={} ",
|
|
||||||
falukant_user_id,
|
|
||||||
type_name_of_val(&falukant_user_id),
|
|
||||||
uid_i64,
|
|
||||||
type_name_of_val(&uid_i64),
|
|
||||||
money_change,
|
|
||||||
type_name_of_val(&money_change),
|
|
||||||
type_name_of_val(&action)
|
|
||||||
);
|
|
||||||
|
|
||||||
match conn.execute("update_money", &[p1, p2, p3]) {
|
|
||||||
Ok(rows) => {
|
|
||||||
// rows als Vec<Row> zurückgegeben, nichts weiter tun
|
|
||||||
let _ = rows;
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
let err_str = format!("{err}");
|
|
||||||
// Wenn der Postgres-Client ein Serialisierungsproblem meldet,
|
|
||||||
// erweitern wir das Log um die tatsächlichen Parameterwerte
|
|
||||||
// und versuchen einen Retry, in dem wir user_id als String senden.
|
|
||||||
if err_str.contains("serializing parameter") {
|
|
||||||
eprintln!(
|
|
||||||
"[BaseWorker] Fehler beim Serialisieren der DB-Parameter: user_id={}, money_change={}, action={}. Original: {err}",
|
|
||||||
falukant_user_id, money_change, action
|
|
||||||
);
|
|
||||||
|
|
||||||
// Retry: sende user_id als String
|
|
||||||
let uid_str = falukant_user_id.to_string();
|
|
||||||
let rp1: &(dyn ToSql + Sync) = &uid_str;
|
|
||||||
let rp2: &(dyn ToSql + Sync) = &money_change;
|
|
||||||
let rp3: &(dyn ToSql + Sync) = &action;
|
|
||||||
|
|
||||||
eprintln!(
|
|
||||||
"[BaseWorker] Retry: sending user_id as string ('{}') to update_money",
|
|
||||||
uid_str
|
|
||||||
);
|
|
||||||
|
|
||||||
match conn.execute("update_money", &[rp1, rp2, rp3]) {
|
|
||||||
Ok(rows2) => {
|
|
||||||
let _ = rows2;
|
|
||||||
}
|
|
||||||
Err(err2) => {
|
|
||||||
eprintln!(
|
|
||||||
"[BaseWorker] Retry failed: {err2} (original: {err})"
|
|
||||||
);
|
|
||||||
return Err(err2.into());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return Err(err.into());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user