better-auth-api 1.0.0-alpha.5

Plugin implementations for better-auth
use super::EndpointContext;
use better_auth_core::FieldValue;
use better_auth_core::{
    AuthResult, AuthSchema, CreateMember, Member, Organization, TeamMember, UserView,
};

pub(super) struct MemberAdapter<'a, 'b, S: AuthSchema>(&'a EndpointContext<'b, S>);

impl<'a, 'b, S: AuthSchema> MemberAdapter<'a, 'b, S> {
    pub(super) fn new(endpoint: &'a EndpointContext<'b, S>) -> Self {
        Self(endpoint)
    }

    pub(super) async fn get_user_by_id_value(
        &self,
        id: &FieldValue,
    ) -> AuthResult<Option<UserView>> {
        match self.0.transaction {
            Some(transaction) => transaction.get_user_by_id_value(id).await,
            None => self.0.auth.database.get_user_by_id_value(id).await,
        }
    }
    pub(super) async fn get_user_by_email(&self, email: &str) -> AuthResult<Option<UserView>> {
        match self.0.transaction {
            Some(transaction) => transaction.get_user_by_email(email).await,
            None => self.0.auth.database.get_user_by_email(email).await,
        }
    }
    pub(super) async fn get_member_value(
        &self,
        org: &FieldValue,
        user: &FieldValue,
    ) -> AuthResult<Option<Member>> {
        match self.0.transaction {
            Some(transaction) => transaction.get_member_value(org, user).await,
            None => self.0.auth.database.get_member_value(org, user).await,
        }
    }
    pub(super) async fn get_organization_by_id_value(
        &self,
        id: &FieldValue,
    ) -> AuthResult<Option<Organization>> {
        match self.0.transaction {
            Some(transaction) => transaction.get_organization_by_id_value(id).await,
            None => self.0.auth.database.get_organization_by_id_value(id).await,
        }
    }
    pub(super) async fn get_team_details_value(
        &self,
        id: &FieldValue,
        organization_id: &FieldValue,
    ) -> AuthResult<Option<better_auth_core::store::TeamDetails>> {
        match self.0.transaction {
            Some(transaction) => {
                transaction
                    .get_team_details_value(id, Some(organization_id), false)
                    .await
            }
            None => {
                self.0
                    .auth
                    .database
                    .get_team_details_value(id, Some(organization_id), false)
                    .await
            }
        }
    }
    pub(super) async fn count_organization_members(&self, id: &FieldValue) -> AuthResult<i64> {
        match self.0.transaction {
            Some(transaction) => transaction.count_organization_members_value(id).await,
            None => {
                self.0
                    .auth
                    .database
                    .count_organization_members_value(id)
                    .await
            }
        }
    }
    pub(super) async fn create_member(&self, input: CreateMember) -> AuthResult<Member> {
        match self.0.transaction {
            Some(transaction) => transaction.create_member(input).await,
            None => self.0.auth.database.create_member(input).await,
        }
    }
    pub(super) async fn add_team_member_value(
        &self,
        team: &FieldValue,
        user: &FieldValue,
        maximum: Option<usize>,
    ) -> AuthResult<Option<TeamMember>> {
        match self.0.transaction {
            Some(transaction) => transaction.add_team_member_value(team, user, maximum).await,
            None => {
                self.0
                    .auth
                    .database
                    .add_team_member_value(team, user, maximum)
                    .await
            }
        }
    }
    pub(super) async fn delete_member_for_user_value(
        &self,
        id: &FieldValue,
        organization_id: &FieldValue,
        user_id: &FieldValue,
    ) -> AuthResult<()> {
        match self.0.transaction {
            Some(transaction) => {
                transaction
                    .delete_member_for_user_value(id, organization_id, user_id)
                    .await
            }
            None => {
                self.0
                    .auth
                    .database
                    .delete_member_for_user_value(id, organization_id, user_id)
                    .await
            }
        }
    }
}