diff --git a/lib/MetaCPAN/Web/Controller/Favorite.pm b/lib/MetaCPAN/Web/Controller/Favorite.pm index acf304f6a5..ccfca5f343 100644 --- a/lib/MetaCPAN/Web/Controller/Favorite.pm +++ b/lib/MetaCPAN/Web/Controller/Favorite.pm @@ -4,29 +4,16 @@ BEGIN { extends 'MetaCPAN::Web::Controller' } sub recent : Local : Args(0) { my ( $self, $c ) = @_; - my $page_size = $c->req->get_page_size(100); - - my $data = $c->model('API::Favorite')->recent( $c->req->page, $page_size ) - ->recv; - my @faves = map { $_->{_source} } @{ $data->{hits}->{hits} }; - my @user_ids = map { $_->{user} } @faves; - - my $authors = $c->model('API::Author')->by_user( \@user_ids ); - my %author_for_user_id = map { $_->{user} => $_->{pauseid} } @{$authors}; - - foreach my $fave (@faves) { - next unless exists $author_for_user_id{ $fave->{user} }; - $fave->{clicked_by_author} = $author_for_user_id{ $fave->{user} }; - } - + my $data + = $c->model('API::Favorite')->recent( $c->req->page, $page_size ); $c->stash( { header => 1, - recent => \@faves, show_clicked_by => 1, + recent => $data->{favorites}, took => $data->{took}, - total => $data->{hits}->{total}, + total => $data->{total}, page_size => $page_size, template => 'favorite/recent.html', } diff --git a/lib/MetaCPAN/Web/Model/API/Favorite.pm b/lib/MetaCPAN/Web/Model/API/Favorite.pm index 08b9706d8f..5f710fd3f2 100644 --- a/lib/MetaCPAN/Web/Model/API/Favorite.pm +++ b/lib/MetaCPAN/Web/Model/API/Favorite.pm @@ -86,15 +86,25 @@ sub by_user { sub recent { my ( $self, $page, $page_size ) = @_; - $self->request( - '/favorite/_search', - { - size => $page_size, - from => ( $page - 1 ) * $page_size, - query => { match_all => {} }, - sort => [ { 'date' => { order => 'desc' } } ] + my $data = $self->request( '/favorite/recent', + { size => $page_size, page => $page } )->recv; + + my @user_ids = map { $_->{user} } @{ $data->{favorites} }; + return $data unless @user_ids; + + my $authors + = $self->request( '/author/by_user', undef, { user => \@user_ids } ) + ->recv; + if ( $authors and exists $authors->{authors} ) { + my %author_for_user_id + = map { $_->{user} => $_->{pauseid} } @{ $authors->{authors} }; + for my $fav ( @{ $data->{favorites} } ) { + next unless exists $author_for_user_id{ $fav->{user} }; + $fav->{clicked_by_author} = $author_for_user_id{ $fav->{user} }; } - ); + } + + return $data; } sub leaderboard {