revolt_database/models/channels/
ops.rs

1use crate::{revolt_result::Result, Channel, FieldsChannel, PartialChannel};
2use revolt_permissions::OverrideField;
3
4#[cfg(feature = "mongodb")]
5mod mongodb;
6mod reference;
7
8#[async_trait]
9pub trait AbstractChannels: Sync + Send {
10    /// Insert a new channel in the database
11    async fn insert_channel(&self, channel: &Channel) -> Result<()>;
12
13    /// Fetch a channel from the database
14    async fn fetch_channel(&self, channel_id: &str) -> Result<Channel>;
15
16    /// Fetch all channels from the database
17    async fn fetch_channels<'a>(&self, ids: &'a [String]) -> Result<Vec<Channel>>;
18
19    /// Fetch all direct messages for a user
20    async fn find_direct_messages(&self, user_id: &str) -> Result<Vec<Channel>>;
21
22    // Fetch saved messages channel
23    async fn find_saved_messages_channel(&self, user_id: &str) -> Result<Channel>;
24
25    // Fetch direct message channel (DM or Saved Messages)
26    async fn find_direct_message_channel(&self, user_a: &str, user_b: &str) -> Result<Channel>;
27
28    /// Insert a user to a group
29    async fn add_user_to_group(&self, channel_id: &str, user_id: &str) -> Result<()>;
30
31    /// Insert channel role permissions
32    async fn set_channel_role_permission(
33        &self,
34        channel_id: &str,
35        role_id: &str,
36        permissions: OverrideField,
37    ) -> Result<()>;
38
39    // Update channel
40    async fn update_channel(
41        &self,
42        id: &str,
43        channel_id: &PartialChannel,
44        remove: Vec<FieldsChannel>,
45    ) -> Result<()>;
46
47    // Remove a user from a group
48    async fn remove_user_from_group(&self, channel_id: &str, user_id: &str) -> Result<()>;
49
50    // Delete a channel
51    async fn delete_channel(&self, channel_id: &Channel) -> Result<()>;
52}