11use 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::*};
1111use diesel_async:: RunQueryDsl ;
1212use http:: { StatusCode , request:: Parts } ;
1313use serde:: Serialize ;
14- use std:: collections:: HashMap ;
1514
1615/// Handles the `GET /api/private/admin_list/{username}` endpoint.
1716pub 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