refactor(domain): remove ap_id/inbox_url from User and Thought; use ActivityPubRepository lookups

This commit is contained in:
2026-05-15 13:21:21 +02:00
parent bf3e336d0f
commit e935c8973e
13 changed files with 131 additions and 135 deletions

View File

@@ -19,6 +19,7 @@ use crate::{
};
use async_trait::async_trait;
use chrono::Utc;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use url;
@@ -35,6 +36,12 @@ pub struct TestStore {
pub top_friends: Arc<Mutex<Vec<TopFriend>>>,
pub notifications: Arc<Mutex<Vec<Notification>>>,
pub events: Arc<Mutex<Vec<DomainEvent>>>,
/// AP URL → UserId for remote actors (used by find_remote_actor_id / intern_remote_actor)
pub actor_ap_ids: Arc<Mutex<HashMap<String, UserId>>>,
/// ThoughtId → AP object URL (used by get_thought_ap_id)
pub thought_ap_ids: Arc<Mutex<HashMap<ThoughtId, String>>>,
/// UserId → ActorApUrls (used by get_actor_ap_urls)
pub actor_ap_urls: Arc<Mutex<HashMap<UserId, ActorApUrls>>>,
}
#[async_trait]
@@ -802,14 +809,12 @@ impl ActivityPubRepository for TestStore {
&self,
actor_ap_url: &url::Url,
) -> Result<Option<UserId>, DomainError> {
let url = actor_ap_url.to_string();
Ok(self
.users
.actor_ap_ids
.lock()
.unwrap()
.iter()
.find(|u| u.ap_id.as_deref() == Some(&url))
.map(|u| u.id.clone()))
.get(actor_ap_url.as_str())
.cloned())
}
async fn intern_remote_actor(&self, actor_ap_url: &url::Url) -> Result<UserId, DomainError> {
if let Some(uid) = self.find_remote_actor_id(actor_ap_url).await? {
@@ -831,12 +836,14 @@ impl ActivityPubRepository for TestStore {
header_url: None,
custom_css: None,
local: false,
ap_id: Some(actor_ap_url.to_string()),
inbox_url: None,
created_at: chrono::Utc::now(),
updated_at: chrono::Utc::now(),
};
self.users.lock().unwrap().push(user);
self.actor_ap_ids
.lock()
.unwrap()
.insert(actor_ap_url.to_string(), uid.clone());
Ok(uid)
}
async fn update_remote_actor_display(
@@ -884,15 +891,15 @@ impl ActivityPubRepository for TestStore {
}
async fn get_thought_ap_id(
&self,
_thought_id: &ThoughtId,
thought_id: &ThoughtId,
) -> Result<Option<String>, DomainError> {
Ok(None)
Ok(self.thought_ap_ids.lock().unwrap().get(thought_id).cloned())
}
async fn get_actor_ap_urls(
&self,
_user_id: &UserId,
user_id: &UserId,
) -> Result<Option<ActorApUrls>, DomainError> {
Ok(None)
Ok(self.actor_ap_urls.lock().unwrap().get(user_id).cloned())
}
}