Skip to content

Commit

Permalink
Merge pull request #706 from metacpan/mickey/ratings_by_distributions…
Browse files Browse the repository at this point in the history
…_endpoint

Added /rating/by_distributions API endpoint
  • Loading branch information
oalders committed Jul 4, 2017
2 parents 2587553 + adb3a6e commit 719440e
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
52 changes: 52 additions & 0 deletions lib/MetaCPAN/Document/Rating.pm
Expand Up @@ -51,5 +51,57 @@ sub _build_rating {
return $rating / scalar keys %details;
}

__PACKAGE__->meta->make_immutable;

package MetaCPAN::Document::Rating::Set;

use strict;
use warnings;

use Moose;

use MetaCPAN::Util qw( single_valued_arrayref_to_scalar );

extends 'ElasticSearchX::Model::Document::Set';

sub by_distributions {
my ( $self, $distributions ) = @_;

my $body = {
size => 0,
query => { terms => { distribution => $distributions } },
aggregations => {
ratings => {
terms => {
field => 'distribution'
},
aggregations => {
ratings_dist => {
stats => {
field => 'rating'
}
}
}
}
}
};

my $ret = $self->es->search(
index => $self->index->name,
type => 'rating',
body => $body,
);
return unless $ret->{hits}{total};

my $data = [ map { $_->{key} => $_->{ratings_dist} }
@{ $ret->{aggregations}{ratings}{buckets} } ];

return {
releases => $data,
total => $ret->{hits}{total},
took => $ret->{took}
};
}

__PACKAGE__->meta->make_immutable;
1;
12 changes: 12 additions & 0 deletions lib/MetaCPAN/Server/Controller/Rating.pm
Expand Up @@ -9,4 +9,16 @@ BEGIN { extends 'MetaCPAN::Server::Controller' }

with 'MetaCPAN::Server::Role::JSONP';

sub by_distributions : Path('by_distributions') : Args(0) {
my ( $self, $c ) = @_;
my $distributions
= $c->req->body_data
? $c->req->body_data->{distribution}
: [ $c->req->param('distribution') ];
return unless $distributions and @{$distributions};
my $data = $self->model($c)->raw->by_distributions($distributions);
return unless $data;
$c->stash($data);
}

1;

0 comments on commit 719440e

Please sign in to comment.