diff options
Diffstat (limited to 'src/api/users.rs')
-rw-r--r-- | src/api/users.rs | 82 |
1 files changed, 80 insertions, 2 deletions
diff --git a/src/api/users.rs b/src/api/users.rs index e3c992b..7d1f006 100644 --- a/src/api/users.rs +++ b/src/api/users.rs @@ -1,8 +1,8 @@ -use crate::types::{ +use crate::{types::{ extract::{AuthorizedUser, Check, CheckResult, Json, Png}, http::ResponseCode, user::User, -}; +}, public::docs::{EndpointDocumentation, EndpointMethod}}; use axum::{ response::Response, routing::{post, put}, @@ -10,6 +10,24 @@ use axum::{ }; use serde::Deserialize; +pub const USERS_LOAD: EndpointDocumentation = EndpointDocumentation { + uri: "/api/users/load", + method: EndpointMethod::Post, + description: "Loads a requested set of users", + body: Some(r#" + { + "ids": [0, 3, 7] + } + "#), + responses: &[ + (200, "Returns users in <span>application/json</span>"), + (400, "Body does not match parameters"), + (401, "Unauthorized"), + (500, "Failed to fetch users") + ], + cookie: Some("auth"), +}; + #[derive(Deserialize)] struct UserLoadRequest { ids: Vec<u64>, @@ -33,6 +51,25 @@ async fn load_batch( ResponseCode::Success.json(&json) } +pub const USERS_PAGE: EndpointDocumentation = EndpointDocumentation { + uri: "/api/users/page", + method: EndpointMethod::Post, + description: "Load a section of users from newest to oldest", + body: Some(r#" + { + "user_id": 3, + "page": 0 + } + "#), + responses: &[ + (200, "Returns users in <span>application/json</span>"), + (400, "Body does not match parameters"), + (401, "Unauthorized"), + (500, "Failed to fetch users") + ], + cookie: Some("auth"), +}; + #[derive(Deserialize)] struct UserPageReqiest { page: u64, @@ -59,6 +96,19 @@ async fn load_page( ResponseCode::Success.json(&json) } +pub const USERS_SELF: EndpointDocumentation = EndpointDocumentation { + uri: "/api/users/self", + method: EndpointMethod::Post, + description: "Returns current authenticated user (whoami)", + body: None, + responses: &[ + (200, "Successfully executed SQL query"), + (401, "Unauthorized"), + (500, "Failed to fetch user") + ], + cookie: Some("auth"), +}; + async fn load_self(AuthorizedUser(user): AuthorizedUser) -> Response { let Ok(json) = serde_json::to_string(&user) else { return ResponseCode::InternalServerError.text("Failed to fetch user") @@ -67,6 +117,20 @@ async fn load_self(AuthorizedUser(user): AuthorizedUser) -> Response { ResponseCode::Success.json(&json) } +pub const USERS_AVATAR: EndpointDocumentation = EndpointDocumentation { + uri: "/api/users/avatar", + method: EndpointMethod::Put, + description: "Set your current profile avatar", + body: Some("PNG sent as a binary blob"), + responses: &[ + (200, "Successfully updated avatar"), + (400, "Invalid PNG or disallowed size"), + (401, "Unauthorized"), + (500, "Failed to update avatar") + ], + cookie: Some("auth"), +}; + async fn avatar(AuthorizedUser(user): AuthorizedUser, Png(img): Png) -> Response { let path = format!("./public/image/custom/avatar/{}.png", user.user_id); @@ -77,6 +141,20 @@ async fn avatar(AuthorizedUser(user): AuthorizedUser, Png(img): Png) -> Response ResponseCode::Success.text("Successfully updated avatar") } +pub const USERS_BANNER: EndpointDocumentation = EndpointDocumentation { + uri: "/api/users/banner", + method: EndpointMethod::Put, + description: "Set your current profile banner", + body: Some("PNG sent as a binary blob"), + responses: &[ + (200, "Successfully updated banner"), + (400, "Invalid PNG or disallowed size"), + (401, "Unauthorized"), + (500, "Failed to update banner") + ], + cookie: Some("auth"), +}; + async fn banner(AuthorizedUser(user): AuthorizedUser, Png(img): Png) -> Response { let path = format!("./public/image/custom/banner/{}.png", user.user_id); |