1
1
use crate :: {
2
2
app:: AppState ,
3
3
auth:: AuthCheck ,
4
- models:: { CrateOwner , OwnerKind , User , Version } ,
4
+ models:: { CrateOwner , OwnerKind , User } ,
5
5
schema:: * ,
6
6
util:: errors:: { AppResult , custom} ,
7
7
} ;
@@ -11,7 +11,6 @@ use diesel::{dsl::count_star, prelude::*};
11
11
use diesel_async:: RunQueryDsl ;
12
12
use http:: { StatusCode , request:: Parts } ;
13
13
use serde:: Serialize ;
14
- use std:: collections:: HashMap ;
15
14
16
15
/// Handles the `GET /api/private/admin_list/{username}` endpoint.
17
16
pub async fn list (
@@ -43,14 +42,15 @@ pub async fn list(
43
42
. await ?;
44
43
45
44
let crates: Vec < (
46
- i32 ,
47
45
String ,
48
46
Option < String > ,
49
47
DateTime < Utc > ,
50
48
Option < i64 > ,
51
49
Option < i64 > ,
52
- i32 ,
53
50
Option < i32 > ,
51
+ String ,
52
+ i32 ,
53
+ Option < Vec < Option < String > > > ,
54
54
i64 ,
55
55
) > = CrateOwner :: by_owner_kind ( OwnerKind :: User )
56
56
. inner_join ( crates:: table)
@@ -59,53 +59,40 @@ pub async fn list(
59
59
recent_crate_downloads:: table. on ( crates:: id. eq ( recent_crate_downloads:: crate_id) ) ,
60
60
)
61
61
. 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) ) )
62
63
. filter ( crate_owners:: owner_id. eq ( user. id ) )
63
64
. select ( (
64
- crates:: id,
65
65
crates:: name,
66
66
crates:: description,
67
67
crates:: updated_at,
68
68
crate_downloads:: downloads. nullable ( ) ,
69
69
recent_crate_downloads:: downloads. nullable ( ) ,
70
- default_versions:: version_id,
71
70
default_versions:: num_versions,
71
+ versions:: num,
72
+ versions:: crate_size,
73
+ versions:: bin_names,
72
74
rev_deps_subquery ( ) ,
73
75
) )
74
76
. order ( crates:: name. asc ( ) )
75
77
. load ( & mut conn)
76
78
. await ?;
77
79
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
-
91
80
let verified = verified. unwrap_or ( false ) ;
92
81
let crates = crates
93
82
. into_iter ( )
94
83
. map (
95
84
|(
96
- crate_id,
97
85
name,
98
86
description,
99
87
updated_at,
100
88
downloads,
101
89
recent_crate_downloads,
102
- default_version,
103
90
num_versions,
91
+ default_version_num,
92
+ crate_size,
93
+ bin_names,
104
94
num_rev_deps,
105
95
) | {
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) ) ;
109
96
AdminCrateInfo {
110
97
name,
111
98
description,
@@ -114,11 +101,9 @@ pub async fn list(
114
101
+ recent_crate_downloads. unwrap_or_default ( ) ,
115
102
num_rev_deps,
116
103
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,
122
107
}
123
108
} ,
124
109
)
0 commit comments