@@ -573,7 +573,6 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
573
573
use diesel:: types:: { Bool , BigInt , Nullable } ;
574
574
use diesel:: expression:: functions:: date_and_time:: { now, date} ;
575
575
use diesel:: expression:: sql_literal:: sql;
576
- use diesel:: query_source:: joins:: LeftOuter ;
577
576
578
577
let conn = req. db_conn ( ) ?;
579
578
let ( offset, limit) = req. pagination ( 10 , 100 ) ?;
@@ -585,12 +584,12 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
585
584
let recent_downloads = sql :: < Nullable < BigInt > > ( "SUM(crate_downloads.downloads)" ) ;
586
585
587
586
let mut query = crates:: table
588
- . join (
589
- crate_downloads:: table,
590
- LeftOuter ,
591
- crates :: id . eq ( crate_downloads :: crate_id ) . and (
592
- crate_downloads :: date . gt ( date ( now - 90 . days ( ) ) ) ,
593
- ) ,
587
+ . left_join (
588
+ crate_downloads:: table. on (
589
+ crates :: id . eq ( crate_downloads :: crate_id ) . and (
590
+ crate_downloads :: date . gt ( date ( now - 90 . days ( ) ) ) ,
591
+ )
592
+ )
594
593
)
595
594
. group_by ( crates:: id)
596
595
. select ( (
@@ -775,7 +774,7 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
775
774
. map ( |versions| Version :: max ( versions. into_iter ( ) . map ( |v| v. num ) ) )
776
775
. zip ( krates)
777
776
. map ( |( max_version, krate) | {
778
- Ok ( krate. minimal_encodable ( max_version, None , false , Some ( 0 ) ) )
777
+ Ok ( krate. minimal_encodable ( max_version, None , false , None ) )
779
778
} )
780
779
. collect ( )
781
780
} ;
@@ -833,6 +832,8 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
833
832
834
833
/// Handles the `GET /crates/:crate_id` route.
835
834
pub fn show ( req : & mut Request ) -> CargoResult < Response > {
835
+ use diesel:: expression:: dsl:: * ;
836
+
836
837
let name = & req. params ( ) [ "crate_id" ] ;
837
838
let conn = req. db_conn ( ) ?;
838
839
let krate = Crate :: by_name ( name) . first :: < Crate > ( & * conn) ?;
@@ -849,6 +850,10 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
849
850
. inner_join ( categories:: table)
850
851
. select ( categories:: all_columns)
851
852
. load ( & * conn) ?;
853
+ let recent_downloads = CrateDownload :: belonging_to ( & krate)
854
+ . filter ( crate_downloads:: date. gt ( date ( now - 90 . days ( ) ) ) )
855
+ . select ( sum ( crate_downloads:: downloads) )
856
+ . get_result ( & * conn) ?;
852
857
853
858
let badges = badges:: table. filter ( badges:: crate_id. eq ( krate. id ) ) . load (
854
859
& * conn,
@@ -872,7 +877,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
872
877
Some ( & cats) ,
873
878
Some ( badges) ,
874
879
false ,
875
- Some ( 0 ) ,
880
+ recent_downloads ,
876
881
) ,
877
882
versions : versions
878
883
. into_iter ( )
@@ -1037,7 +1042,7 @@ pub fn new(req: &mut Request) -> CargoResult<Response> {
1037
1042
warnings : Warnings < ' a > ,
1038
1043
}
1039
1044
Ok ( req. json ( & R {
1040
- krate : krate. minimal_encodable ( max_version, None , false , Some ( 0 ) ) ,
1045
+ krate : krate. minimal_encodable ( max_version, None , false , None ) ,
1041
1046
warnings : warnings,
1042
1047
} ) )
1043
1048
} )
0 commit comments