diff --git a/src/alerts.rs b/src/alerts.rs index c2be4ed..82f5568 100644 --- a/src/alerts.rs +++ b/src/alerts.rs @@ -50,14 +50,36 @@ pub async fn get_alerts(world_id: i32) -> Result<(Vec, Vec), ()> { } } - let alerts: Vec = alerts.into_iter().map(|(_, v)| v).collect(); + let alerts = alerts + .into_iter() + .map(|(_, alert)| alert) + .collect::>(); + + let newest_alert_by_zone = alerts + .clone() + .into_iter() + .fold(HashMap::::new(), |mut map, alert| { + if let Some(current_alert) = map.get_mut(&alert.zone) { + if alert.start_time > current_alert.start_time { + *current_alert = alert; + } + } else { + map.insert(alert.zone, alert); + } + + map + }) + .into_iter() + .map(|(_, alert)| alert) + .collect::>(); + let active_alerts: Vec = alerts .clone() .into_iter() .filter(|alert| alert.end_time.is_none()) .collect(); - Ok((active_alerts, alerts)) + Ok((active_alerts, newest_alert_by_zone)) } #[derive(Deserialize)]