feat: add POST /federation/me/move endpoint
This commit is contained in:
@@ -736,6 +736,17 @@ impl FederationFollowPort for ApFederationAdapter {
|
|||||||
.map(|v| v.into_iter().map(k_ap_actor_to_domain).collect())
|
.map(|v| v.into_iter().map(k_ap_actor_to_domain).collect())
|
||||||
.map_err(|e| DomainError::ExternalService(e.to_string()))
|
.map_err(|e| DomainError::ExternalService(e.to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn broadcast_move(
|
||||||
|
&self,
|
||||||
|
user_id: &UserId,
|
||||||
|
new_actor_url: url::Url,
|
||||||
|
) -> Result<(), DomainError> {
|
||||||
|
self.inner
|
||||||
|
.broadcast_move(user_id.as_uuid(), new_actor_url)
|
||||||
|
.await
|
||||||
|
.map_err(|e| DomainError::Internal(e.to_string()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── FederationFollowRequestPort ───────────────────────────────────────────────
|
// ── FederationFollowRequestPort ───────────────────────────────────────────────
|
||||||
|
|||||||
@@ -287,6 +287,11 @@ pub trait FederationFollowPort: Send + Sync {
|
|||||||
) -> Result<(), DomainError>;
|
) -> Result<(), DomainError>;
|
||||||
async fn get_remote_following(&self, user_id: &UserId)
|
async fn get_remote_following(&self, user_id: &UserId)
|
||||||
-> Result<Vec<RemoteActor>, DomainError>;
|
-> Result<Vec<RemoteActor>, DomainError>;
|
||||||
|
async fn broadcast_move(
|
||||||
|
&self,
|
||||||
|
user_id: &UserId,
|
||||||
|
new_actor_url: url::Url,
|
||||||
|
) -> Result<(), DomainError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
|
|||||||
@@ -22,6 +22,11 @@ pub struct HandleBody {
|
|||||||
pub handle: String,
|
pub handle: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct MoveBody {
|
||||||
|
pub new_actor_url: String,
|
||||||
|
}
|
||||||
|
|
||||||
deps_struct!(FederationManagementDeps {
|
deps_struct!(FederationManagementDeps {
|
||||||
federation: FederationActionPort,
|
federation: FederationActionPort,
|
||||||
follows: FollowRepository,
|
follows: FollowRepository,
|
||||||
@@ -107,3 +112,17 @@ pub async fn delete_following(
|
|||||||
.await?;
|
.await?;
|
||||||
Ok(StatusCode::NO_CONTENT)
|
Ok(StatusCode::NO_CONTENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn post_move_account(
|
||||||
|
Deps(d): Deps<FederationManagementDeps>,
|
||||||
|
AuthUser(uid): AuthUser,
|
||||||
|
Json(body): Json<MoveBody>,
|
||||||
|
) -> Result<StatusCode, ApiError> {
|
||||||
|
let new_url = url::Url::parse(&body.new_actor_url)
|
||||||
|
.map_err(|_| ApiError::BadRequest("invalid new_actor_url".into()))?;
|
||||||
|
d.federation
|
||||||
|
.broadcast_move(&uid, new_url)
|
||||||
|
.await
|
||||||
|
.map_err(ApiError::from)?;
|
||||||
|
Ok(StatusCode::NO_CONTENT)
|
||||||
|
}
|
||||||
|
|||||||
@@ -104,6 +104,10 @@ pub fn router() -> Router<AppState> {
|
|||||||
get(federation_management::get_remote_following)
|
get(federation_management::get_remote_following)
|
||||||
.delete(federation_management::delete_following),
|
.delete(federation_management::delete_following),
|
||||||
)
|
)
|
||||||
|
.route(
|
||||||
|
"/federation/me/move",
|
||||||
|
post(federation_management::post_move_account),
|
||||||
|
)
|
||||||
.route("/tags/popular", get(feed::get_popular_tags))
|
.route("/tags/popular", get(feed::get_popular_tags))
|
||||||
.route("/tags/{name}", get(feed::tag_thoughts_handler))
|
.route("/tags/{name}", get(feed::tag_thoughts_handler))
|
||||||
// notifications
|
// notifications
|
||||||
|
|||||||
Reference in New Issue
Block a user