Add character user clearing logic in EventsWorker: Implement a new SQL query to clear the user association from a deceased character before assigning a new heir. This ensures compliance with unique constraints and prevents errors during user reassignment. Enhance error handling and logging for better debugging.

This commit is contained in:
Torsten Schulz (local)
2026-01-05 15:46:54 +01:00
parent e2630eb32a
commit 604c8ba300
3 changed files with 44 additions and 4 deletions

View File

@@ -29,6 +29,7 @@ use crate::worker::sql::{
QUERY_GET_HEIR,
QUERY_RANDOM_HEIR,
QUERY_SET_CHARACTER_USER,
QUERY_CLEAR_CHARACTER_USER,
QUERY_UPDATE_USER_MONEY,
QUERY_GET_FALUKANT_USER_ID,
QUERY_AUTOBATISM,
@@ -608,6 +609,8 @@ impl UserCharacterWorker {
}
if heir_id > 0 {
// Erst die alte Zuordnung lösen (Unique-Constraint safety), dann den Erben zuweisen.
self.clear_character_user(character_id)?;
self.set_new_character(falukant_user_id, heir_id)?;
}
self.set_new_money(falukant_user_id, new_money)?;
@@ -685,6 +688,18 @@ impl UserCharacterWorker {
Ok(())
}
fn clear_character_user(&mut self, deceased_character_id: i32) -> Result<(), DbError> {
let mut conn = self
.base
.pool
.get()
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
conn.prepare("clear_character_user", QUERY_CLEAR_CHARACTER_USER)?;
conn.execute("clear_character_user", &[&deceased_character_id])?;
Ok(())
}
fn set_new_money(&mut self, falukant_user_id: i32, new_amount: f64) -> Result<(), DbError> {
let mut conn = self
.base