Refactor SQL queries into a dedicated module
- Moved SQL queries from multiple worker files into `src/worker/sql.rs` for better organization and maintainability. - Updated references in `stockage_manager.rs`, `transport.rs`, `underground.rs`, `user_character.rs`, and `value_recalculation.rs` to use the new centralized SQL queries. - Improved code readability by replacing `.get(0)` with `.first()` for better clarity when retrieving the first row from query results. - Cleaned up unnecessary comments and consolidated related SQL queries.
This commit is contained in:
@@ -8,6 +8,41 @@ use std::sync::Arc;
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use super::base::{BaseWorker, Worker, WorkerState};
|
||||
use crate::worker::sql::{
|
||||
QUERY_GET_USERS_TO_UPDATE,
|
||||
QUERY_UPDATE_CHARACTERS_HEALTH,
|
||||
QUERY_UPDATE_MOOD,
|
||||
QUERY_UPDATE_GET_ITEMS_TO_UPDATE,
|
||||
QUERY_UPDATE_GET_CHARACTER_IDS,
|
||||
QUERY_UPDATE_KNOWLEDGE,
|
||||
QUERY_DELETE_LOG_ENTRY,
|
||||
QUERY_GET_OPEN_CREDITS,
|
||||
QUERY_UPDATE_CREDIT,
|
||||
QUERY_CLEANUP_CREDITS,
|
||||
QUERY_ADD_CHARACTER_TO_DEBTORS_PRISM,
|
||||
QUERY_GET_CURRENT_MONEY,
|
||||
QUERY_GET_HOUSE_VALUE,
|
||||
QUERY_GET_SETTLEMENT_VALUE,
|
||||
QUERY_GET_INVENTORY_VALUE,
|
||||
QUERY_GET_CREDIT_DEBT,
|
||||
QUERY_COUNT_CHILDREN,
|
||||
QUERY_GET_HEIR,
|
||||
QUERY_RANDOM_HEIR,
|
||||
QUERY_SET_CHARACTER_USER,
|
||||
QUERY_UPDATE_USER_MONEY,
|
||||
QUERY_GET_FALUKANT_USER_ID,
|
||||
QUERY_AUTOBATISM,
|
||||
QUERY_GET_PREGNANCY_CANDIDATES,
|
||||
QUERY_INSERT_CHILD,
|
||||
QUERY_INSERT_CHILD_RELATION,
|
||||
QUERY_DELETE_DIRECTOR,
|
||||
QUERY_DELETE_RELATIONSHIP,
|
||||
QUERY_DELETE_CHILD_RELATION,
|
||||
QUERY_DELETE_KNOWLEDGE,
|
||||
QUERY_DELETE_DEBTORS_PRISM,
|
||||
QUERY_DELETE_POLITICAL_OFFICE,
|
||||
QUERY_DELETE_ELECTION_CANDIDATE,
|
||||
};
|
||||
|
||||
/// Vereinfachtes Abbild eines Characters aus `QUERY_GET_USERS_TO_UPDATE`.
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -26,418 +61,7 @@ pub struct UserCharacterWorker {
|
||||
last_mood_run: Option<Instant>,
|
||||
}
|
||||
|
||||
// SQL-Queries (1:1 aus der C++-Implementierung übernommen, gruppiert nach Themen)
|
||||
const QUERY_GET_USERS_TO_UPDATE: &str = r#"
|
||||
SELECT id, CURRENT_DATE - birthdate::date AS age, health
|
||||
FROM falukant_data."character"
|
||||
WHERE user_id IS NOT NULL;
|
||||
"#;
|
||||
|
||||
const QUERY_UPDATE_CHARACTERS_HEALTH: &str = r#"
|
||||
UPDATE falukant_data."character"
|
||||
SET health = $1
|
||||
WHERE id = $2;
|
||||
"#;
|
||||
|
||||
// Mood-Update mit zufälliger Auswahl pro Charakter:
|
||||
// Jeder lebende Charakter hat pro Aufruf (ca. 1x pro Minute)
|
||||
// eine kleine Chance auf Mood-Wechsel. Die Bedingung `random() < 1.0 / 50.0`
|
||||
// ergibt im Erwartungswert ca. alle 50 Minuten einen Wechsel, verteilt
|
||||
// individuell und zufällig.
|
||||
const QUERY_UPDATE_MOOD: &str = r#"
|
||||
UPDATE falukant_data."character" AS c
|
||||
SET mood_id = falukant_data.get_random_mood_id()
|
||||
WHERE c.health > 0
|
||||
AND random() < (1.0 / 50.0);
|
||||
"#;
|
||||
|
||||
const QUERY_UPDATE_GET_ITEMS_TO_UPDATE: &str = r#"
|
||||
SELECT id, product_id, producer_id, quantity
|
||||
FROM falukant_log.production p
|
||||
WHERE p.production_timestamp::date < current_date;
|
||||
"#;
|
||||
|
||||
const QUERY_UPDATE_GET_CHARACTER_IDS: &str = r#"
|
||||
SELECT fu.id AS user_id,
|
||||
c.id AS character_id,
|
||||
c2.id AS director_id
|
||||
FROM falukant_data.falukant_user fu
|
||||
JOIN falukant_data.character c
|
||||
ON c.user_id = fu.id
|
||||
LEFT JOIN falukant_data.director d
|
||||
ON d.employer_user_id = fu.id
|
||||
LEFT JOIN falukant_data.character c2
|
||||
ON c2.id = d.director_character_id
|
||||
WHERE fu.id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_UPDATE_KNOWLEDGE: &str = r#"
|
||||
UPDATE falukant_data.knowledge
|
||||
SET knowledge = LEAST(knowledge + $3, 100)
|
||||
WHERE character_id = $1
|
||||
AND product_id = $2;
|
||||
"#;
|
||||
|
||||
const QUERY_DELETE_LOG_ENTRY: &str = r#"
|
||||
DELETE FROM falukant_log.production
|
||||
WHERE id = $1;
|
||||
"#;
|
||||
|
||||
// Kredit- und Vermögens-Queries
|
||||
const QUERY_GET_OPEN_CREDITS: &str = r#"
|
||||
SELECT
|
||||
c.id AS credit_id,
|
||||
c.amount,
|
||||
c.remaining_amount,
|
||||
c.interest_rate,
|
||||
fu.id AS user_id,
|
||||
fu.money,
|
||||
c2.id AS character_id,
|
||||
dp.created_at AS debitor_prism_start,
|
||||
dp.created_at::date < current_date AS prism_started_previously
|
||||
FROM falukant_data.credit c
|
||||
JOIN falukant_data.falukant_user fu
|
||||
ON fu.id = c.id
|
||||
JOIN falukant_data.character c2
|
||||
ON c2.user_id = c.falukant_user_id
|
||||
LEFT JOIN falukant_data.debtors_prism dp
|
||||
ON dp.character_id = c2.id
|
||||
WHERE c.remaining_amount > 0
|
||||
AND c.updated_at::date < current_date;
|
||||
"#;
|
||||
|
||||
const QUERY_UPDATE_CREDIT: &str = r#"
|
||||
UPDATE falukant_data.credit c
|
||||
SET remaining_amount = $1
|
||||
WHERE falukant_user_id = $2;
|
||||
"#;
|
||||
|
||||
const QUERY_CLEANUP_CREDITS: &str = r#"
|
||||
DELETE FROM falukant_data.credit
|
||||
WHERE remaining_amount >= 0.01;
|
||||
"#;
|
||||
|
||||
const QUERY_ADD_CHARACTER_TO_DEBTORS_PRISM: &str = r#"
|
||||
INSERT INTO falukant_data.debtors_prism (character_id)
|
||||
VALUES ($1);
|
||||
"#;
|
||||
|
||||
const QUERY_GET_CURRENT_MONEY: &str = r#"
|
||||
SELECT COALESCE(money, 0) AS sum
|
||||
FROM falukant_data.falukant_user
|
||||
WHERE user_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_HOUSE_VALUE: &str = r#"
|
||||
SELECT COALESCE(SUM(h.cost), 0) AS sum
|
||||
FROM falukant_data.user_house AS uh
|
||||
JOIN falukant_type.house AS h
|
||||
ON uh.house_type_id = h.id
|
||||
WHERE uh.user_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_SETTLEMENT_VALUE: &str = r#"
|
||||
SELECT COALESCE(SUM(b.base_cost), 0) AS sum
|
||||
FROM falukant_data.branch AS br
|
||||
JOIN falukant_type.branch AS b
|
||||
ON br.branch_type_id = b.id
|
||||
WHERE br.falukant_user_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_INVENTORY_VALUE: &str = r#"
|
||||
SELECT COALESCE(SUM(i.quantity * p.sell_cost), 0) AS sum
|
||||
FROM falukant_data.inventory AS i
|
||||
JOIN falukant_type.product AS p
|
||||
ON i.product_id = p.id
|
||||
JOIN falukant_data.branch AS br
|
||||
ON i.stock_id = br.id
|
||||
WHERE br.falukant_user_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_CREDIT_DEBT: &str = r#"
|
||||
SELECT COALESCE(SUM(remaining_amount), 0) AS sum
|
||||
FROM falukant_data.credit
|
||||
WHERE falukant_user_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_COUNT_CHILDREN: &str = r#"
|
||||
SELECT COUNT(*) AS cnt
|
||||
FROM falukant_data.child_relation
|
||||
WHERE father_character_id = $1
|
||||
OR mother_character_id = $1;
|
||||
"#;
|
||||
|
||||
// Vererbungs-Queries
|
||||
const QUERY_GET_HEIR: &str = r#"
|
||||
SELECT child_character_id
|
||||
FROM falukant_data.child_relation
|
||||
WHERE father_character_id = $1
|
||||
OR mother_character_id = $1
|
||||
ORDER BY (is_heir IS TRUE) DESC,
|
||||
updated_at DESC
|
||||
LIMIT 1;
|
||||
"#;
|
||||
|
||||
const QUERY_RANDOM_HEIR: &str = r#"
|
||||
WITH chosen AS (
|
||||
SELECT
|
||||
cr.id AS relation_id,
|
||||
cr.child_character_id
|
||||
FROM
|
||||
falukant_data.child_relation AS cr
|
||||
JOIN
|
||||
falukant_data.character AS ch
|
||||
ON ch.id = cr.child_character_id
|
||||
WHERE
|
||||
(cr.father_character_id = $1 OR cr.mother_character_id = $1)
|
||||
AND ch.region_id = (
|
||||
SELECT region_id
|
||||
FROM falukant_data.character
|
||||
WHERE id = $1
|
||||
)
|
||||
AND ch.birthdate >= NOW() - INTERVAL '10 days'
|
||||
AND ch.title_of_nobility = (
|
||||
SELECT id
|
||||
FROM falukant_type.title
|
||||
WHERE label_tr = 'noncivil'
|
||||
)
|
||||
ORDER BY RANDOM()
|
||||
LIMIT 1
|
||||
)
|
||||
UPDATE
|
||||
falukant_data.child_relation AS cr2
|
||||
SET
|
||||
is_heir = TRUE,
|
||||
updated_at = NOW()
|
||||
FROM
|
||||
chosen
|
||||
WHERE
|
||||
cr2.id = chosen.relation_id
|
||||
RETURNING
|
||||
chosen.child_character_id;
|
||||
"#;
|
||||
|
||||
const QUERY_SET_CHARACTER_USER: &str = r#"
|
||||
UPDATE falukant_data.character
|
||||
SET user_id = $1,
|
||||
updated_at = NOW()
|
||||
WHERE id = $2;
|
||||
"#;
|
||||
|
||||
const QUERY_UPDATE_USER_MONEY: &str = r#"
|
||||
UPDATE falukant_data.falukant_user
|
||||
SET money = $1,
|
||||
updated_at = NOW()
|
||||
WHERE user_id = $2;
|
||||
"#;
|
||||
|
||||
const QUERY_GET_FALUKANT_USER_ID: &str = r#"
|
||||
SELECT user_id
|
||||
FROM falukant_data.character
|
||||
WHERE id = $1
|
||||
LIMIT 1;
|
||||
"#;
|
||||
|
||||
// Schwangerschafts-Queries
|
||||
const QUERY_AUTOBATISM: &str = r#"
|
||||
UPDATE falukant_data.child_relation
|
||||
SET name_set = TRUE
|
||||
WHERE id IN (
|
||||
SELECT cr.id
|
||||
FROM falukant_data.child_relation cr
|
||||
JOIN falukant_data.character c
|
||||
ON c.id = cr.child_character_id
|
||||
WHERE cr.name_set = FALSE
|
||||
AND c.birthdate < current_date - INTERVAL '5 days'
|
||||
);
|
||||
"#;
|
||||
|
||||
const QUERY_GET_PREGNANCY_CANDIDATES: &str = r#"
|
||||
SELECT
|
||||
r.character1_id AS father_cid,
|
||||
r.character2_id AS mother_cid,
|
||||
c1.title_of_nobility,
|
||||
c1.last_name,
|
||||
c1.region_id,
|
||||
fu1.id AS father_uid,
|
||||
fu2.id AS mother_uid,
|
||||
((CURRENT_DATE - c1.birthdate::date)
|
||||
+ (CURRENT_DATE - c2.birthdate::date)) / 2 AS avg_age_days,
|
||||
100.0 /
|
||||
(1 + EXP(
|
||||
0.0647 * (
|
||||
((CURRENT_DATE - c1.birthdate::date)
|
||||
+ (CURRENT_DATE - c2.birthdate::date)) / 2
|
||||
) - 0.0591
|
||||
)) AS prob_pct
|
||||
FROM falukant_data.relationship r
|
||||
JOIN falukant_type.relationship r2
|
||||
ON r2.id = r.relationship_type_id
|
||||
AND r2.tr = 'married'
|
||||
JOIN falukant_data.character c1
|
||||
ON c1.id = r.character1_id
|
||||
JOIN falukant_data.character c2
|
||||
ON c2.id = r.character2_id
|
||||
LEFT JOIN falukant_data.falukant_user fu1
|
||||
ON fu1.id = c1.user_id
|
||||
LEFT JOIN falukant_data.falukant_user fu2
|
||||
ON fu2.id = c2.user_id
|
||||
WHERE random() * 100 < (
|
||||
100.0 /
|
||||
(1 + EXP(
|
||||
0.11166347 * (
|
||||
((CURRENT_DATE - c1.birthdate::date)
|
||||
+ (CURRENT_DATE - c2.birthdate::date)) / 2
|
||||
) - 2.638267
|
||||
))
|
||||
) / 2;
|
||||
-- Hinweis: Der Divisor `/ 2` halbiert die Wahrscheinlichkeit und ist Teil der
|
||||
-- ursprünglichen Formel. Wurde vorübergehend entfernt, um die Geburtenrate zu erhöhen,
|
||||
-- wurde aber wiederhergestellt, um die mathematische Korrektheit der Formel zu gewährleisten.
|
||||
-- Um die Geburtenrate anzupassen, sollte stattdessen die Formel selbst angepasst werden.
|
||||
"#;
|
||||
|
||||
const QUERY_INSERT_CHILD: &str = r#"
|
||||
INSERT INTO falukant_data.character (
|
||||
user_id,
|
||||
region_id,
|
||||
first_name,
|
||||
last_name,
|
||||
birthdate,
|
||||
gender,
|
||||
title_of_nobility,
|
||||
mood_id,
|
||||
created_at,
|
||||
updated_at
|
||||
) VALUES (
|
||||
NULL,
|
||||
$1::int,
|
||||
(
|
||||
SELECT id
|
||||
FROM falukant_predefine.firstname
|
||||
WHERE gender = $2
|
||||
ORDER BY RANDOM()
|
||||
LIMIT 1
|
||||
),
|
||||
$3::int,
|
||||
NOW(),
|
||||
$2::varchar,
|
||||
$4::int,
|
||||
(
|
||||
SELECT id
|
||||
FROM falukant_type.mood
|
||||
ORDER BY RANDOM()
|
||||
LIMIT 1
|
||||
),
|
||||
NOW(),
|
||||
NOW()
|
||||
)
|
||||
RETURNING id AS child_cid;
|
||||
"#;
|
||||
|
||||
const QUERY_INSERT_CHILD_RELATION: &str = r#"
|
||||
INSERT INTO falukant_data.child_relation (
|
||||
father_character_id,
|
||||
mother_character_id,
|
||||
child_character_id,
|
||||
name_set,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
VALUES (
|
||||
$1::int,
|
||||
$2::int,
|
||||
$3::int,
|
||||
FALSE,
|
||||
NOW(), NOW()
|
||||
);
|
||||
"#;
|
||||
|
||||
// Aufräum-Queries beim Tod eines Characters
|
||||
const QUERY_DELETE_DIRECTOR: &str = r#"
|
||||
DELETE FROM falukant_data.director
|
||||
WHERE director_character_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_DELETE_RELATIONSHIP: &str = r#"
|
||||
DELETE FROM falukant_data.relationship
|
||||
WHERE character1_id = $1
|
||||
OR character2_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_DELETE_CHILD_RELATION: &str = r#"
|
||||
DELETE FROM falukant_data.child_relation
|
||||
WHERE child_character_id = $1
|
||||
OR father_character_id = $1
|
||||
OR mother_character_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_DELETE_KNOWLEDGE: &str = r#"
|
||||
DELETE FROM falukant_data.knowledge
|
||||
WHERE character_id = $1;
|
||||
"#;
|
||||
|
||||
const QUERY_DELETE_DEBTORS_PRISM: &str = r#"
|
||||
DELETE FROM falukant_data.debtors_prism
|
||||
WHERE character_id = $1;
|
||||
"#;
|
||||
|
||||
/// Löscht alle Ämter eines Charakters und stellt anschließend sicher, dass
|
||||
/// für die betroffenen Amtstyp/Region-Kombinationen nicht mehr Ämter
|
||||
/// besetzt sind als durch `seats_per_region` vorgesehen.
|
||||
///
|
||||
/// Die überzähligen Ämter werden deterministisch nach `created_at DESC`
|
||||
/// gekappt, d. h. neuere Amtsinhaber bleiben bevorzugt im Amt.
|
||||
const QUERY_DELETE_POLITICAL_OFFICE: &str = r#"
|
||||
WITH removed AS (
|
||||
DELETE FROM falukant_data.political_office
|
||||
WHERE character_id = $1
|
||||
RETURNING office_type_id, region_id
|
||||
),
|
||||
affected AS (
|
||||
SELECT DISTINCT office_type_id, region_id
|
||||
FROM removed
|
||||
),
|
||||
seats AS (
|
||||
SELECT
|
||||
pot.id AS office_type_id,
|
||||
rt.id AS region_id,
|
||||
pot.seats_per_region AS seats_total
|
||||
FROM falukant_type.political_office_type AS pot
|
||||
JOIN falukant_type.region AS rt
|
||||
ON pot.region_type = rt.label_tr
|
||||
JOIN affected AS a
|
||||
ON a.office_type_id = pot.id
|
||||
AND a.region_id = rt.id
|
||||
),
|
||||
ranked AS (
|
||||
SELECT
|
||||
po.id,
|
||||
po.office_type_id,
|
||||
po.region_id,
|
||||
s.seats_total,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY po.office_type_id, po.region_id
|
||||
ORDER BY po.created_at DESC
|
||||
) AS rn
|
||||
FROM falukant_data.political_office AS po
|
||||
JOIN seats AS s
|
||||
ON s.office_type_id = po.office_type_id
|
||||
AND s.region_id = po.region_id
|
||||
),
|
||||
to_delete AS (
|
||||
SELECT id
|
||||
FROM ranked
|
||||
WHERE rn > seats_total
|
||||
)
|
||||
DELETE FROM falukant_data.political_office
|
||||
WHERE id IN (SELECT id FROM to_delete);
|
||||
"#;
|
||||
|
||||
const QUERY_DELETE_ELECTION_CANDIDATE: &str = r#"
|
||||
DELETE FROM falukant_data.election_candidate
|
||||
WHERE character_id = $1;
|
||||
"#;
|
||||
// SQL moved to `src/worker/sql.rs`
|
||||
|
||||
impl UserCharacterWorker {
|
||||
pub fn new(pool: ConnectionPool, broker: MessageBroker) -> Self {
|
||||
@@ -470,7 +94,7 @@ impl UserCharacterWorker {
|
||||
}
|
||||
|
||||
if !state.running_worker.load(Ordering::Relaxed) {
|
||||
return;
|
||||
// worker stopping
|
||||
}
|
||||
}
|
||||
|
||||
@@ -893,8 +517,8 @@ impl UserCharacterWorker {
|
||||
|
||||
let inserted =
|
||||
conn.execute("insert_child", &[®ion_id, &gender, &last_name, &title_of_nobility])?;
|
||||
let child_cid = inserted
|
||||
.get(0)
|
||||
let child_cid = inserted
|
||||
.first()
|
||||
.and_then(|r| r.get("child_cid"))
|
||||
.and_then(|v| v.parse::<i32>().ok())
|
||||
.unwrap_or(-1);
|
||||
@@ -1002,7 +626,7 @@ impl UserCharacterWorker {
|
||||
let rows = conn.execute("get_falukant_user_id", &[&character_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("user_id"))
|
||||
.and_then(|v| v.parse::<i32>().ok())
|
||||
.unwrap_or(-1))
|
||||
@@ -1019,7 +643,7 @@ impl UserCharacterWorker {
|
||||
let rows = conn.execute("get_heir", &[&deceased_character_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("child_character_id"))
|
||||
.and_then(|v| v.parse::<i32>().ok())
|
||||
.unwrap_or(-1))
|
||||
@@ -1036,7 +660,7 @@ impl UserCharacterWorker {
|
||||
let rows = conn.execute("random_heir", &[&deceased_character_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("child_character_id"))
|
||||
.and_then(|v| v.parse::<i32>().ok())
|
||||
.unwrap_or(-1))
|
||||
@@ -1084,7 +708,7 @@ impl UserCharacterWorker {
|
||||
let rows = conn.execute("get_current_money", &[&falukant_user_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("sum"))
|
||||
.and_then(|v| v.parse::<f64>().ok())
|
||||
.unwrap_or(0.0))
|
||||
@@ -1097,11 +721,11 @@ impl UserCharacterWorker {
|
||||
.get()
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
conn.prepare("house_value", QUERY_HOUSE_VALUE)?;
|
||||
conn.prepare("house_value", QUERY_GET_HOUSE_VALUE)?;
|
||||
let rows = conn.execute("house_value", &[&falukant_user_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("sum"))
|
||||
.and_then(|v| v.parse::<f64>().ok())
|
||||
.unwrap_or(0.0))
|
||||
@@ -1114,11 +738,11 @@ impl UserCharacterWorker {
|
||||
.get()
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
conn.prepare("settlement_value", QUERY_SETTLEMENT_VALUE)?;
|
||||
conn.prepare("settlement_value", QUERY_GET_SETTLEMENT_VALUE)?;
|
||||
let rows = conn.execute("settlement_value", &[&falukant_user_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("sum"))
|
||||
.and_then(|v| v.parse::<f64>().ok())
|
||||
.unwrap_or(0.0))
|
||||
@@ -1131,11 +755,11 @@ impl UserCharacterWorker {
|
||||
.get()
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
conn.prepare("inventory_value", QUERY_INVENTORY_VALUE)?;
|
||||
conn.prepare("inventory_value", QUERY_GET_INVENTORY_VALUE)?;
|
||||
let rows = conn.execute("inventory_value", &[&falukant_user_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("sum"))
|
||||
.and_then(|v| v.parse::<f64>().ok())
|
||||
.unwrap_or(0.0))
|
||||
@@ -1148,11 +772,11 @@ impl UserCharacterWorker {
|
||||
.get()
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
conn.prepare("credit_debt", QUERY_CREDIT_DEBT)?;
|
||||
conn.prepare("credit_debt", QUERY_GET_CREDIT_DEBT)?;
|
||||
let rows = conn.execute("credit_debt", &[&falukant_user_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("sum"))
|
||||
.and_then(|v| v.parse::<f64>().ok())
|
||||
.unwrap_or(0.0))
|
||||
@@ -1169,7 +793,7 @@ impl UserCharacterWorker {
|
||||
let rows = conn.execute("count_children", &[&deceased_user_id])?;
|
||||
|
||||
Ok(rows
|
||||
.get(0)
|
||||
.first()
|
||||
.and_then(|r| r.get("cnt"))
|
||||
.and_then(|v| v.parse::<i32>().ok())
|
||||
.unwrap_or(0))
|
||||
|
||||
Reference in New Issue
Block a user