From a56b12621d9f8c34017995a518e61ef7ee2b0f64 Mon Sep 17 00:00:00 2001 From: rtkay123 Date: Sat, 12 Jul 2025 16:46:32 +0200 Subject: feat: get user --- src/server/routes/users/get_user.rs | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/server/routes/users/get_user.rs (limited to 'src/server/routes/users/get_user.rs') diff --git a/src/server/routes/users/get_user.rs b/src/server/routes/users/get_user.rs new file mode 100644 index 0000000..8020923 --- /dev/null +++ b/src/server/routes/users/get_user.rs @@ -0,0 +1,57 @@ +use activitypub_federation::{ + axum::json::FederationJson, config::Data, protocol::context::WithContext, traits::Object, +}; +use axum::{debug_handler, extract::Path, http::StatusCode, response::IntoResponse}; + +use crate::{error::AppError, state::AppHandle}; + +#[debug_handler] +pub async fn http_get_user( + Path(name): Path, + data: Data, +) -> Result { + let read = data.users.read().await; + if let Some(a) = read + .iter() + .find(|value| value.username.eq(&name)) + .map(ToOwned::to_owned) + { + let json_user = a.into_json(&data).await?; + Ok(( + StatusCode::OK, + FederationJson(WithContext::new_default(json_user)), + ) + .into_response()) + } else { + Ok((StatusCode::NOT_FOUND, "").into_response()) + } +} + +#[cfg(test)] +mod tests { + use axum::{ + body::Body, + http::{Request, StatusCode}, + }; + use tower::ServiceExt; + + use crate::{server, state::AppState}; + + #[tokio::test] + async fn get_user() { + let state = AppState::new().await.unwrap(); + let app = server::router(state); + + let response = app + .oneshot( + Request::builder() + .uri("/users/sellershut") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + } +} -- cgit v1.2.3