Skip to content

Commit c068816

Browse files
committed
controllers/summary: Convert Record to named struct
1 parent f3edbcd commit c068816

File tree

1 file changed

+30
-27
lines changed

1 file changed

+30
-27
lines changed

src/controllers/summary.rs

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,13 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
2828

2929
let config = &state.config;
3030

31-
let selection = (
32-
Crate::as_select(),
33-
crate_downloads::downloads,
34-
recent_crate_downloads::downloads.nullable(),
35-
versions::num.nullable(),
36-
versions::yanked.nullable(),
37-
);
38-
3931
let new_crates = crates::table
4032
.inner_join(crate_downloads::table)
4133
.left_join(recent_crate_downloads::table)
4234
.left_join(default_versions::table)
4335
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
4436
.order(crates::created_at.desc())
45-
.select(selection)
37+
.select(Record::as_select())
4638
.limit(10)
4739
.load(&mut conn)
4840
.await?;
@@ -53,7 +45,7 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
5345
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
5446
.filter(crates::updated_at.ne(crates::created_at))
5547
.order(crates::updated_at.desc())
56-
.select(selection)
48+
.select(Record::as_select())
5749
.limit(10)
5850
.load(&mut conn)
5951
.await?;
@@ -65,7 +57,7 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
6557
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
6658
.filter(crates::name.ne_all(&config.excluded_crate_names))
6759
.then_order_by(crate_downloads::downloads.desc())
68-
.select(selection)
60+
.select(Record::as_select())
6961
.limit(10)
7062
.load(&mut conn)
7163
.await?;
@@ -77,7 +69,7 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
7769
.left_join(versions::table.on(default_versions::version_id.eq(versions::id)))
7870
.filter(crates::name.ne_all(&config.excluded_crate_names))
7971
.then_order_by(recent_crate_downloads::downloads.desc())
80-
.select(selection)
72+
.select(Record::as_select())
8173
.limit(10)
8274
.load(&mut conn)
8375
.await?;
@@ -108,13 +100,26 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
108100
}))
109101
}
110102

111-
type Record = (Crate, i64, Option<i64>, Option<String>, Option<bool>);
103+
#[derive(Debug, Queryable, Selectable)]
104+
#[diesel(check_for_backend(diesel::pg::Pg))]
105+
struct Record {
106+
#[diesel(embed)]
107+
krate: Crate,
108+
#[diesel(select_expression = crate_downloads::columns::downloads)]
109+
total_downloads: i64,
110+
#[diesel(select_expression = recent_crate_downloads::columns::downloads.nullable())]
111+
recent_downloads: Option<i64>,
112+
#[diesel(select_expression = versions::columns::num.nullable())]
113+
default_version: Option<String>,
114+
#[diesel(select_expression = versions::columns::yanked.nullable())]
115+
yanked: Option<bool>,
116+
}
112117

113118
async fn encode_crates(
114119
conn: &mut AsyncPgConnection,
115120
data: Vec<Record>,
116121
) -> AppResult<Vec<EncodableCrate>> {
117-
let krates = data.iter().map(|(c, ..)| c).collect::<Vec<_>>();
122+
let krates = data.iter().map(|record| &record.krate).collect::<Vec<_>>();
118123
let versions: Vec<Version> = Version::belonging_to(&krates)
119124
.filter(versions::yanked.eq(false))
120125
.select(Version::as_select())
@@ -126,18 +131,16 @@ async fn encode_crates(
126131
.into_iter()
127132
.map(TopVersions::from_versions)
128133
.zip(data)
129-
.map(
130-
|(top_versions, (krate, total, recent, default_version, yanked))| {
131-
Ok(EncodableCrate::from_minimal(
132-
krate,
133-
default_version.as_deref(),
134-
yanked,
135-
Some(&top_versions),
136-
false,
137-
total,
138-
recent,
139-
))
140-
},
141-
)
134+
.map(|(top_versions, record)| {
135+
Ok(EncodableCrate::from_minimal(
136+
record.krate,
137+
record.default_version.as_deref(),
138+
record.yanked,
139+
Some(&top_versions),
140+
false,
141+
record.total_downloads,
142+
record.recent_downloads,
143+
))
144+
})
142145
.collect()
143146
}

0 commit comments

Comments
 (0)