diff --git a/src/web/builds.rs b/src/web/builds.rs index 2a50feaa9..8675dfb79 100644 --- a/src/web/builds.rs +++ b/src/web/builds.rs @@ -9,7 +9,6 @@ use crate::{ impl_axum_webpage, utils::spawn_blocking, web::{ - crate_details::CrateDetails, error::AxumResult, extractors::{DbConnection, Path}, match_version, MetaData, ReqVersion, @@ -123,15 +122,34 @@ pub(crate) async fn build_list_json_handler( .into_response()) } -async fn build_trigger_check( +async fn crate_version_exists( mut conn: DbConnection, name: &String, version: &Version, +) -> Result { + let row = sqlx::query!( + r#" + SELECT COUNT(*) as "count!" + FROM releases + INNER JOIN crates ON crates.id = releases.crate_id + WHERE crates.name = $1 AND releases.version = $2"#, + name, + version.to_string(), + ) + .fetch_one(&mut *conn) + .await?; + Ok(row.count > 0) +} + +async fn build_trigger_check( + conn: DbConnection, + name: &String, + version: &Version, build_queue: &Arc, ) -> AxumResult { - let _ = CrateDetails::new(&mut *conn, &name, &version, None, vec![]) - .await? - .ok_or(AxumNope::VersionNotFound)?; + if !crate_version_exists(conn, name, version).await? { + return Err(AxumNope::VersionNotFound); + } let crate_version_is_in_queue = spawn_blocking({ let name = name.clone();