api/v0: inline listing helpers
This commit is contained in:
parent
9d8b300d11
commit
37802a2aa1
1 changed files with 28 additions and 39 deletions
|
@ -5,35 +5,6 @@ use Mojo::Base "Mojolicious::Controller";
|
||||||
use List::Util qw(uniq);
|
use List::Util qw(uniq);
|
||||||
|
|
||||||
|
|
||||||
sub _list_no_tags ($self, $page)
|
|
||||||
{
|
|
||||||
my $paged_media = $self->media_model->get->page($page);
|
|
||||||
|
|
||||||
return $self->render(json => {
|
|
||||||
media => $paged_media->fetchall,
|
|
||||||
pager => $paged_media->pager,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _list_with_tags ($self, $page, @tags)
|
|
||||||
{
|
|
||||||
my $paged_media_ids = $self->media_model->with_all_tags(@tags)
|
|
||||||
->page($page);
|
|
||||||
my @media_ids = map {$_->{media_id}} $paged_media_ids->fetchall->@*;
|
|
||||||
return $self->render(
|
|
||||||
json => {error => "No matching media found."},
|
|
||||||
status => 404,
|
|
||||||
) if @media_ids == 0;
|
|
||||||
|
|
||||||
return $self->render(json => {
|
|
||||||
media => $self->media_model->get(@media_ids)->page($page)
|
|
||||||
->fetchall,
|
|
||||||
# Use the original pager, as the one for the media is already
|
|
||||||
# capped at the size of a single page.
|
|
||||||
pager => $paged_media_ids->pager,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
sub list ($self)
|
sub list ($self)
|
||||||
{
|
{
|
||||||
my $v = $self->validation;
|
my $v = $self->validation;
|
||||||
|
@ -55,18 +26,36 @@ sub list ($self)
|
||||||
status => 400,
|
status => 400,
|
||||||
) if @tags > Pooru::API::V0::Model::Tags::ROWS;
|
) if @tags > Pooru::API::V0::Model::Tags::ROWS;
|
||||||
|
|
||||||
my @tag_ids;
|
my ($media, $pager);
|
||||||
@tag_ids = map {$_->{id}} $self->tags_model
|
if (@tags > 0) {
|
||||||
->get(display => [@tags])->fetchall->@* if @tags > 0;
|
my @tag_ids = map {$_->{id}} $self->tags_model
|
||||||
|
->get(display => [@tags])->fetchall->@*;
|
||||||
|
|
||||||
return $self->render(
|
return $self->render(
|
||||||
json => {error => "Some of the requested tags don't exist."},
|
json => {error => "Some of the requested tags " .
|
||||||
status => 400,
|
"don't exist."},
|
||||||
) if @tag_ids != @tags && @tags > 0;
|
status => 400,
|
||||||
|
) if @tag_ids != @tags;
|
||||||
|
|
||||||
return @tags == 0 ?
|
my $paged_media_ids = $self->media_model
|
||||||
$self->_list_no_tags($page) :
|
->with_all_tags(@tag_ids)->page($page);
|
||||||
$self->_list_with_tags($page, @tag_ids);
|
my @media_ids = map {$_->{media_id}} $paged_media_ids->
|
||||||
|
fetchall->@*;
|
||||||
|
return $self->render(
|
||||||
|
json => {error => "No matching media found."},
|
||||||
|
status => 404,
|
||||||
|
) if @media_ids == 0;
|
||||||
|
|
||||||
|
$media = $self->media_model
|
||||||
|
->get(@media_ids)->page($page)->fetchall;
|
||||||
|
$pager = $paged_media_ids->pager;
|
||||||
|
} else {
|
||||||
|
my $paged_media = $self->media_model->get->page($page);
|
||||||
|
$media = $paged_media->fetchall;
|
||||||
|
$pager = $paged_media->pager;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $self->render(json => {media => $media, pager => $pager});
|
||||||
}
|
}
|
||||||
|
|
||||||
sub show ($self)
|
sub show ($self)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue