Skip to content

Commit 1bbd510

Browse files
committed
controllers/summary: Extract new_crates and just_updated
1 parent 1d1136e commit 1bbd510

File tree

1 file changed

+38
-24
lines changed

1 file changed

+38
-24
lines changed

src/controllers/summary.rs

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
2323
.map(Category::into)
2424
.collect::<Vec<EncodableCategory>>();
2525

26-
async fn inner(conn: &mut AsyncPgConnection) -> QueryResult<(i64, i64)> {
27-
use diesel::QueryDsl;
26+
async fn inner(
27+
conn: &mut AsyncPgConnection,
28+
) -> QueryResult<(i64, i64, Vec<Record>, Vec<Record>)> {
29+
use diesel::{
30+
ExpressionMethods, JoinOnDsl, NullableExpressionMethods, QueryDsl, SelectableHelper,
31+
};
2832
use diesel_async::RunQueryDsl;
2933

3034
let num_crates: i64 = crates::table.count().get_result(conn).await?;
@@ -33,10 +37,40 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
3337
.get_result(conn)
3438
.await?;
3539

36-
Ok((num_crates, num_downloads))
40+
let selection = (
41+
Crate::as_select(),
42+
crate_downloads::downloads,
43+
recent_crate_downloads::downloads.nullable(),
44+
versions::num.nullable(),
45+
versions::yanked.nullable(),
46+
);
47+
48+
let new_crates = crates::table
49+
.inner_join(crate_downloads::table)
50+
.left_join(recent_crate_downloads::table)
51+
.left_join(default_versions::table)
52+
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
53+
.order(crates::created_at.desc())
54+
.select(selection)
55+
.limit(10)
56+
.load(conn)
57+
.await?;
58+
let just_updated = crates::table
59+
.inner_join(crate_downloads::table)
60+
.left_join(recent_crate_downloads::table)
61+
.left_join(default_versions::table)
62+
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
63+
.filter(crates::updated_at.ne(crates::created_at))
64+
.order(crates::updated_at.desc())
65+
.select(selection)
66+
.limit(10)
67+
.load(conn)
68+
.await?;
69+
70+
Ok((num_crates, num_downloads, new_crates, just_updated))
3771
}
3872

39-
let (num_crates, num_downloads) = inner(&mut conn).await?;
73+
let (num_crates, num_downloads, new_crates, just_updated) = inner(&mut conn).await?;
4074

4175
spawn_blocking(move || {
4276
use diesel::prelude::*;
@@ -79,26 +113,6 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
79113
versions::yanked.nullable(),
80114
);
81115

82-
let new_crates = crates::table
83-
.inner_join(crate_downloads::table)
84-
.left_join(recent_crate_downloads::table)
85-
.left_join(default_versions::table)
86-
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
87-
.order(crates::created_at.desc())
88-
.select(selection)
89-
.limit(10)
90-
.load(conn)?;
91-
let just_updated = crates::table
92-
.inner_join(crate_downloads::table)
93-
.left_join(recent_crate_downloads::table)
94-
.left_join(default_versions::table)
95-
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
96-
.filter(crates::updated_at.ne(crates::created_at))
97-
.order(crates::updated_at.desc())
98-
.select(selection)
99-
.limit(10)
100-
.load(conn)?;
101-
102116
let mut most_downloaded_query = crates::table
103117
.inner_join(crate_downloads::table)
104118
.left_join(recent_crate_downloads::table)

0 commit comments

Comments
 (0)