1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use revolt_result::Result;

use crate::{Database, MemberCompositeKey, Server};

auto_derived!(
    /// Server Ban
    pub struct ServerBan {
        /// Unique member id
        #[serde(rename = "_id")]
        pub id: MemberCompositeKey,
        /// Reason for ban creation
        pub reason: Option<String>,
    }
);

impl ServerBan {
    /// Create ban
    pub async fn create(
        db: &Database,
        server: &Server,
        user_id: &str,
        reason: Option<String>,
    ) -> Result<ServerBan> {
        let ban = ServerBan {
            id: MemberCompositeKey {
                server: server.id.to_string(),
                user: user_id.to_string(),
            },
            reason,
        };

        db.insert_ban(&ban).await?;
        Ok(ban)
    }
}