30 lines
887 B
Rust
30 lines
887 B
Rust
|
use axum::{extract::State, Json};
|
||
|
use http::StatusCode;
|
||
|
use tracing::instrument;
|
||
|
|
||
|
use super::{ErrorResponse, ErrorResponseStatus, RespExt};
|
||
|
use crate::{database::Database, models::User, router::AppState};
|
||
|
|
||
|
use atuin_common::api::*;
|
||
|
|
||
|
#[instrument(skip_all, fields(user.id = user.id))]
|
||
|
pub async fn status<DB: Database>(
|
||
|
user: User,
|
||
|
state: State<AppState<DB>>,
|
||
|
) -> Result<Json<StatusResponse>, ErrorResponseStatus<'static>> {
|
||
|
let db = &state.0.database;
|
||
|
|
||
|
let history_count = db.count_history_cached(&user).await;
|
||
|
let deleted = db.deleted_history(&user).await;
|
||
|
|
||
|
if history_count.is_err() || deleted.is_err() {
|
||
|
return Err(ErrorResponse::reply("failed to query history count")
|
||
|
.with_status(StatusCode::INTERNAL_SERVER_ERROR));
|
||
|
}
|
||
|
|
||
|
Ok(Json(StatusResponse {
|
||
|
count: history_count.unwrap(),
|
||
|
deleted: deleted.unwrap(),
|
||
|
}))
|
||
|
}
|