revolt_database/models/policy_changes/ops/
reference.rs1use 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 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 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}