diff --git a/sync-server/src/app_state/database.rs b/sync-server/src/app_state/database.rs index 2fc47ccb..346fea38 100644 --- a/sync-server/src/app_state/database.rs +++ b/sync-server/src/app_state/database.rs @@ -370,11 +370,12 @@ impl Database { .context("Cannot fetch document version") } + // inserting the document must be the last step of the transaction if there's one pub async fn insert_document_version( &self, vault_id: &VaultId, version: &StoredDocumentVersion, - transaction: Option<&mut Transaction<'_>>, + transaction: Option>, ) -> Result<()> { let document_id = version.document_id.as_hyphenated(); let query = sqlx::query!( @@ -401,14 +402,22 @@ impl Database { version.device_id ); - if let Some(transaction) = transaction { - query.execute(&mut **transaction).await + if let Some(mut transaction) = transaction { + query + .execute(&mut *transaction) + .await + .context("Cannot insert document version")?; + + transaction + .commit() + .await + .context("Failed to commit transaction")?; } else { query .execute(&self.get_connection_pool(vault_id).await?) .await + .context("Cannot insert document version")?; } - .context("Cannot insert document version")?; self.broadcasts .send_document_update( diff --git a/sync-server/src/server/create_document.rs b/sync-server/src/server/create_document.rs index d8083410..0f698538 100644 --- a/sync-server/src/server/create_document.rs +++ b/sync-server/src/server/create_document.rs @@ -1,4 +1,3 @@ -use anyhow::Context as _; use axum::{ Extension, Json, extract::{Path, State}, @@ -82,15 +81,9 @@ pub async fn create_document( state .database - .insert_document_version(&vault_id, &new_version, Some(&mut transaction)) + .insert_document_version(&vault_id, &new_version, Some(transaction)) .await .map_err(server_error)?; - transaction - .commit() - .await - .context("Failed to commit successful transaction") - .map_err(server_error)?; - Ok(Json(new_version.into())) } diff --git a/sync-server/src/server/delete_document.rs b/sync-server/src/server/delete_document.rs index fa9d578c..f7080417 100644 --- a/sync-server/src/server/delete_document.rs +++ b/sync-server/src/server/delete_document.rs @@ -1,4 +1,3 @@ -use anyhow::Context as _; use axum::{ Extension, Json, extract::{Path, State}, @@ -71,15 +70,9 @@ pub async fn delete_document( state .database - .insert_document_version(&vault_id, &new_version, Some(&mut transaction)) + .insert_document_version(&vault_id, &new_version, Some(transaction)) .await .map_err(server_error)?; - transaction - .commit() - .await - .context("Failed to commit successful transaction") - .map_err(server_error)?; - Ok(Json(new_version.into())) } diff --git a/sync-server/src/server/update_document.rs b/sync-server/src/server/update_document.rs index 04ba8b63..bf11504c 100644 --- a/sync-server/src/server/update_document.rs +++ b/sync-server/src/server/update_document.rs @@ -183,16 +183,10 @@ pub async fn update_document( state .database - .insert_document_version(&vault_id, &new_version, Some(&mut transaction)) + .insert_document_version(&vault_id, &new_version, Some(transaction)) .await .map_err(server_error)?; - transaction - .commit() - .await - .context("Failed to commit successful transaction") - .map_err(server_error)?; - Ok(Json(if is_different_from_request_content { DocumentUpdateResponse::MergingUpdate(new_version.into()) } else {