Add fetch metadata endpoint
This commit is contained in:
parent
c9ce7fe4db
commit
a392b95352
2 changed files with 52 additions and 0 deletions
|
|
@ -61,6 +61,19 @@ impl Database {
|
|||
})
|
||||
}
|
||||
|
||||
pub async fn get_latest_document_metadata(
|
||||
tx: &mut Transaction<'_>,
|
||||
id: &DocumentId,
|
||||
) -> Result<Option<DocumentVersionWithoutContent>> {
|
||||
Ok(sqlx::query_as::<_, DocumentVersionWithoutContent>(
|
||||
"SELECT vault_update_id, document_id, updated_date, user_id, device_id, length(content) AS content_size
|
||||
FROM documents WHERE document_id = ? ORDER BY vault_update_id DESC LIMIT 1",
|
||||
)
|
||||
.bind(id.hyphenated())
|
||||
.fetch_optional(&mut **tx)
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn get_document_version(
|
||||
&self,
|
||||
vault: &VaultId,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
use anyhow::anyhow;
|
||||
use axum::{
|
||||
Json,
|
||||
extract::{Path, State},
|
||||
};
|
||||
use log::debug;
|
||||
|
||||
use super::VaultPath;
|
||||
use crate::{
|
||||
app_state::{
|
||||
AppState,
|
||||
database::{
|
||||
Database,
|
||||
models::{DocumentId, DocumentVersionWithoutContent},
|
||||
},
|
||||
},
|
||||
errors::{SyncServerError, not_found_error, server_error},
|
||||
};
|
||||
|
||||
#[axum::debug_handler]
|
||||
pub async fn fetch_latest_document_metadata(
|
||||
Path((VaultPath(vault_id), document_id)): Path<(VaultPath, DocumentId)>,
|
||||
State(state): State<AppState>,
|
||||
) -> Result<Json<DocumentVersionWithoutContent>, SyncServerError> {
|
||||
debug!("Fetching latest document metadata for document `{document_id}` in vault `{vault_id}`");
|
||||
|
||||
let mut tx = state
|
||||
.database
|
||||
.create_readonly_transaction(&vault_id)
|
||||
.await
|
||||
.map_err(server_error)?;
|
||||
|
||||
let metadata = Database::get_latest_document_metadata(&mut tx, &document_id)
|
||||
.await
|
||||
.map_err(server_error)?
|
||||
.ok_or_else(|| not_found_error(anyhow!("Document does not exist")))?;
|
||||
|
||||
Ok(Json(metadata))
|
||||
}
|
||||
Loading…
Reference in a new issue