Enhance user notification handling in EventsWorker: Updated the notification process to write user notifications to the database and send WebSocket alerts for each affected user in a region. Improved logging to reflect the number of users notified during regional event processing.

This commit is contained in:
Torsten Schulz (local)
2025-12-08 11:34:20 +01:00
parent 37b2c08555
commit 0198bcd603

View File

@@ -541,7 +541,10 @@ impl EventsWorker {
}
}
// Sende Benachrichtigung
// Schreibe Benachrichtigung in die Datenbank
Self::notify_user(pool, broker, user_id, &format!("random_event.{}", event.id))?;
// Sende Benachrichtigung über WebSocket
let notification = json!({
"event": "random_event",
"event_id": event.id,
@@ -869,21 +872,50 @@ impl EventsWorker {
}
}
// Sende Benachrichtigung an alle Spieler mit Branches in dieser Region
let notification = json!({
"event": "random_event",
"event_id": event.id,
"event_type": "regional",
"region_id": region_id,
"title": event.title,
"description": event.description,
"effects": effect_results
});
// Finde alle betroffenen User in dieser Region (User mit Branches)
const QUERY_GET_AFFECTED_USERS: &str = r#"
SELECT DISTINCT b.falukant_user_id AS user_id
FROM falukant_data.branch b
WHERE b.region_id = $1
AND b.falukant_user_id IS NOT NULL;
"#;
conn.prepare("get_affected_users", QUERY_GET_AFFECTED_USERS)?;
let user_rows = conn.execute("get_affected_users", &[&region_id])?;
// Sende Benachrichtigung an jeden betroffenen User einzeln
let mut notified_users = 0;
for row in user_rows {
let user_id: Option<i32> = row
.get("user_id")
.and_then(|v| v.parse::<i32>().ok());
if let Some(uid) = user_id {
// Schreibe Benachrichtigung in die Datenbank
if let Err(err) = Self::notify_user(pool, broker, uid, &format!("random_event.{}", event.id)) {
eprintln!("[EventsWorker] Fehler beim Schreiben der Benachrichtigung für User {}: {}", uid, err);
}
// Sende Benachrichtigung über WebSocket
let notification = json!({
"event": "random_event",
"event_id": event.id,
"event_type": "regional",
"region_id": region_id,
"user_id": uid,
"title": event.title,
"description": event.description,
"effects": effect_results
});
broker.publish(notification.to_string());
notified_users += 1;
}
}
broker.publish(notification.to_string());
eprintln!(
"[EventsWorker] Regionales Ereignis '{}' für Region {} verarbeitet",
event.id, region_id
"[EventsWorker] Regionales Ereignis '{}' für Region {} verarbeitet, {} User benachrichtigt",
event.id, region_id, notified_users
);
Ok(())