use revolt_database::{ util::{permissions::DatabasePermissionQuery, reference::Reference}, Database, User, }; use revolt_models::v0; use revolt_permissions::{calculate_user_permissions, UserPermission}; use revolt_result::Result; use rocket::State; use crate::util::json::Json; /// # Fetch User /// /// Retrieve a user's information. #[openapi(tag = "User Information")] #[get("/")] pub async fn fetch(db: &State, user: User, target: Reference<'_>) -> Result> { if user.id == target.id { return Ok(Json(user.into_self(false).await)); } let target = target.as_user(db).await?; let mut query = DatabasePermissionQuery::new(db, &user).user(&target); calculate_user_permissions(&mut query) .await .throw_if_lacking_user_permission(UserPermission::Access)?; Ok(Json(target.into(db, &user).await)) }