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
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m41s
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user