diff options
author | rtkay123 <dev@kanjala.com> | 2025-07-12 16:46:32 +0200 |
---|---|---|
committer | rtkay123 <dev@kanjala.com> | 2025-07-12 16:46:32 +0200 |
commit | a56b12621d9f8c34017995a518e61ef7ee2b0f64 (patch) | |
tree | 0a2ea448bffe44ad7724091dfd276b10ca671908 /src/server/routes/users/get_user.rs | |
parent | 93ce338cba3e4488fc36ea9159167884d6cd9eb9 (diff) | |
download | sellershut-a56b12621d9f8c34017995a518e61ef7ee2b0f64.tar.bz2 sellershut-a56b12621d9f8c34017995a518e61ef7ee2b0f64.zip |
feat: get user
Diffstat (limited to 'src/server/routes/users/get_user.rs')
-rw-r--r-- | src/server/routes/users/get_user.rs | 57 |
1 files changed, 57 insertions, 0 deletions
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<String>, + data: Data<AppHandle>, +) -> Result<impl IntoResponse, AppError> { + 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); + } +} |