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