Skip to main content

mockforge_http/handlers/
risk_simulation.rs

1//! Compatibility state and engine adapter for internal risk simulation routes.
2//!
3//! Route behavior lives in intelligence. Public state fields and auth types stay
4//! available at their original HTTP paths. No admin UI consumes these endpoints.
5
6use crate::auth::risk_engine::{RiskAssessment, RiskEngine};
7use async_trait::async_trait;
8use std::{collections::HashMap, sync::Arc};
9
10pub use mockforge_intelligence::handlers::risk_simulation::*;
11
12/// Risk simulation state.
13#[derive(Clone)]
14pub struct RiskSimulationState {
15    /// Existing risk engine shared with the application's authentication code.
16    pub risk_engine: Arc<RiskEngine>,
17}
18
19impl RiskSimulationStateProvider for RiskSimulationState {
20    type Engine = RiskEngine;
21
22    fn risk_engine(&self) -> &Self::Engine {
23        &self.risk_engine
24    }
25}
26
27#[async_trait]
28impl RiskSimulationEngine for RiskEngine {
29    async fn set_simulated_risk(&self, user_id: String, score: Option<f64>) {
30        RiskEngine::set_simulated_risk(self, user_id, score).await;
31    }
32
33    async fn set_simulated_factors(&self, user_id: String, factors: HashMap<String, f64>) {
34        RiskEngine::set_simulated_factors(self, user_id, factors).await;
35    }
36
37    async fn clear_simulated_risk(&self, user_id: &str) {
38        RiskEngine::clear_simulated_risk(self, user_id).await;
39    }
40
41    async fn assess_risk(&self, user_id: &str, factors: &HashMap<String, f64>) -> RiskAssessment {
42        RiskEngine::assess_risk(self, user_id, factors).await
43    }
44}