openauth-plugins 0.0.4

Official OpenAuth plugin modules.
Documentation
use openauth_core::db::{DbValue, FindOne, Update, Where};
use openauth_core::error::OpenAuthError;

use super::OrganizationStore;

impl<'a> OrganizationStore<'a> {
    pub async fn set_active_organization(
        &self,
        token: &str,
        organization_id: Option<&str>,
    ) -> Result<(), OpenAuthError> {
        self.adapter()
            .update(
                Update::new("session")
                    .where_clause(Where::new("token", DbValue::String(token.to_owned())))
                    .data(
                        "activeOrganizationId",
                        organization_id
                            .map(|value| DbValue::String(value.to_owned()))
                            .unwrap_or(DbValue::Null),
                    ),
            )
            .await?;
        Ok(())
    }

    pub async fn active_organization_id(
        &self,
        token: &str,
    ) -> Result<Option<String>, OpenAuthError> {
        let Some(record) = self
            .adapter()
            .find_one(
                FindOne::new("session")
                    .where_clause(Where::new("token", DbValue::String(token.to_owned()))),
            )
            .await?
        else {
            return Ok(None);
        };
        crate::organization::models::optional_string(&record, "activeOrganizationId").and_then(
            |value| match value {
                Some(value) => Ok(Some(value)),
                None => {
                    crate::organization::models::optional_string(&record, "active_organization_id")
                }
            },
        )
    }
}