feat: refactor user profile handling and integrate ApProfileField structure
This commit is contained in:
@@ -1,30 +1,27 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use activitypub_base::{ApUser, ApUserRepository};
|
||||
use activitypub_base::{ApProfileField, ApUser, ApUserRepository};
|
||||
use async_trait::async_trait;
|
||||
use domain::{
|
||||
models::ProfileField,
|
||||
ports::{UserProfileFieldsRepository, UserRepository},
|
||||
ports::UserRepository,
|
||||
value_objects::UserId,
|
||||
};
|
||||
use url::Url;
|
||||
|
||||
pub struct DomainUserRepoAdapter {
|
||||
pub repo: Arc<dyn UserRepository>,
|
||||
pub fields_repo: Arc<dyn UserProfileFieldsRepository>,
|
||||
pub base_url: String,
|
||||
}
|
||||
|
||||
impl DomainUserRepoAdapter {
|
||||
pub fn new(
|
||||
repo: Arc<dyn UserRepository>,
|
||||
fields_repo: Arc<dyn UserProfileFieldsRepository>,
|
||||
base_url: String,
|
||||
) -> Self {
|
||||
Self { repo, fields_repo, base_url }
|
||||
Self { repo, base_url }
|
||||
}
|
||||
|
||||
fn build_user(&self, u: &domain::models::User, fields: Vec<ProfileField>) -> ApUser {
|
||||
fn build_user(&self, u: &domain::models::User) -> ApUser {
|
||||
let avatar_url = u.avatar_path().and_then(|p| {
|
||||
Url::parse(&format!("{}/images/{}", self.base_url, p)).ok()
|
||||
});
|
||||
@@ -40,7 +37,7 @@ impl DomainUserRepoAdapter {
|
||||
banner_url,
|
||||
also_known_as: u.also_known_as().map(|s| s.to_string()),
|
||||
profile_url,
|
||||
attachment: fields,
|
||||
attachment: u.profile_fields().iter().map(|f| ApProfileField { name: f.name.clone(), value: f.value.clone() }).collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,8 +50,7 @@ impl ApUserRepository for DomainUserRepoAdapter {
|
||||
Some(u) => u,
|
||||
None => return Ok(None),
|
||||
};
|
||||
let fields = self.fields_repo.get_fields(&user_id).await.unwrap_or_default();
|
||||
Ok(Some(self.build_user(&user, fields)))
|
||||
Ok(Some(self.build_user(&user)))
|
||||
}
|
||||
|
||||
async fn find_by_username(&self, username: &str) -> anyhow::Result<Option<ApUser>> {
|
||||
@@ -64,8 +60,7 @@ impl ApUserRepository for DomainUserRepoAdapter {
|
||||
Some(u) => u,
|
||||
None => return Ok(None),
|
||||
};
|
||||
let fields = self.fields_repo.get_fields(user.id()).await.unwrap_or_default();
|
||||
Ok(Some(self.build_user(&user, fields)))
|
||||
Ok(Some(self.build_user(&user)))
|
||||
}
|
||||
|
||||
async fn count_users(&self) -> anyhow::Result<usize> {
|
||||
|
||||
Reference in New Issue
Block a user