@@ -23,8 +23,12 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
2323 . map ( Category :: into)
2424 . collect :: < Vec < EncodableCategory > > ( ) ;
2525
26- async fn inner ( conn : & mut AsyncPgConnection ) -> QueryResult < ( i64 , i64 ) > {
27- use diesel:: QueryDsl ;
26+ async fn inner (
27+ conn : & mut AsyncPgConnection ,
28+ ) -> QueryResult < ( i64 , i64 , Vec < Record > , Vec < Record > ) > {
29+ use diesel:: {
30+ ExpressionMethods , JoinOnDsl , NullableExpressionMethods , QueryDsl , SelectableHelper ,
31+ } ;
2832 use diesel_async:: RunQueryDsl ;
2933
3034 let num_crates: i64 = crates:: table. count ( ) . get_result ( conn) . await ?;
@@ -33,10 +37,40 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
3337 . get_result ( conn)
3438 . await ?;
3539
36- Ok ( ( num_crates, num_downloads) )
40+ let selection = (
41+ Crate :: as_select ( ) ,
42+ crate_downloads:: downloads,
43+ recent_crate_downloads:: downloads. nullable ( ) ,
44+ versions:: num. nullable ( ) ,
45+ versions:: yanked. nullable ( ) ,
46+ ) ;
47+
48+ let new_crates = crates:: table
49+ . inner_join ( crate_downloads:: table)
50+ . left_join ( recent_crate_downloads:: table)
51+ . left_join ( default_versions:: table)
52+ . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
53+ . order ( crates:: created_at. desc ( ) )
54+ . select ( selection)
55+ . limit ( 10 )
56+ . load ( conn)
57+ . await ?;
58+ let just_updated = crates:: table
59+ . inner_join ( crate_downloads:: table)
60+ . left_join ( recent_crate_downloads:: table)
61+ . left_join ( default_versions:: table)
62+ . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
63+ . filter ( crates:: updated_at. ne ( crates:: created_at) )
64+ . order ( crates:: updated_at. desc ( ) )
65+ . select ( selection)
66+ . limit ( 10 )
67+ . load ( conn)
68+ . await ?;
69+
70+ Ok ( ( num_crates, num_downloads, new_crates, just_updated) )
3771 }
3872
39- let ( num_crates, num_downloads) = inner ( & mut conn) . await ?;
73+ let ( num_crates, num_downloads, new_crates , just_updated ) = inner ( & mut conn) . await ?;
4074
4175 spawn_blocking ( move || {
4276 use diesel:: prelude:: * ;
@@ -79,26 +113,6 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
79113 versions:: yanked. nullable ( ) ,
80114 ) ;
81115
82- let new_crates = crates:: table
83- . inner_join ( crate_downloads:: table)
84- . left_join ( recent_crate_downloads:: table)
85- . left_join ( default_versions:: table)
86- . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
87- . order ( crates:: created_at. desc ( ) )
88- . select ( selection)
89- . limit ( 10 )
90- . load ( conn) ?;
91- let just_updated = crates:: table
92- . inner_join ( crate_downloads:: table)
93- . left_join ( recent_crate_downloads:: table)
94- . left_join ( default_versions:: table)
95- . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
96- . filter ( crates:: updated_at. ne ( crates:: created_at) )
97- . order ( crates:: updated_at. desc ( ) )
98- . select ( selection)
99- . limit ( 10 )
100- . load ( conn) ?;
101-
102116 let mut most_downloaded_query = crates:: table
103117 . inner_join ( crate_downloads:: table)
104118 . left_join ( recent_crate_downloads:: table)
0 commit comments