Add fetch metadata endpoint

This commit is contained in:
Andras Schmelczer 2026-09-22 20:27:45 +01:00
commit a392b95352
2 changed files with 52 additions and 0 deletions

View file

@ -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( pub async fn get_document_version(
&self, &self,
vault: &VaultId, vault: &VaultId,

View file

@ -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))
}