Skip to content

Commit 4934a88

Browse files
committed
controllers/krate/downloads: Remove spawn_blocking() calls
1 parent 0d9147b commit 4934a88

File tree

1 file changed

+50
-50
lines changed

1 file changed

+50
-50
lines changed

src/controllers/krate/downloads.rs

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
//! The endpoint for downloading a crate and exposing version specific
44
//! download counts are located in `version::downloads`.
55
6-
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
76
use std::cmp;
87

98
use crate::controllers::frontend_prelude::*;
@@ -13,63 +12,64 @@ use crate::schema::{crates, version_downloads, versions};
1312
use crate::sql::to_char;
1413
use crate::util::errors::crate_not_found;
1514
use crate::views::EncodableVersionDownload;
15+
use diesel_async::RunQueryDsl;
1616

1717
/// Handles the `GET /crates/:crate_id/downloads` route.
1818
pub async fn downloads(state: AppState, Path(crate_name): Path<String>) -> AppResult<Json<Value>> {
19-
let conn = state.db_read().await?;
20-
spawn_blocking(move || {
21-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
19+
let mut conn = state.db_read().await?;
2220

23-
use diesel::dsl::*;
24-
use diesel::sql_types::BigInt;
21+
use diesel::dsl::*;
22+
use diesel::sql_types::BigInt;
2523

26-
let crate_id: i32 = Crate::by_name(&crate_name)
27-
.select(crates::id)
28-
.first(conn)
29-
.optional()?
30-
.ok_or_else(|| crate_not_found(&crate_name))?;
24+
let crate_id: i32 = Crate::by_name(&crate_name)
25+
.select(crates::id)
26+
.first(&mut conn)
27+
.await
28+
.optional()?
29+
.ok_or_else(|| crate_not_found(&crate_name))?;
3130

32-
let mut versions: Vec<Version> = versions::table
33-
.filter(versions::crate_id.eq(crate_id))
34-
.load(conn)?;
35-
versions
36-
.sort_by_cached_key(|version| cmp::Reverse(semver::Version::parse(&version.num).ok()));
37-
let (latest_five, rest) = versions.split_at(cmp::min(5, versions.len()));
31+
let mut versions: Vec<Version> = versions::table
32+
.filter(versions::crate_id.eq(crate_id))
33+
.load(&mut conn)
34+
.await?;
3835

39-
let downloads = VersionDownload::belonging_to(latest_five)
40-
.filter(version_downloads::date.gt(date(now - 90.days())))
41-
.order((
42-
version_downloads::date.asc(),
43-
version_downloads::version_id.desc(),
44-
))
45-
.load(conn)?
46-
.into_iter()
47-
.map(VersionDownload::into)
48-
.collect::<Vec<EncodableVersionDownload>>();
36+
versions.sort_by_cached_key(|version| cmp::Reverse(semver::Version::parse(&version.num).ok()));
37+
let (latest_five, rest) = versions.split_at(cmp::min(5, versions.len()));
4938

50-
let sum_downloads = sql::<BigInt>("SUM(version_downloads.downloads)");
51-
let extra: Vec<ExtraDownload> = VersionDownload::belonging_to(rest)
52-
.select((
53-
to_char(version_downloads::date, "YYYY-MM-DD"),
54-
sum_downloads,
55-
))
56-
.filter(version_downloads::date.gt(date(now - 90.days())))
57-
.group_by(version_downloads::date)
58-
.order(version_downloads::date.asc())
59-
.load(conn)?;
39+
let downloads = VersionDownload::belonging_to(latest_five)
40+
.filter(version_downloads::date.gt(date(now - 90.days())))
41+
.order((
42+
version_downloads::date.asc(),
43+
version_downloads::version_id.desc(),
44+
))
45+
.load(&mut conn)
46+
.await?
47+
.into_iter()
48+
.map(VersionDownload::into)
49+
.collect::<Vec<EncodableVersionDownload>>();
6050

61-
#[derive(Serialize, Queryable)]
62-
struct ExtraDownload {
63-
date: String,
64-
downloads: i64,
65-
}
51+
let sum_downloads = sql::<BigInt>("SUM(version_downloads.downloads)");
52+
let extra: Vec<ExtraDownload> = VersionDownload::belonging_to(rest)
53+
.select((
54+
to_char(version_downloads::date, "YYYY-MM-DD"),
55+
sum_downloads,
56+
))
57+
.filter(version_downloads::date.gt(date(now - 90.days())))
58+
.group_by(version_downloads::date)
59+
.order(version_downloads::date.asc())
60+
.load(&mut conn)
61+
.await?;
6662

67-
Ok(Json(json!({
68-
"version_downloads": downloads,
69-
"meta": {
70-
"extra_downloads": extra,
71-
},
72-
})))
73-
})
74-
.await
63+
#[derive(Serialize, Queryable)]
64+
struct ExtraDownload {
65+
date: String,
66+
downloads: i64,
67+
}
68+
69+
Ok(Json(json!({
70+
"version_downloads": downloads,
71+
"meta": {
72+
"extra_downloads": extra,
73+
},
74+
})))
7575
}

0 commit comments

Comments
 (0)