From 37802a2aa10302ecde01627f10b1cfd6037a8d56 Mon Sep 17 00:00:00 2001 From: Lucas Gabriel Vuotto Date: Sat, 3 May 2025 17:18:47 +0000 Subject: [PATCH] api/v0: inline listing helpers --- lib/Pooru/API/V0/Controller/Media.pm | 67 ++++++++++++---------------- 1 file changed, 28 insertions(+), 39 deletions(-) diff --git a/lib/Pooru/API/V0/Controller/Media.pm b/lib/Pooru/API/V0/Controller/Media.pm index 92f4330..6cc7ec0 100644 --- a/lib/Pooru/API/V0/Controller/Media.pm +++ b/lib/Pooru/API/V0/Controller/Media.pm @@ -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."}, - status => 400, - ) if @tag_ids != @tags && @tags > 0; + return $self->render( + json => {error => "Some of the requested tags " . + "don't exist."}, + status => 400, + ) 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)