revolt_database/models/server_bans/ops/
mongodb.rs

1use revolt_result::Result;
2
3use crate::MongoDb;
4use crate::{MemberCompositeKey, ServerBan};
5
6use super::AbstractServerBans;
7
8static COL: &str = "server_bans";
9
10#[async_trait]
11impl AbstractServerBans for MongoDb {
12    /// Insert new ban into database
13    async fn insert_ban(&self, ban: &ServerBan) -> Result<()> {
14        query!(self, insert_one, COL, &ban).map(|_| ())
15    }
16
17    /// Fetch a server ban by server and user id
18    async fn fetch_ban(&self, server_id: &str, user_id: &str) -> Result<ServerBan> {
19        query!(
20            self,
21            find_one,
22            COL,
23            doc! {
24                "_id.server": server_id,
25                "_id.user": user_id
26            }
27        )?
28        .ok_or_else(|| create_error!(NotFound))
29    }
30
31    /// Fetch all bans in a server
32    async fn fetch_bans(&self, server_id: &str) -> Result<Vec<ServerBan>> {
33        query!(
34            self,
35            find,
36            COL,
37            doc! {
38                "_id.server": server_id
39            }
40        )
41    }
42
43    /// Delete a ban from the database
44    async fn delete_ban(&self, id: &MemberCompositeKey) -> Result<()> {
45        query!(
46            self,
47            delete_one,
48            COL,
49            doc! {
50                "_id.server": &id.server,
51                "_id.user": &id.user
52            }
53        )
54        .map(|_| ())
55    }
56}