diff --git a/src/worker/events.rs b/src/worker/events.rs index ffdfd10..a433165 100644 --- a/src/worker/events.rs +++ b/src/worker/events.rs @@ -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", &[®ion_id])?; + + // Sende Benachrichtigung an jeden betroffenen User einzeln + let mut notified_users = 0; + for row in user_rows { + let user_id: Option = row + .get("user_id") + .and_then(|v| v.parse::().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(())