Enhance character deletion process in EventsWorker and UserCharacterWorker: Added SQL queries to delete associated data such as knowledge, debtors prism, political offices, and election candidates upon character deletion. Implemented event publishing for character death and status updates after inheritance changes, improving event handling and UI responsiveness.
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m41s

This commit is contained in:
Torsten Schulz (local)
2026-04-20 15:35:08 +02:00
parent 0892e2db8b
commit a38beadb8e
3 changed files with 145 additions and 1 deletions

View File

@@ -46,7 +46,11 @@ use crate::worker::sql::{
QUERY_GET_USER_ID,
QUERY_DELETE_CHILD_RELATION,
QUERY_DELETE_CHILD_RELATION_BY_PARENT,
QUERY_DELETE_DEBTORS_PRISM,
QUERY_DELETE_CHARACTER,
QUERY_DELETE_ELECTION_CANDIDATE,
QUERY_DELETE_KNOWLEDGE,
QUERY_DELETE_POLITICAL_OFFICE,
QUERY_GET_HEIR,
QUERY_SET_CHARACTER_USER,
QUERY_GET_CURRENT_MONEY,
@@ -1815,6 +1819,12 @@ impl EventsWorker {
broker: &MessageBroker,
character_id: i32,
) -> Result<(), DbError> {
let death_event = format!(
r#"{{"event":"CharacterDeath","character_id":{}}}"#,
character_id
);
broker.publish(death_event);
// Diese Funktion verwendet die gleiche Logik wie CharacterCreationWorker
// Wir müssen die Queries aus character_creation.rs verwenden
let mut conn = pool
@@ -1922,7 +1932,17 @@ impl EventsWorker {
}
}
// 5) Charakter löschen
// 5) Weitere charaktergebundene Daten löschen (wie UserCharacterWorker)
conn.prepare("delete_knowledge", QUERY_DELETE_KNOWLEDGE)?;
conn.prepare("delete_debtors_prism", QUERY_DELETE_DEBTORS_PRISM)?;
conn.prepare("delete_political_office", QUERY_DELETE_POLITICAL_OFFICE)?;
conn.prepare("delete_election_candidate", QUERY_DELETE_ELECTION_CANDIDATE)?;
conn.execute("delete_knowledge", &[&character_id])?;
conn.execute("delete_debtors_prism", &[&character_id])?;
conn.execute("delete_political_office", &[&character_id])?;
conn.execute("delete_election_candidate", &[&character_id])?;
// 6) Charakter löschen
conn.prepare("delete_character", QUERY_DELETE_CHARACTER)?;
conn.execute("delete_character", &[&character_id])?;
@@ -2040,6 +2060,13 @@ impl EventsWorker {
&format!("Erbe für Charakter {}", deceased_character_id),
)?;
// Expliziter Status-Refresh für die UI nach Erbwechsel.
let status = format!(
r#"{{"event":"falukantUpdateStatus","user_id":{}}}"#,
falukant_user_id
);
broker.publish(status);
eprintln!(
"[EventsWorker] Erbe {} übernimmt Vermögen von Charakter {} (User {}): {:.2} (von {:.2} Gesamtvermögen, {} weitere Kinder)",
heir_id, deceased_character_id, falukant_user_id, final_money, total_assets, child_count

View File

@@ -960,6 +960,13 @@ impl UserCharacterWorker {
}
self.set_new_money(falukant_user_id, new_money)?;
// Nach Erbwechsel den Status sicher neu laden lassen.
let update_status = format!(
r#"{{"event":"falukantUpdateStatus","user_id":{}}}"#,
falukant_user_id
);
self.base.broker.publish(update_status);
Ok(())
}