use revolt_result::Result;
use crate::{FieldsMember, Member, MemberCompositeKey, PartialMember};
mod mongodb;
mod reference;
#[async_trait]
pub trait AbstractServerMembers: Sync + Send {
async fn insert_member(&self, member: &Member) -> Result<()>;
async fn fetch_member(&self, server_id: &str, user_id: &str) -> Result<Member>;
async fn fetch_all_members<'a>(&self, server_id: &str) -> Result<Vec<Member>>;
async fn fetch_all_memberships<'a>(&self, user_id: &str) -> Result<Vec<Member>>;
async fn fetch_members<'a>(&self, server_id: &str, ids: &'a [String]) -> Result<Vec<Member>>;
async fn fetch_member_count(&self, server_id: &str) -> Result<usize>;
async fn fetch_server_count(&self, user_id: &str) -> Result<usize>;
async fn update_member(
&self,
id: &MemberCompositeKey,
partial: &PartialMember,
remove: Vec<FieldsMember>,
) -> Result<()>;
async fn delete_member(&self, id: &MemberCompositeKey) -> Result<()>;
}