use models::users::user; use models::users::user_emails; use sea_orm::{ColumnTrait, EntityTrait, QueryFilter}; use uuid::Uuid; 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 { 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, }) }