11use crate :: app:: AppState ;
22use crate :: models:: { Category , Crate , CrateVersions , Keyword , TopVersions , Version } ;
3- use crate :: schema:: { crate_downloads, crates, keywords, metadata, recent_crate_downloads} ;
3+ use crate :: schema:: {
4+ crate_downloads, crates, default_versions, keywords, metadata, recent_crate_downloads, versions,
5+ } ;
46use crate :: tasks:: spawn_blocking;
57use crate :: util:: diesel:: Conn ;
68use crate :: util:: errors:: AppResult ;
@@ -25,7 +27,7 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
2527
2628 fn encode_crates (
2729 conn : & mut impl Conn ,
28- data : Vec < ( Crate , i64 , Option < i64 > ) > ,
30+ data : Vec < ( Crate , i64 , Option < i64 > , Option < String > ) > ,
2931 ) -> AppResult < Vec < EncodableCrate > > {
3032 let krates = data. iter ( ) . map ( |( c, ..) | c) . collect :: < Vec < _ > > ( ) ;
3133 let versions: Vec < Version > = krates. versions ( ) . load ( conn) ?;
@@ -34,9 +36,10 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
3436 . into_iter ( )
3537 . map ( TopVersions :: from_versions)
3638 . zip ( data)
37- . map ( |( top_versions, ( krate, total, recent) ) | {
39+ . map ( |( top_versions, ( krate, total, recent, default_version ) ) | {
3840 Ok ( EncodableCrate :: from_minimal (
3941 krate,
42+ default_version. as_deref ( ) ,
4043 Some ( & top_versions) ,
4144 None ,
4245 false ,
@@ -51,18 +54,23 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
5154 Crate :: as_select ( ) ,
5255 crate_downloads:: downloads,
5356 recent_crate_downloads:: downloads. nullable ( ) ,
57+ versions:: num. nullable ( ) ,
5458 ) ;
5559
5660 let new_crates = crates:: table
5761 . inner_join ( crate_downloads:: table)
5862 . left_join ( recent_crate_downloads:: table)
63+ . left_join ( default_versions:: table)
64+ . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
5965 . order ( crates:: created_at. desc ( ) )
6066 . select ( selection)
6167 . limit ( 10 )
6268 . load ( conn) ?;
6369 let just_updated = crates:: table
6470 . inner_join ( crate_downloads:: table)
6571 . left_join ( recent_crate_downloads:: table)
72+ . left_join ( default_versions:: table)
73+ . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
6674 . filter ( crates:: updated_at. ne ( crates:: created_at) )
6775 . order ( crates:: updated_at. desc ( ) )
6876 . select ( selection)
@@ -72,6 +80,8 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
7280 let mut most_downloaded_query = crates:: table
7381 . inner_join ( crate_downloads:: table)
7482 . left_join ( recent_crate_downloads:: table)
83+ . left_join ( default_versions:: table)
84+ . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
7585 . into_boxed ( ) ;
7686 if !config. excluded_crate_names . is_empty ( ) {
7787 most_downloaded_query =
@@ -86,6 +96,8 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
8696 let mut most_recently_downloaded_query = crates:: table
8797 . inner_join ( crate_downloads:: table)
8898 . inner_join ( recent_crate_downloads:: table)
99+ . left_join ( default_versions:: table)
100+ . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
89101 . into_boxed ( ) ;
90102 if !config. excluded_crate_names . is_empty ( ) {
91103 most_recently_downloaded_query = most_recently_downloaded_query
0 commit comments