revolt_database/models/policy_changes/ops/
reference.rs

1use iso8601_timestamp::Timestamp;
2use revolt_result::Result;
3
4use crate::PolicyChange;
5use crate::ReferenceDb;
6
7use super::AbstractPolicyChange;
8
9#[async_trait]
10impl AbstractPolicyChange for ReferenceDb {
11    /// Fetch all policy changes
12    async fn fetch_policy_changes(&self) -> Result<Vec<PolicyChange>> {
13        let policy_changes = self.policy_changes.lock().await;
14        Ok(policy_changes.values().cloned().collect())
15    }
16
17    /// Acknowledge policy changes
18    async fn acknowledge_policy_changes(&self, user_id: &str) -> Result<()> {
19        let mut users = self.users.lock().await;
20        let user = users.get_mut(user_id).expect("user doesn't exist");
21        user.last_acknowledged_policy_change = self
22            .fetch_policy_changes()
23            .await?
24            .into_iter()
25            .map(|policy| policy.created_time)
26            .max()
27            .unwrap_or(Timestamp::UNIX_EPOCH);
28
29        Ok(())
30    }
31}