diff options
Diffstat (limited to 'src/api/image.rs')
-rw-r--r-- | src/api/image.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/api/image.rs b/src/api/image.rs new file mode 100644 index 0000000..84eccc7 --- /dev/null +++ b/src/api/image.rs @@ -0,0 +1,54 @@ +use axum::{extract::Query, response::Response, routing::get, Router, http::StatusCode}; +use serde::Deserialize; + +use crate::types::http::ResponseCode; + + + +#[derive(Deserialize)] +struct AvatarRequest { + user_id: u64, +} + +async fn avatar(params: Option<Query<AvatarRequest>>) -> Response { + + let Some(params) = params else { + return ResponseCode::BadRequest.text("Missing query paramaters"); + }; + + let custom = format!("/image/custom/avatar/{}.png", params.user_id); + let default = format!("/image/default/{}.png", params.user_id % 25); + + let file = ResponseCode::Success.file(&custom).await; + if file.status() != StatusCode::OK { + return ResponseCode::Success.file(&default).await + } + file +} + +#[derive(Deserialize)] +struct BannerRequest { + user_id: u64, +} + +async fn banner(params: Option<Query<BannerRequest>>) -> Response { + + let Some(params) = params else { + return ResponseCode::BadRequest.text("Missing query paramaters"); + }; + + let custom = format!("/image/custom/banner/{}.png", params.user_id); + + let file = ResponseCode::Success.file(&custom).await; + if file.status() != StatusCode::OK { + return ResponseCode::NotFound.text("User does not have a custom banner") + } + file +} + + +pub fn router() -> Router { + Router::new() + .route("/avatar", get(avatar)) + .route("/banner", get(banner)) +} |