89109d2
use models::users::user;
use models::users::user_emails;
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
use crate::share::errors::GitError;
#[derive(Clone, Debug)]
pub struct GitIdentity {
pub name: String,
pub email: String,
}
pub async fn load_identity(db: &export::AppDatabase, uid: i64) -> Result<GitIdentity, GitError> {
let u = user::Entity::find_by_id(uid)
.one(db.read())
.await?
.ok_or(GitError::NotFound)?;
let email = user_emails::Entity::find()
.filter(user_emails::Column::UserId.eq(uid))
.filter(user_emails::Column::IsPrimary.eq(true))
.filter(user_emails::Column::IsActivated.eq(true))
.filter(user_emails::Column::DeletedAt.is_null())
.one(db.read())
.await?
.ok_or_else(|| GitError::InvalidArgument("no active primary email".to_string()))?;
let name = if u.display_name.trim().is_empty() {
u.username.clone()
} else {
u.display_name.clone()
};
Ok(GitIdentity {
name,
email: email.lower_email,
})
}