Refactor SQL queries into centralized module
- Moved various SQL query strings from individual worker files into a new `sql.rs` module for better organization and reusability. - Updated `events.rs`, `underground.rs`, and `weather.rs` to use the centralized SQL queries. - Removed redundant query definitions from `events.rs`, `underground.rs`, and `weather.rs`.
This commit is contained in:
@@ -8,6 +8,15 @@ use std::sync::Arc;
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use super::base::{BaseWorker, Worker, WorkerState};
|
||||
use crate::worker::sql::{
|
||||
QUERY_GET_RANDOM_USER,
|
||||
QUERY_GET_RANDOM_INFANT,
|
||||
QUERY_GET_RANDOM_CITY,
|
||||
QUERY_GET_AFFECTED_USERS,
|
||||
QUERY_INSERT_NOTIFICATION,
|
||||
QUERY_GET_MONEY,
|
||||
QUERY_UPDATE_MONEY,
|
||||
};
|
||||
|
||||
/// Typisierung von Ereignissen
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
@@ -420,15 +429,7 @@ impl EventsWorker {
|
||||
return Self::trigger_sudden_infant_death(pool, broker, event, rng);
|
||||
}
|
||||
|
||||
// Hole einen zufälligen aktiven Spieler
|
||||
const QUERY_GET_RANDOM_USER: &str = r#"
|
||||
SELECT id
|
||||
FROM falukant_data.falukant_user
|
||||
ORDER BY RANDOM()
|
||||
LIMIT 1;
|
||||
"#;
|
||||
|
||||
conn.prepare("get_random_user", QUERY_GET_RANDOM_USER)?;
|
||||
conn.prepare("get_random_user", QUERY_GET_RANDOM_USER)?;
|
||||
let rows = conn.execute("get_random_user", &[])?;
|
||||
|
||||
let user_id: Option<i32> = rows
|
||||
@@ -604,20 +605,7 @@ impl EventsWorker {
|
||||
|
||||
// Finde ein zufälliges Kind unter 2 Jahren
|
||||
// Maximalalter: 730 Tage (2 Jahre) - festgelegt in der WHERE-Klausel unten
|
||||
const QUERY_GET_RANDOM_INFANT: &str = r#"
|
||||
SELECT
|
||||
c.id AS character_id,
|
||||
c.user_id,
|
||||
CURRENT_DATE - c.birthdate::date AS age_days
|
||||
FROM falukant_data."character" c
|
||||
WHERE c.user_id IS NOT NULL
|
||||
AND c.health > 0
|
||||
AND CURRENT_DATE - c.birthdate::date <= 730 -- Maximalalter: 2 Jahre (730 Tage)
|
||||
ORDER BY RANDOM()
|
||||
LIMIT 1;
|
||||
"#;
|
||||
|
||||
conn.prepare("get_random_infant", QUERY_GET_RANDOM_INFANT)?;
|
||||
conn.prepare("get_random_infant", QUERY_GET_RANDOM_INFANT)?;
|
||||
let rows = conn.execute("get_random_infant", &[])?;
|
||||
|
||||
let character_id: Option<i32> = rows
|
||||
@@ -712,16 +700,7 @@ impl EventsWorker {
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
// Hole eine zufällige Stadt-Region
|
||||
const QUERY_GET_RANDOM_CITY: &str = r#"
|
||||
SELECT r.id AS region_id
|
||||
FROM falukant_data.region r
|
||||
JOIN falukant_type.region tr ON r.region_type_id = tr.id
|
||||
WHERE tr.label_tr = 'city'
|
||||
ORDER BY RANDOM()
|
||||
LIMIT 1;
|
||||
"#;
|
||||
|
||||
conn.prepare("get_random_city", QUERY_GET_RANDOM_CITY)?;
|
||||
conn.prepare("get_random_city", QUERY_GET_RANDOM_CITY)?;
|
||||
let rows = conn.execute("get_random_city", &[])?;
|
||||
|
||||
let region_id: Option<i32> = rows
|
||||
@@ -913,14 +892,7 @@ impl EventsWorker {
|
||||
}
|
||||
|
||||
// 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)?;
|
||||
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
|
||||
@@ -976,13 +948,7 @@ impl EventsWorker {
|
||||
percent_change: f64,
|
||||
) -> Result<f64, DbError> {
|
||||
// Hole aktuelles Geld
|
||||
const QUERY_GET_MONEY: &str = r#"
|
||||
SELECT money
|
||||
FROM falukant_data.falukant_user
|
||||
WHERE id = $1;
|
||||
"#;
|
||||
|
||||
conn.prepare("get_money", QUERY_GET_MONEY)?;
|
||||
conn.prepare("get_money", QUERY_GET_MONEY)?;
|
||||
let rows = conn.execute("get_money", &[&user_id])?;
|
||||
|
||||
let current_money: Option<f64> = rows
|
||||
@@ -1002,12 +968,8 @@ impl EventsWorker {
|
||||
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);
|
||||
|
||||
// Verwende parametrisierte Queries für Sicherheit gegen SQL-Injection
|
||||
const QUERY_UPDATE_MONEY: &str = r#"
|
||||
SELECT falukant_data.update_money($1, $2, $3);
|
||||
"#;
|
||||
|
||||
conn.prepare("update_money_event", QUERY_UPDATE_MONEY)?;
|
||||
let _ = conn.execute("update_money_event", &[&user_id, &change, &action])?;
|
||||
conn.prepare("update_money_event", QUERY_UPDATE_MONEY)?;
|
||||
let _ = conn.execute("update_money_event", &[&user_id, &change, &action])?;
|
||||
|
||||
// Best-effort money_history insert for UI/history visibility.
|
||||
let money_str = format!("{:.2}", change);
|
||||
@@ -1811,17 +1773,7 @@ impl EventsWorker {
|
||||
.get()
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
const QUERY_INSERT_NOTIFICATION: &str = r#"
|
||||
INSERT INTO falukant_log.notification (
|
||||
user_id,
|
||||
tr,
|
||||
shown,
|
||||
created_at,
|
||||
updated_at
|
||||
) VALUES ($1, $2, FALSE, NOW(), NOW());
|
||||
"#;
|
||||
|
||||
conn.prepare("insert_notification", QUERY_INSERT_NOTIFICATION)?;
|
||||
conn.prepare("insert_notification", QUERY_INSERT_NOTIFICATION)?;
|
||||
conn.execute("insert_notification", &[&user_id, &event_type])?;
|
||||
|
||||
// falukantUpdateStatus
|
||||
|
||||
Reference in New Issue
Block a user