@@ -4,7 +4,7 @@ use MetaCPAN::Moose;
44
55use MetaCPAN::ESConfig qw( es_doc_path ) ;
66use MetaCPAN::Util
7- qw( hit_total single_valued_arrayref_to_scalar true false ) ;
7+ qw( MAX_RESULT_WINDOW hit_total single_valued_arrayref_to_scalar true false ) ;
88
99with ' MetaCPAN::Query::Role::Common' ;
1010
@@ -403,10 +403,18 @@ sub by_author_and_names {
403403}
404404
405405sub by_author {
406- my ( $self , $pauseid , $size , $page ) = @_ ;
406+ my ( $self , $pauseid , $page , $size ) = @_ ;
407407 $size //= 1000;
408408 $page //= 1;
409409
410+ if ( $page * $size >= MAX_RESULT_WINDOW ) {
411+ return {
412+ releases => [],
413+ took => 0,
414+ total => 0,
415+ };
416+ }
417+
410418 my $body = {
411419 query => {
412420 bool => {
@@ -495,10 +503,18 @@ sub latest_by_author {
495503}
496504
497505sub all_by_author {
498- my ( $self , $author , $size , $page ) = @_ ;
506+ my ( $self , $author , $page , $size ) = @_ ;
499507 $size //= 100;
500508 $page //= 1;
501509
510+ if ( $page * $size >= MAX_RESULT_WINDOW ) {
511+ return {
512+ releases => [],
513+ took => 0,
514+ total => 0,
515+ };
516+ }
517+
502518 my $body = {
503519 query => { term => { author => uc ($author ) } },
504520 sort => [ { date => ' desc' } ],
@@ -639,11 +655,11 @@ sub top_uploaders {
639655sub requires {
640656 my ( $self , $module , $page , $page_size , $sort ) = @_ ;
641657 return $self -> _get_depended_releases( [$module ], $page , $page_size ,
642- $page_size , $ sort );
658+ $sort );
643659}
644660
645661sub reverse_dependencies {
646- my ( $self , $distribution , $page , $page_size , $size , $ sort ) = @_ ;
662+ my ( $self , $distribution , $page , $page_size , $sort ) = @_ ;
647663
648664 # get the latest release of given distribution
649665 my $release = $self -> _get_latest_release($distribution ) || return ;
@@ -653,7 +669,7 @@ sub reverse_dependencies {
653669
654670 # return releases depended on those modules
655671 return $self -> _get_depended_releases( $modules , $page , $page_size ,
656- $size , $ sort );
672+ $sort );
657673}
658674
659675sub _get_latest_release {
@@ -725,10 +741,18 @@ sub _fix_sort_value {
725741}
726742
727743sub _get_depended_releases {
728- my ( $self , $modules , $page , $page_size , $size , $ sort ) = @_ ;
744+ my ( $self , $modules , $page , $page_size , $sort ) = @_ ;
729745 $page //= 1;
730746 $page_size //= 50;
731747
748+ if ( $page * $page_size >= MAX_RESULT_WINDOW ) {
749+ return +{
750+ data => [],
751+ took => 0,
752+ total => 0,
753+ };
754+ }
755+
732756 $sort = _fix_sort_value($sort );
733757
734758 my $dependency_filter = {
@@ -770,8 +794,8 @@ sub _get_depended_releases {
770794 ],
771795 },
772796 },
773- size => $size || $ page_size ,
774- from => $page * $page_size - $page_size ,
797+ size => $page_size ,
798+ from => ( $page - 1 ) * $page_size ,
775799 sort => $sort ,
776800 }
777801 );
@@ -784,22 +808,20 @@ sub _get_depended_releases {
784808}
785809
786810sub recent {
787- my ( $self , $page , $page_size , $type ) = @_ ;
811+ my ( $self , $type , $page , $page_size ) = @_ ;
788812 $page //= 1;
789813 $page_size //= 10000;
790814 $type //= ' ' ;
791815
792- my $query ;
793- my $from = ( $page - 1 ) * $page_size ;
794-
795- if ( $from + $page_size > 10000 ) {
796- return {
816+ if ( $page * $page_size >= MAX_RESULT_WINDOW ) {
817+ return +{
797818 releases => [],
798- total => 0,
799819 took => 0,
820+ total => 0,
800821 };
801822 }
802823
824+ my $query ;
803825 if ( $type eq ' n' ) {
804826 $query = {
805827 constant_score => {
@@ -829,7 +851,7 @@ sub recent {
829851
830852 my $body = {
831853 size => $page_size ,
832- from => $from ,
854+ from => ( $page - 1 ) * $page_size ,
833855 query => $query ,
834856 _source =>
835857 [qw( name author status abstract date distribution maturity) ],
0 commit comments