revolt_database/models/server_bans/ops/
reference.rs1use revolt_result::Result;
2
3use crate::ReferenceDb;
4use crate::{MemberCompositeKey, ServerBan};
5
6use super::AbstractServerBans;
7
8#[async_trait]
9impl AbstractServerBans for ReferenceDb {
10 async fn insert_ban(&self, ban: &ServerBan) -> Result<()> {
12 let mut server_bans = self.server_bans.lock().await;
13 if server_bans.contains_key(&ban.id) {
14 Err(create_database_error!("insert", "ban"))
15 } else {
16 server_bans.insert(ban.id.clone(), ban.clone());
17 Ok(())
18 }
19 }
20
21 async fn fetch_ban(&self, server_id: &str, user_id: &str) -> Result<ServerBan> {
23 let server_bans = self.server_bans.lock().await;
24 server_bans
25 .get(&MemberCompositeKey {
26 server: server_id.to_string(),
27 user: user_id.to_string(),
28 })
29 .cloned()
30 .ok_or_else(|| create_error!(NotFound))
31 }
32
33 async fn fetch_bans(&self, server_id: &str) -> Result<Vec<ServerBan>> {
35 let server_bans = self.server_bans.lock().await;
36 Ok(server_bans
37 .values()
38 .filter(|member| member.id.server == server_id)
39 .cloned()
40 .collect())
41 }
42
43 async fn delete_ban(&self, id: &MemberCompositeKey) -> Result<()> {
45 let mut server_bans = self.server_bans.lock().await;
46 if server_bans.remove(id).is_some() {
47 Ok(())
48 } else {
49 Err(create_error!(NotFound))
50 }
51 }
52}