diff --git a/src/worker/base.rs b/src/worker/base.rs index 675bcc3..3f6a8f9 100644 --- a/src/worker/base.rs +++ b/src/worker/base.rs @@ -234,6 +234,24 @@ impl BaseWorker { ); let _ = conn.query(&sql)?; + + // Best-effort: insert a money history entry so the UI/history views + // can show the change even if the DB-function doesn't write it. + // We don't want to fail the whole operation if this insert fails, + // so log errors and continue. + let history_sql = format!( + "INSERT INTO falukant_log.money_history (user_id, change, action, created_at) VALUES ({uid}, {money}::numeric, '{act}', NOW());", + uid = uid_i32, + money = money_str, + act = escaped_action + ); + if let Err(err) = conn.query(&history_sql) { + eprintln!( + "[BaseWorker] Warning: inserting money_history failed for user {}: {}", + uid_i32, err + ); + } + Ok(()) } } diff --git a/src/worker/events.rs b/src/worker/events.rs index 3755d76..2038703 100644 --- a/src/worker/events.rs +++ b/src/worker/events.rs @@ -1009,6 +1009,23 @@ impl EventsWorker { conn.prepare("update_money_event", QUERY_UPDATE_MONEY)?; let _ = conn.execute("update_money_event", &[&user_id, &change, &action])?; + // Best-effort money_history insert for UI/history visibility. + let money_str = format!("{:.2}", change); + fn escape_sql_literal(s: &str) -> String { s.replace('\'', "''") } + let escaped_action = escape_sql_literal(&action); + let history_sql = format!( + "INSERT INTO falukant_log.money_history (user_id, change, action, created_at) VALUES ({uid}, {money}::numeric, '{act}', NOW());", + uid = user_id, + money = money_str, + act = escaped_action + ); + if let Err(err) = conn.query(&history_sql) { + eprintln!( + "[EventsWorker] Warning: inserting money_history failed for user {}: {}", + user_id, err + ); + } + Ok(change) } diff --git a/src/worker/underground.rs b/src/worker/underground.rs index d3a5f28..2eada68 100644 --- a/src/worker/underground.rs +++ b/src/worker/underground.rs @@ -962,6 +962,24 @@ fn change_falukant_user_money( let p2: &(dyn ToSql + Sync) = &money_change; let p3: &(dyn ToSql + Sync) = &action; conn.execute("ug_update_money", &[p1, p2, p3])?; + + // Best-effort insert into money_history for UI visibility + let money_str = format!("{:.2}", money_change); + fn escape_sql_literal(s: &str) -> String { s.replace('\'', "''") } + let escaped_action = escape_sql_literal(action); + let history_sql = format!( + "INSERT INTO falukant_log.money_history (user_id, change, action, created_at) VALUES ({uid}, {money}::numeric, '{act}', NOW());", + uid = falukant_user_id, + money = money_str, + act = escaped_action + ); + if let Err(err) = conn.query(&history_sql) { + eprintln!( + "[UndergroundWorker] Warning: inserting money_history failed for user {}: {}", + falukant_user_id, err + ); + } + Ok(()) }