Refactor ArrivedTransport struct and SQL query in TransportWorker: Updated the ArrivedTransport struct to include source and target branch IDs, and user ID for notifications. Modified the SQL query to join with source and target branches, enhancing transport data retrieval and notification capabilities.

This commit is contained in:
Torsten Schulz (local)
2025-12-05 14:15:22 +01:00
parent 58436bc016
commit d03d865f75

View File

@@ -10,11 +10,13 @@ use super::base::{BaseWorker, Worker, WorkerState};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct ArrivedTransport { struct ArrivedTransport {
id: i32, id: i32,
branch_id: i32, source_branch_id: Option<i32>, // NULL wenn kein Branch in Source-Region
target_branch_id: i32,
product_id: Option<i32>, // NULL für leere Transporte product_id: Option<i32>, // NULL für leere Transporte
size: i32, size: i32,
vehicle_id: i32, vehicle_id: i32,
distance: f64, distance: f64,
user_id: i32, // User-ID für Notifications
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@@ -34,8 +36,12 @@ const QUERY_GET_ARRIVED_TRANSPORTS: &str = r#"
t.product_id, t.product_id,
t.size, t.size,
t.vehicle_id, t.vehicle_id,
b.id AS branch_id, t.source_region_id,
rd.distance AS distance t.target_region_id,
b_target.id AS target_branch_id,
b_source.id AS source_branch_id,
rd.distance AS distance,
v.falukant_user_id AS user_id
FROM falukant_data.transport AS t FROM falukant_data.transport AS t
JOIN falukant_data.vehicle AS v JOIN falukant_data.vehicle AS v
ON v.id = t.vehicle_id ON v.id = t.vehicle_id
@@ -47,9 +53,12 @@ const QUERY_GET_ARRIVED_TRANSPORTS: &str = r#"
OR (rd.source_region_id = t.target_region_id OR (rd.source_region_id = t.target_region_id
AND rd.target_region_id = t.source_region_id)) AND rd.target_region_id = t.source_region_id))
AND (rd.transport_mode = vt.transport_mode OR rd.transport_mode IS NULL) AND (rd.transport_mode = vt.transport_mode OR rd.transport_mode IS NULL)
LEFT JOIN falukant_data.branch AS b LEFT JOIN falukant_data.branch AS b_target
ON b.region_id = t.target_region_id ON b_target.region_id = t.target_region_id
AND b.falukant_user_id = v.falukant_user_id AND b_target.falukant_user_id = v.falukant_user_id
LEFT JOIN falukant_data.branch AS b_source
ON b_source.region_id = t.source_region_id
AND b_source.falukant_user_id = v.falukant_user_id
WHERE vt.speed > 0 WHERE vt.speed > 0
AND t.created_at AND t.created_at
+ (rd.distance / vt.speed::double precision) * INTERVAL '1 minute' + (rd.distance / vt.speed::double precision) * INTERVAL '1 minute'