From 61787e24b7ea381a9be4b21a6b19470d019c5ef1 Mon Sep 17 00:00:00 2001 From: Mickey Nasriachi Date: Fri, 2 Jun 2017 17:09:36 +0100 Subject: [PATCH] Use new /release/latest_by_author endpoint Replace Elasticsearch query with a use of the new API endpoint. --- lib/MetaCPAN/Web/Controller/Author.pm | 25 +++++++++++-------------- lib/MetaCPAN/Web/Controller/Feed.pm | 10 +++------- lib/MetaCPAN/Web/Model/API/Release.pm | 23 ++++------------------- 3 files changed, 18 insertions(+), 40 deletions(-) diff --git a/lib/MetaCPAN/Web/Controller/Author.pm b/lib/MetaCPAN/Web/Controller/Author.pm index fd2cec8d08..72e510bf51 100644 --- a/lib/MetaCPAN/Web/Controller/Author.pm +++ b/lib/MetaCPAN/Web/Controller/Author.pm @@ -44,34 +44,31 @@ sub root : Chained('/') PathPart('author') CaptureArgs(1) { sub index : Chained('root') PathPart('') Args(0) { my ( $self, $c ) = @_; - my $id = $c->stash->{pauseid}; + my $pauseid = $c->stash->{pauseid}; - my $author_cv = $c->model('API::Author')->get($id); - - my $releases_cv = $c->model('API::Release')->latest_by_author($id); - - my ( $author, $data ) = ( $author_cv->recv, $releases_cv->recv ); + my $author_cv = $c->model('API::Author')->get($pauseid); + my $author = $author_cv->recv; $c->detach('/not_found') unless ( $author->{pauseid} ); - my $took = $data->{took}; - my $faves = $c->model('API::Favorite')->by_user( $author->{user} ); - - my $releases = [ map { $_->{fields} } @{ $data->{hits}->{hits} } ]; - single_valued_arrayref_to_scalar($releases); + my $releases = $c->model('API::Release')->latest_by_author($pauseid); my $date = List::Util::max map { DateTime::Format::ISO8601->parse_datetime( $_->{date} ) } - @$releases; + @{ $releases->{releases} }; $c->res->last_modified($date) if $date; + my $faves = $c->model('API::Favorite')->by_user( $author->{user} ); + + my $took = $releases->{took}; + $c->stash( { author => $author, faves => $faves, - releases => $releases, + releases => $releases->{releases}, template => 'author.html', took => $took, - total => $data->{hits}->{total}, + total => $releases->{total}, } ); diff --git a/lib/MetaCPAN/Web/Controller/Feed.pm b/lib/MetaCPAN/Web/Controller/Feed.pm index 5fb4ad7b6b..e5c6d6988f 100644 --- a/lib/MetaCPAN/Web/Controller/Feed.pm +++ b/lib/MetaCPAN/Web/Controller/Feed.pm @@ -104,12 +104,6 @@ sub author : Local : Args(1) { $c->add_author_key($author); my $author_cv = $c->model('API::Author')->get($author); - my $releases_cv = $c->model('API::Release')->latest_by_author($author); - - my $release_data = [ - map { single_valued_arrayref_to_scalar($_) } - map { $_->{fields} } @{ $releases_cv->recv->{hits}{hits} } - ]; my $author_info = $author_cv->recv; # If the author can be found, we get the hashref of author info. If it @@ -120,6 +114,8 @@ sub author : Local : Args(1) { $c->detach( '/not_found', [] ); } + my $releases = $c->model('API::Release')->latest_by_author($author); + my $faves = $c->model('API::Favorite')->by_user( $author_info->{user} ); $c->stash->{feed} = $self->build_feed( @@ -127,7 +123,7 @@ sub author : Local : Args(1) { title => "Recent CPAN activity of $author - MetaCPAN", entries => [ sort { $b->{date} cmp $a->{date} } - @{ $self->_format_release_entries($release_data) }, + @{ $self->_format_release_entries( $releases->{releases} ) }, @{ $self->_format_favorite_entries( $author, $faves ) } ], ); diff --git a/lib/MetaCPAN/Web/Model/API/Release.pm b/lib/MetaCPAN/Web/Model/API/Release.pm index 69fafdb32d..b3ca06ff28 100644 --- a/lib/MetaCPAN/Web/Model/API/Release.pm +++ b/lib/MetaCPAN/Web/Model/API/Release.pm @@ -49,25 +49,10 @@ sub distribution { } sub latest_by_author { - my ( $self, $author ) = @_; - return $self->request( - '/release/_search', - { - query => { - bool => { - must => [ - { term => { author => uc($author) } }, - { term => { status => 'latest' } } - ] - } - }, - sort => [ - 'distribution', { 'version_numified' => { reverse => 1 } } - ], - fields => [qw(author distribution name status abstract date)], - size => 1000, - } - ); + my ( $self, $pauseid ) = @_; + my $data = $self->request("/release/latest_by_author/$pauseid")->recv; + return unless $data; + return +{ releases => $data->{releases}, took => $data->{took} }; } sub all_by_author {