feat: refactor user profile handling and integrate ApProfileField structure

This commit is contained in:
2026-05-13 22:59:38 +02:00
parent 815178e6a4
commit fdd61ae701
11 changed files with 94 additions and 51 deletions

View File

@@ -31,7 +31,6 @@ pub async fn wire(
review_store: std::sync::Arc<dyn RemoteReviewRepository>,
remote_watchlist_repo: std::sync::Arc<dyn domain::ports::RemoteWatchlistRepository>,
user_repo: std::sync::Arc<dyn domain::ports::UserRepository>,
profile_fields_repo: std::sync::Arc<dyn domain::ports::UserProfileFieldsRepository>,
movie_repo: std::sync::Arc<dyn domain::ports::MovieRepository>,
review_repo: std::sync::Arc<dyn domain::ports::ReviewRepository>,
diary_repo: std::sync::Arc<dyn domain::ports::DiaryRepository>,
@@ -67,7 +66,7 @@ pub async fn wire(
let concrete = std::sync::Arc::new(
ActivityPubService::new(
federation_repo,
std::sync::Arc::new(DomainUserRepoAdapter::new(user_repo, profile_fields_repo, base_url.clone())),
std::sync::Arc::new(DomainUserRepoAdapter::new(user_repo, base_url.clone())),
composite,
base_url.clone(),
allow_registration,

View File

@@ -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> {