summaryrefslogtreecommitdiff
path: root/src/api/users.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/users.rs')
-rw-r--r--src/api/users.rs82
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);