Add branch and region details to DirectorWorker: Enhanced resignation candidate structure by including branch_id, region_id, and region_label. Updated resignation risk and resignation payloads to incorporate these new fields. Modified SQL query to retrieve branch and region information, ensuring accurate data handling for director resignations.
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m49s

This commit is contained in:
Torsten Schulz (local)
2026-05-07 11:25:48 +02:00
parent 9022b58dc7
commit d0ff6cad68
2 changed files with 39 additions and 3 deletions

View File

@@ -57,6 +57,10 @@ struct DirectorResignationCandidate {
employer_user_id: i32,
director_character_id: i32,
satisfaction: i32,
branch_id: i32,
region_id: i32,
region_label: String,
resignation_allowed: bool,
}
#[derive(Debug, Clone)]
@@ -191,12 +195,18 @@ impl DirectorWorker {
for candidate in candidates {
let sat = candidate.satisfaction.clamp(0, 100) as f64;
let resignation_probability = 1.0 - (sat / 100.0);
if !candidate.resignation_allowed {
continue;
}
if resignation_probability > 0.5 {
let risk_percent = (resignation_probability * 100.0 * 100.0).round() / 100.0;
let payload = format!(
r#"{{"tr":"director.resignation_risk_high","event":"director_resignation_risk_high","director_id":{},"director_character_id":{},"risk_percent":{},"satisfaction":{},"threshold_percent":50}}"#,
r#"{{"tr":"director.resignation_risk_high","event":"director_resignation_risk_high","director_id":{},"director_character_id":{},"branch_id":{},"region_id":{},"region_label":"{}","risk_percent":{},"satisfaction":{},"threshold_percent":50}}"#,
candidate.id,
candidate.director_character_id,
candidate.branch_id,
candidate.region_id,
json_escape(&candidate.region_label),
risk_percent,
candidate.satisfaction.clamp(0, 100)
);
@@ -214,9 +224,12 @@ impl DirectorWorker {
let resignation_percent = (resignation_probability * 100.0 * 100.0).round() / 100.0;
let resignation_payload = format!(
r#"{{"tr":"director.resigned","event":"director_resigned","director_id":{},"director_character_id":{},"satisfaction":{},"resignation_percent":{}}}"#,
r#"{{"tr":"director.resigned","event":"director_resigned","director_id":{},"director_character_id":{},"branch_id":{},"region_id":{},"region_label":"{}","satisfaction":{},"resignation_percent":{}}}"#,
candidate.id,
candidate.director_character_id,
candidate.branch_id,
candidate.region_id,
json_escape(&candidate.region_label),
candidate.satisfaction.clamp(0, 100),
resignation_percent
);
@@ -310,6 +323,13 @@ impl DirectorWorker {
employer_user_id: row.get("employer_user_id")?.parse().ok()?,
director_character_id: row.get("director_character_id")?.parse().ok()?,
satisfaction: row.get("satisfaction")?.parse().ok()?,
branch_id: row.get("branch_id")?.parse().ok()?,
region_id: row.get("region_id")?.parse().ok()?,
region_label: row.get("region_label").cloned().unwrap_or_default(),
resignation_allowed: row
.get("resignation_allowed")
.map(|v| v == "t" || v == "true" || v == "1")
.unwrap_or(true),
})
}
@@ -1504,6 +1524,12 @@ impl DirectorWorker {
}
}
fn json_escape(input: &str) -> String {
input
.replace('\\', "\\\\")
.replace('"', "\\\"")
}
impl Worker for DirectorWorker {
fn start_worker_thread(&mut self) {
let pool = self.base.pool.clone();

View File

@@ -642,8 +642,18 @@ pub const QUERY_GET_DIRECTORS_FOR_RESIGNATION_CHECK: &str = r#"
SELECT d.id,
d.employer_user_id,
d.director_character_id,
COALESCE(d.satisfaction, 0)::int AS satisfaction
COALESCE(d.satisfaction, 0)::int AS satisfaction,
COALESCE(d.branch_id, -1)::int AS branch_id,
COALESCE(b.region_id, -1)::int AS region_id,
COALESCE(NULLIF(TRIM(r.name::text), ''), COALESCE(b.region_id, -1)::text) AS region_label,
(
NOW() >= (
GREATEST(COALESCE(d.updated_at, d.created_at), d.created_at) + INTERVAL '3 days'
)
) AS resignation_allowed
FROM falukant_data.director d
LEFT JOIN falukant_data.branch b ON b.id = d.branch_id
LEFT JOIN falukant_data.region r ON r.id = b.region_id
WHERE d.employer_user_id IS NOT NULL;
"#;