From 2938649d6240b0e1d1928d4404d5e8835f2e5eb7 Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Tue, 2 Jun 2026 09:40:27 +0200 Subject: [PATCH] fix(db): skip UPDATE and audit on no-op object update (keep updated_at consistent) Co-Authored-By: Claude Sonnet 4.6 --- crates/db/src/catalog.rs | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/crates/db/src/catalog.rs b/crates/db/src/catalog.rs index 392e0ad..faad1c9 100644 --- a/crates/db/src/catalog.rs +++ b/crates/db/src/catalog.rs @@ -188,6 +188,12 @@ pub async fn update_object( return Ok(false); }; + let changes = update_changes(&old.to_input(), input); + if changes.is_empty() { + // No-op: don't touch updated_at or the audit log. + return Ok(true); + } + sqlx::query( "UPDATE object SET \ object_number = $2, object_name = $3, number_of_objects = $4, \ @@ -208,21 +214,17 @@ pub async fn update_object( .execute(&mut *conn) .await?; - let changes = update_changes(&old.to_input(), input); - - if !changes.is_empty() { - audit::record( - &mut *conn, - &NewAuditEvent { - actor, - action: AuditAction::Updated, - entity_type: ENTITY_TYPE.to_owned(), - entity_id: id.to_uuid(), - changes, - }, - ) - .await?; - } + audit::record( + &mut *conn, + &NewAuditEvent { + actor, + action: AuditAction::Updated, + entity_type: ENTITY_TYPE.to_owned(), + entity_id: id.to_uuid(), + changes, + }, + ) + .await?; Ok(true) }