Skip to main content

revolt_database/models/servers/
ops.rs

1use revolt_result::Result;
2
3use crate::{FieldsRole, FieldsServer, PartialRole, PartialServer, Role, Server};
4
5#[cfg(feature = "mongodb")]
6mod mongodb;
7mod reference;
8
9#[async_trait]
10pub trait AbstractServers: Sync + Send {
11    /// Insert a new server into database
12    async fn insert_server(&self, server: &Server) -> Result<()>;
13
14    /// Fetch a server by its id
15    async fn fetch_server(&self, id: &str) -> Result<Server>;
16
17    /// Fetch a servers by their ids
18    async fn fetch_servers<'a>(&self, ids: &'a [String]) -> Result<Vec<Server>>;
19
20    async fn fetch_owned_servers(&self, user_id: &str) -> Result<Vec<Server>>;
21
22    /// Update a server with new information
23    async fn update_server(
24        &self,
25        id: &str,
26        partial: &PartialServer,
27        remove: Vec<FieldsServer>,
28    ) -> Result<()>;
29
30    /// Delete a server by its id
31    async fn delete_server(&self, id: &str) -> Result<()>;
32
33    /// Insert a new role into server object
34    async fn insert_role(&self, server_id: &str, role: &Role) -> Result<()>;
35
36    /// Update an existing role on a server
37    async fn update_role(
38        &self,
39        server_id: &str,
40        role_id: &str,
41        partial: &PartialRole,
42        remove: Vec<FieldsRole>,
43    ) -> Result<()>;
44
45    /// Delete a role from a server
46    ///
47    /// Also updates channels and members.
48    async fn delete_role(&self, server_id: &str, role_id: &str) -> Result<()>;
49}