stateset_embedded/
fraud.rs1use stateset_core::{
21 CreateFraudAssessment, CreateFraudRule, FraudAssessment, FraudAssessmentFilter, FraudDecision,
22 FraudRule, FraudRuleFilter, FraudRuleId, OrderId, Result, UpdateFraudRule,
23};
24use stateset_db::{Database, DatabaseCapability};
25use std::sync::Arc;
26
27pub struct Fraud {
29 db: Arc<dyn Database>,
30}
31
32impl std::fmt::Debug for Fraud {
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 f.debug_struct("Fraud").finish_non_exhaustive()
35 }
36}
37
38impl Fraud {
39 pub(crate) fn new(db: Arc<dyn Database>) -> Self {
40 Self { db }
41 }
42
43 #[must_use]
45 pub fn is_supported(&self) -> bool {
46 self.db.supports_capability(DatabaseCapability::Fraud)
47 }
48
49 fn ensure_supported(&self) -> Result<()> {
50 self.db.ensure_capability(DatabaseCapability::Fraud)
51 }
52
53 pub fn create_assessment(&self, input: CreateFraudAssessment) -> Result<FraudAssessment> {
74 self.ensure_supported()?;
75 self.db.fraud().create_assessment(input)
76 }
77
78 pub fn get_assessment(&self, order_id: OrderId) -> Result<Option<FraudAssessment>> {
80 self.ensure_supported()?;
81 self.db.fraud().get_assessment(order_id)
82 }
83
84 pub fn list_assessments(&self, filter: FraudAssessmentFilter) -> Result<Vec<FraudAssessment>> {
86 self.ensure_supported()?;
87 self.db.fraud().list_assessments(filter)
88 }
89
90 pub fn review_assessment(
92 &self,
93 order_id: OrderId,
94 decision: FraudDecision,
95 reviewer: String,
96 notes: Option<String>,
97 ) -> Result<FraudAssessment> {
98 self.ensure_supported()?;
99 self.db.fraud().review_assessment(order_id, decision, reviewer, notes)
100 }
101
102 pub fn create_rule(&self, input: CreateFraudRule) -> Result<FraudRule> {
108 self.ensure_supported()?;
109 self.db.fraud().create_rule(input)
110 }
111
112 pub fn get_rule(&self, id: FraudRuleId) -> Result<Option<FraudRule>> {
114 self.ensure_supported()?;
115 self.db.fraud().get_rule(id)
116 }
117
118 pub fn update_rule(&self, id: FraudRuleId, input: UpdateFraudRule) -> Result<FraudRule> {
120 self.ensure_supported()?;
121 self.db.fraud().update_rule(id, input)
122 }
123
124 pub fn list_rules(&self, filter: FraudRuleFilter) -> Result<Vec<FraudRule>> {
126 self.ensure_supported()?;
127 self.db.fraud().list_rules(filter)
128 }
129
130 pub fn delete_rule(&self, id: FraudRuleId) -> Result<()> {
132 self.ensure_supported()?;
133 self.db.fraud().delete_rule(id)
134 }
135
136 pub fn get_active_rules(&self) -> Result<Vec<FraudRule>> {
138 self.ensure_supported()?;
139 self.db.fraud().get_active_rules()
140 }
141}