22 lines
910 B
Rust
22 lines
910 B
Rust
use async_trait::async_trait;
|
|
use domain::{errors::DomainError, models::RemoteActorInfo, ports::FederationAdminQuery};
|
|
|
|
use super::PostgresFederationRepository;
|
|
|
|
#[async_trait]
|
|
impl FederationAdminQuery for PostgresFederationRepository {
|
|
async fn list_all_followed_remote_actors(&self) -> Result<Vec<RemoteActorInfo>, DomainError> {
|
|
let rows = sqlx::query_as::<_, (String, String, Option<String>)>(
|
|
"SELECT DISTINCT ar.url, ar.handle, ar.display_name FROM ap_remote_actors ar JOIN ap_following f ON f.remote_actor_url = ar.url WHERE f.status = 'accepted'",
|
|
).fetch_all(&self.pool).await.map_err(|e| DomainError::InfrastructureError(e.to_string()))?;
|
|
Ok(rows
|
|
.into_iter()
|
|
.map(|(url, handle, display_name)| RemoteActorInfo {
|
|
url,
|
|
handle,
|
|
display_name,
|
|
})
|
|
.collect())
|
|
}
|
|
}
|