use axum::{ extract::State, response::Json, http::StatusCode, Extension, }; use serde_json::{json, Value}; use crate::config::AppState; use crate::auth::claims::AccessClaims; use crate::models::user::UserRepository; pub async fn get_profile( State(state): State, Extension(claims): Extension, ) -> Result, (StatusCode, Json)> { let user_repo = UserRepository::new(state.db.collection("users")); let user = match user_repo.find_by_user_id(&claims.sub).await { Ok(Some(user)) => user, Ok(None) => { return Err(( StatusCode::NOT_FOUND, Json(json!({ "error": "User not found" })) )); } Err(e) => { return Err(( StatusCode::INTERNAL_SERVER_ERROR, Json(json!({ "error": format!("Database error: {}", e) })) )); } }; Ok(Json(json!({ "user_id": user.user_id, "email": user.email, "family_id": user.family_id, "profile_ids": user.profile_ids, "token_version": user.token_version, "created_at": user.created_at, "updated_at": user.updated_at }))) }