mirror of
https://github.com/atuinsh/atuin.git
synced 2025-03-13 14:39:26 +01:00
I'd like to tidy up the root a little, and it's nice to have all the rust crates in one place
44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
use axum::{extract::State, http::StatusCode, Json};
|
|
use tracing::instrument;
|
|
|
|
use super::{ErrorResponse, ErrorResponseStatus, RespExt};
|
|
use crate::router::{AppState, UserAuth};
|
|
use atuin_server_database::Database;
|
|
|
|
use atuin_common::api::*;
|
|
|
|
const VERSION: &str = env!("CARGO_PKG_VERSION");
|
|
|
|
#[instrument(skip_all, fields(user.id = user.id))]
|
|
pub async fn status<DB: Database>(
|
|
UserAuth(user): UserAuth,
|
|
state: State<AppState<DB>>,
|
|
) -> Result<Json<StatusResponse>, ErrorResponseStatus<'static>> {
|
|
let db = &state.0.database;
|
|
|
|
let deleted = db.deleted_history(&user).await.unwrap_or(vec![]);
|
|
|
|
let count = match db.count_history_cached(&user).await {
|
|
// By default read out the cached value
|
|
Ok(count) => count,
|
|
|
|
// If that fails, fallback on a full COUNT. Cache is built on a POST
|
|
// only
|
|
Err(_) => match db.count_history(&user).await {
|
|
Ok(count) => count,
|
|
Err(_) => {
|
|
return Err(ErrorResponse::reply("failed to query history count")
|
|
.with_status(StatusCode::INTERNAL_SERVER_ERROR))
|
|
}
|
|
},
|
|
};
|
|
|
|
Ok(Json(StatusResponse {
|
|
count,
|
|
deleted,
|
|
username: user.username,
|
|
version: VERSION.to_string(),
|
|
page_size: state.settings.page_size,
|
|
}))
|
|
}
|