Skip to content

Commit e8d7a8e

Browse files
committed
Select the default version directly rather than all versions
1 parent 4144a3d commit e8d7a8e

File tree

1 file changed

+14
-29
lines changed

1 file changed

+14
-29
lines changed

src/controllers/admin.rs

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{
22
app::AppState,
33
auth::AuthCheck,
4-
models::{CrateOwner, OwnerKind, User, Version},
4+
models::{CrateOwner, OwnerKind, User},
55
schema::*,
66
util::errors::{AppResult, custom},
77
};
@@ -11,7 +11,6 @@ use diesel::{dsl::count_star, prelude::*};
1111
use diesel_async::RunQueryDsl;
1212
use http::{StatusCode, request::Parts};
1313
use serde::Serialize;
14-
use std::collections::HashMap;
1514

1615
/// Handles the `GET /api/private/admin_list/{username}` endpoint.
1716
pub async fn list(
@@ -43,14 +42,15 @@ pub async fn list(
4342
.await?;
4443

4544
let crates: Vec<(
46-
i32,
4745
String,
4846
Option<String>,
4947
DateTime<Utc>,
5048
Option<i64>,
5149
Option<i64>,
52-
i32,
5350
Option<i32>,
51+
String,
52+
i32,
53+
Option<Vec<Option<String>>>,
5454
i64,
5555
)> = CrateOwner::by_owner_kind(OwnerKind::User)
5656
.inner_join(crates::table)
@@ -59,53 +59,40 @@ pub async fn list(
5959
recent_crate_downloads::table.on(crates::id.eq(recent_crate_downloads::crate_id)),
6060
)
6161
.inner_join(default_versions::table.on(crates::id.eq(default_versions::crate_id)))
62+
.inner_join(versions::table.on(default_versions::version_id.eq(versions::id)))
6263
.filter(crate_owners::owner_id.eq(user.id))
6364
.select((
64-
crates::id,
6565
crates::name,
6666
crates::description,
6767
crates::updated_at,
6868
crate_downloads::downloads.nullable(),
6969
recent_crate_downloads::downloads.nullable(),
70-
default_versions::version_id,
7170
default_versions::num_versions,
71+
versions::num,
72+
versions::crate_size,
73+
versions::bin_names,
7274
rev_deps_subquery(),
7375
))
7476
.order(crates::name.asc())
7577
.load(&mut conn)
7678
.await?;
7779

78-
let crate_ids: Vec<_> = crates.iter().map(|(id, ..)| id).collect();
79-
80-
let versions: Vec<Version> = versions::table
81-
.filter(versions::crate_id.eq_any(crate_ids))
82-
.select(Version::as_select())
83-
.load(&mut conn)
84-
.await?;
85-
let mut versions_by_crate_id: HashMap<i32, Vec<Version>> = HashMap::new();
86-
for version in versions {
87-
let crate_versions = versions_by_crate_id.entry(version.crate_id).or_default();
88-
crate_versions.push(version);
89-
}
90-
9180
let verified = verified.unwrap_or(false);
9281
let crates = crates
9382
.into_iter()
9483
.map(
9584
|(
96-
crate_id,
9785
name,
9886
description,
9987
updated_at,
10088
downloads,
10189
recent_crate_downloads,
102-
default_version,
10390
num_versions,
91+
default_version_num,
92+
crate_size,
93+
bin_names,
10494
num_rev_deps,
10595
)| {
106-
let versions = versions_by_crate_id.get(&crate_id);
107-
let default_version =
108-
versions.and_then(|versions| versions.iter().find(|v| v.id == default_version));
10996
AdminCrateInfo {
11097
name,
11198
description,
@@ -114,11 +101,9 @@ pub async fn list(
114101
+ recent_crate_downloads.unwrap_or_default(),
115102
num_rev_deps,
116103
num_versions: num_versions.unwrap_or_default() as usize,
117-
default_version_num: default_version.map(|v| v.num.clone()).unwrap_or_default(),
118-
crate_size: default_version.map(|v| v.crate_size).unwrap_or(0),
119-
bin_names: default_version
120-
.map(|v| v.bin_names.clone())
121-
.unwrap_or_default(),
104+
default_version_num,
105+
crate_size,
106+
bin_names,
122107
}
123108
},
124109
)

0 commit comments

Comments
 (0)