Files
msgs/src/api/profile/get.rs
T
wt 9f0681563e
Continuous integration / Check (push) Successful in 42s
Continuous integration / Rustfmt (push) Successful in 34s
Continuous integration / build (push) Successful in 43s
Continuous integration / build-release (push) Successful in 1m12s
added swagget-ui
2026-02-15 18:04:11 +07:00

64 lines
1.8 KiB
Rust

use crate::model;
use crate::state;
use crate::utils;
use axum::extract::{Json, State};
use sqlx::Row;
use std::sync::Arc;
#[utoipa::path(
get,
path = "/api/profile",
responses(
(status = 200, description = "User profile information", body = UserProfile),
(status = 401, description = "Unauthorized", body = UserProfile)
),
security(("bearerAuth" = []))
)]
pub async fn profile_handler(
State(state): State<Arc<state::AppState>>,
headers: axum::http::HeaderMap,
) -> Json<model::UserProfile> {
// Extract token from header
let token = if let Some(auth_header) = headers.get("authorization") {
auth_header.to_str().unwrap_or("").replace("Bearer ", "")
} else {
return Json(model::UserProfile {
username: "user".to_string(),
phone: "+1234567890".to_string(),
avatar_url: None,
});
};
// Get current user from token
let username = match utils::verify_token(&state.db_pool, &token).await {
Ok(Some(user)) => user,
_ => {
return Json(model::UserProfile {
username: "user".to_string(),
phone: "+1234567890".to_string(),
avatar_url: None,
});
}
};
// Get user details
let user_result =
sqlx::query("SELECT username, phone, avatar_url FROM users WHERE username = ?")
.bind(&username)
.fetch_optional(&state.db_pool)
.await;
match user_result {
Ok(Some(row)) => Json(model::UserProfile {
username: row.get("username"),
phone: row.get("phone"),
avatar_url: row.get("avatar_url"),
}),
_ => Json(model::UserProfile {
username: "user".to_string(),
phone: "+1234567890".to_string(),
avatar_url: None,
}),
}
}