use axum::{Router, response::Response, routing::post}; use serde::Deserialize; use crate::types::{extract::{AuthorizedUser, Json, Check, CheckResult}, response::ResponseCode, user::User}; #[derive(Deserialize)] struct UserLoadRequest { ids: Vec } impl Check for UserLoadRequest { fn check(&self) -> CheckResult { Ok(()) } } async fn load_batch(AuthorizedUser(_user): AuthorizedUser, Json(body): Json) -> Response { let users = User::from_user_ids(body.ids); let Ok(json) = serde_json::to_string(&users) else { return ResponseCode::InternalServerError.msg("Failed to fetch users") }; ResponseCode::Success.json(&json) } #[derive(Deserialize)] struct UserPageReqiest { page: u64 } impl Check for UserPageReqiest { fn check(&self) -> CheckResult { Ok(()) } } async fn load_page(AuthorizedUser(_user): AuthorizedUser, Json(body): Json) -> Response { let Ok(users) = User::from_user_page(body.page) else { return ResponseCode::InternalServerError.msg("Failed to fetch users") }; let Ok(json) = serde_json::to_string(&users) else { return ResponseCode::InternalServerError.msg("Failed to fetch users") }; ResponseCode::Success.json(&json) } async fn load_self(AuthorizedUser(user): AuthorizedUser) -> Response { let Ok(json) = serde_json::to_string(&user) else { return ResponseCode::InternalServerError.msg("Failed to fetch user") }; ResponseCode::Success.json(&json) } pub fn router() -> Router { Router::new() .route("/load", post(load_batch)) .route("/self", post(load_self)) .route("/page", post(load_page)) }