Skip to content

Commit 7b841d9

Browse files
committed
controllers/version: Convert version_and_crate() to async
1 parent 9b763ce commit 7b841d9

File tree

5 files changed

+26
-19
lines changed

5 files changed

+26
-19
lines changed

src/controllers/version.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,26 @@ pub mod downloads;
22
pub mod metadata;
33
pub mod yank;
44

5+
use diesel_async::AsyncPgConnection;
6+
57
use crate::models::{Crate, Version};
6-
use crate::util::diesel::Conn;
78
use crate::util::errors::{crate_not_found, AppResult};
89

9-
fn version_and_crate(
10-
conn: &mut impl Conn,
10+
async fn version_and_crate(
11+
conn: &mut AsyncPgConnection,
1112
crate_name: &str,
1213
semver: &str,
1314
) -> AppResult<(Version, Crate)> {
14-
use crate::util::diesel::prelude::*;
15-
use diesel::RunQueryDsl;
15+
use diesel::prelude::*;
16+
use diesel_async::RunQueryDsl;
1617

1718
let krate: Crate = Crate::by_name(crate_name)
1819
.first(conn)
20+
.await
1921
.optional()?
2022
.ok_or_else(|| crate_not_found(crate_name))?;
2123

22-
let version = krate.find_version(conn, semver)?;
24+
let version = krate.find_version(conn, semver).await?;
2325

2426
Ok((version, krate))
2527
}

src/controllers/version/downloads.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,13 @@ pub async fn downloads(
4545
return Err(version_not_found(&crate_name, &version));
4646
}
4747

48-
let conn = app.db_read().await?;
48+
let mut conn = app.db_read().await?;
49+
let (version, _) = version_and_crate(&mut conn, &crate_name, &version).await?;
4950
spawn_blocking(move || {
5051
use diesel::RunQueryDsl;
5152

5253
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
5354

54-
let (version, _) = version_and_crate(conn, &crate_name, &version)?;
55-
5655
let cutoff_end_date = req
5756
.query()
5857
.get("before_date")

src/controllers/version/metadata.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ pub async fn dependencies(
5858
return Err(version_not_found(&crate_name, &version));
5959
}
6060

61-
let conn = state.db_read().await?;
61+
let mut conn = state.db_read().await?;
62+
let (version, _) = version_and_crate(&mut conn, &crate_name, &version).await?;
6263
spawn_blocking(move || {
6364
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
6465

65-
let (version, _) = version_and_crate(conn, &crate_name, &version)?;
6666
let deps = version.dependencies(conn)?;
6767
let deps = deps
6868
.into_iter()
@@ -97,11 +97,11 @@ pub async fn show(
9797
return Err(version_not_found(&crate_name, &version));
9898
}
9999

100-
let conn = state.db_read().await?;
100+
let mut conn = state.db_read().await?;
101+
let (version, krate) = version_and_crate(&mut conn, &crate_name, &version).await?;
101102
spawn_blocking(move || {
102103
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
103104

104-
let (version, krate) = version_and_crate(conn, &crate_name, &version)?;
105105
let published_by = version.published_by(conn);
106106
let actions = VersionOwnerAction::by_version(conn, &version)?;
107107

@@ -124,10 +124,10 @@ pub async fn update(
124124
return Err(version_not_found(&crate_name, &version));
125125
}
126126

127-
let conn = state.db_write().await?;
127+
let mut conn = state.db_write().await?;
128+
let (mut version, krate) = version_and_crate(&mut conn, &crate_name, &version).await?;
128129
spawn_blocking(move || {
129130
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
130-
let (mut version, krate) = version_and_crate(conn, &crate_name, &version)?;
131131

132132
validate_yank_update(&update_request.version, &version)?;
133133
perform_version_yank_update(

src/controllers/version/yank.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ async fn modify_yank(
5252
return Err(version_not_found(&crate_name, &version));
5353
}
5454

55-
let conn = state.db_write().await?;
55+
let mut conn = state.db_write().await?;
56+
let (mut version, krate) = version_and_crate(&mut conn, &crate_name, &version).await?;
5657
spawn_blocking(move || {
5758
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
58-
let (mut version, krate) = version_and_crate(conn, &crate_name, &version)?;
5959
perform_version_yank_update(&state, &req, conn, &mut version, &krate, Some(yanked), None)?;
6060
ok_true()
6161
})

src/models/krate.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use diesel::associations::Identifiable;
33
use diesel::dsl;
44
use diesel::pg::Pg;
55
use diesel::sql_types::{Bool, Text};
6+
use diesel_async::AsyncPgConnection;
67
use secrecy::SecretString;
78
use thiserror::Error;
89

@@ -195,12 +196,17 @@ impl Crate {
195196
crates::table.select(Self::as_select())
196197
}
197198

198-
pub fn find_version(&self, conn: &mut impl Conn, version: &str) -> AppResult<Version> {
199-
use diesel::RunQueryDsl;
199+
pub async fn find_version(
200+
&self,
201+
conn: &mut AsyncPgConnection,
202+
version: &str,
203+
) -> AppResult<Version> {
204+
use diesel_async::RunQueryDsl;
200205

201206
Version::belonging_to(self)
202207
.filter(versions::num.eq(version))
203208
.first(conn)
209+
.await
204210
.optional()?
205211
.ok_or_else(|| version_not_found(&self.name, version))
206212
}

0 commit comments

Comments
 (0)