Skip to content

Commit 58f9030

Browse files
committed
controllers/version: Extract SQL query into a function for reusability
1 parent ca1e6b4 commit 58f9030

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

src/controllers/version.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,9 @@ async fn version_and_crate(
4747
crate_name: &str,
4848
semver: &str,
4949
) -> AppResult<(Version, Crate)> {
50-
let (krate, version) = Crate::by_name(crate_name)
51-
.left_join(
52-
versions::table.on(crates::id
53-
.eq(versions::crate_id)
54-
.and(versions::num.eq(semver))),
55-
)
50+
use ext::*;
51+
52+
let (krate, version) = crate_and_version_query(crate_name, semver)
5653
.select(<(Crate, Option<Version>)>::as_select())
5754
.first(conn)
5855
.await
@@ -68,3 +65,19 @@ fn deserialize_version<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Str
6865
let _ = semver::Version::parse(&s).map_err(Error::custom)?;
6966
Ok(s)
7067
}
68+
69+
mod ext {
70+
use super::*;
71+
use crates_io_diesel_helpers::canon_crate_name;
72+
73+
#[diesel::dsl::auto_type()]
74+
pub fn crate_and_version_query<'a>(crate_name: &'a str, semver: &'a str) -> _ {
75+
crates::table
76+
.left_join(
77+
versions::table.on(crates::id
78+
.eq(versions::crate_id)
79+
.and(versions::num.eq(semver))),
80+
)
81+
.filter(canon_crate_name(crates::name).eq(canon_crate_name(crate_name)))
82+
}
83+
}

0 commit comments

Comments
 (0)