From 7c437e35afc3b3d3ff32aecc2570c46497937ffd Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Thu, 7 Nov 2024 15:37:59 +0100 Subject: [PATCH] models/version: Fix `published_by()` error handling If there is an error in this query we shouldn't silently fail and return `None`, we should propagate the error instead and let the caller decide what to do. --- src/controllers/version/metadata.rs | 4 ++-- src/models/version.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/controllers/version/metadata.rs b/src/controllers/version/metadata.rs index 19d3b975fea..86a040a001c 100644 --- a/src/controllers/version/metadata.rs +++ b/src/controllers/version/metadata.rs @@ -104,7 +104,7 @@ pub async fn show( spawn_blocking(move || { let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into(); - let published_by = version.published_by(conn); + let published_by = version.published_by(conn)?; let actions = VersionOwnerAction::by_version(conn, &version)?; let version = EncodableVersion::from(version, &krate.name, published_by, actions); @@ -142,7 +142,7 @@ pub async fn update( update_request.version.yank_message, )?; - let published_by = version.published_by(conn); + let published_by = version.published_by(conn)?; let actions = VersionOwnerAction::by_version(conn, &version)?; let updated_version = EncodableVersion::from(version, &krate.name, published_by, actions); Ok(Json(json!({ "version": updated_version }))) diff --git a/src/models/version.rs b/src/models/version.rs index be7dd438f4b..fb2b5e338df 100644 --- a/src/models/version.rs +++ b/src/models/version.rs @@ -49,12 +49,12 @@ impl Version { /// Gets the User who ran `cargo publish` for this version, if recorded. /// Not for use when you have a group of versions you need the publishers for. - pub fn published_by(&self, conn: &mut impl Conn) -> Option { + pub fn published_by(&self, conn: &mut impl Conn) -> QueryResult> { use diesel::RunQueryDsl; match self.published_by { - Some(pb) => users::table.find(pb).first(conn).ok(), - None => None, + Some(pb) => users::table.find(pb).first(conn).optional(), + None => Ok(None), } }