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);
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
my $v = $self->validation;
|
||||
|
@ -55,18 +26,36 @@ sub list ($self)
|
|||
status => 400,
|
||||
) if @tags > Pooru::API::V0::Model::Tags::ROWS;
|
||||
|
||||
my @tag_ids;
|
||||
@tag_ids = map {$_->{id}} $self->tags_model
|
||||
->get(display => [@tags])->fetchall->@* if @tags > 0;
|
||||
my ($media, $pager);
|
||||
if (@tags > 0) {
|
||||
my @tag_ids = map {$_->{id}} $self->tags_model
|
||||
->get(display => [@tags])->fetchall->@*;
|
||||
|
||||
return $self->render(
|
||||
json => {error => "Some of the requested tags don't exist."},
|
||||
json => {error => "Some of the requested tags " .
|
||||
"don't exist."},
|
||||
status => 400,
|
||||
) if @tag_ids != @tags && @tags > 0;
|
||||
) if @tag_ids != @tags;
|
||||
|
||||
return @tags == 0 ?
|
||||
$self->_list_no_tags($page) :
|
||||
$self->_list_with_tags($page, @tag_ids);
|
||||
my $paged_media_ids = $self->media_model
|
||||
->with_all_tags(@tag_ids)->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;
|
||||
|
||||
$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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue