@@ -27,40 +27,50 @@ pub fn summary(req: &mut dyn RequestExt) -> EndpointResult {
27
27
. select ( metadata:: total_downloads)
28
28
. get_result ( & * conn) ?;
29
29
30
- let encode_crates = |krates : Vec < Crate > | -> AppResult < Vec < _ > > {
30
+ let encode_crates = |data : Vec < ( Crate , Option < i64 > ) > | -> AppResult < Vec < _ > > {
31
+ let recent_downloads = data. iter ( ) . map ( |& ( _, s) | s) . collect :: < Vec < _ > > ( ) ;
32
+
33
+ let krates = data. into_iter ( ) . map ( |( c, _) | c) . collect :: < Vec < _ > > ( ) ;
34
+
31
35
let versions = krates. versions ( ) . load :: < Version > ( & * conn) ?;
32
36
versions
33
37
. grouped_by ( & krates)
34
38
. into_iter ( )
35
39
. map ( |versions| Version :: top ( versions. into_iter ( ) . map ( |v| ( v. created_at , v. num ) ) ) )
36
40
. zip ( krates)
37
- . map ( |( top_versions, krate) | {
38
- Ok ( krate. minimal_encodable ( & top_versions, None , false , None ) )
41
+ . zip ( recent_downloads)
42
+ . map ( |( ( top_versions, krate) , recent_downloads) | {
43
+ Ok ( krate. minimal_encodable ( & top_versions, None , false , recent_downloads) )
39
44
} )
40
45
. collect ( )
41
46
} ;
42
47
48
+ let selection = ( ALL_COLUMNS , recent_crate_downloads:: downloads. nullable ( ) ) ;
49
+
43
50
let new_crates = crates
51
+ . left_join ( recent_crate_downloads:: table)
44
52
. order ( created_at. desc ( ) )
45
- . select ( ALL_COLUMNS )
53
+ . select ( selection )
46
54
. limit ( 10 )
47
55
. load ( & * conn) ?;
48
56
let just_updated = crates
57
+ . left_join ( recent_crate_downloads:: table)
49
58
. filter ( updated_at. ne ( created_at) )
50
59
. order ( updated_at. desc ( ) )
51
- . select ( ALL_COLUMNS )
60
+ . select ( selection )
52
61
. limit ( 10 )
53
62
. load ( & * conn) ?;
54
63
let most_downloaded = crates
55
- . order ( downloads. desc ( ) )
56
- . select ( ALL_COLUMNS )
64
+ . left_join ( recent_crate_downloads:: table)
65
+ . then_order_by ( downloads. desc ( ) )
66
+ . select ( selection)
57
67
. limit ( 10 )
58
68
. load ( & * conn) ?;
59
69
60
70
let most_recently_downloaded = crates
61
71
. inner_join ( recent_crate_downloads:: table)
62
- . order ( recent_crate_downloads:: downloads. desc ( ) )
63
- . select ( ALL_COLUMNS )
72
+ . then_order_by ( recent_crate_downloads:: downloads. desc ( ) )
73
+ . select ( selection )
64
74
. limit ( 10 )
65
75
. load ( & * conn) ?;
66
76
0 commit comments