site: show similar media in media view

This commit is contained in:
Lucas Gabriel Vuotto 2025-04-29 12:11:30 +00:00
parent c625ee860a
commit 4c476dfd3e
2 changed files with 34 additions and 4 deletions

View file

@ -46,19 +46,26 @@ sub show ($self)
my $page = $v->optional("page")->num(1, undef)->param // 1;
return $self->render(status => 400) if $v->has_error;
my $tags = $v->optional("tags")->param;
return $self->render(status => 400) if $v->has_error;
my $media_id = $self->stash("media_id");
$self->render_later;
my $endpoint = $self->api_v0_url->path("media/$media_id")
my $media_endpoint = $self->api_v0_url->path("media/$media_id")
->query(page => $page);
$self->ua->get_p($endpoint)->then(sub ($tx) {
my $similar_endpoint = $self->api_v0_url
->path("media/similar/$media_id");
my $media_p = $self->ua->get_p($media_endpoint);
my $similar_p = $self->ua->get_p($similar_endpoint);
Mojo::Promise->all($media_p, $similar_p)->then(sub ($media, $similar) {
return $self->render(
text => "Backend error.",
status => 500,
) if $tx->error;
) if $media->[0]->error;
my $json = $tx->res->json;
my $json = $media->[0]->res->json;
my @tags = map +{
name => $_->{name},
kind_id => $_->{kind_id},
@ -66,6 +73,18 @@ sub show ($self)
count => $_->{count},
}, $json->{tags}->@*;
if (!$similar->[0]->error) {
my @similar_media = map +{
similarity_score => $_->{similarity_score},
show_media_url => $self->url_for("show_media",
media_id => $_->{id})
->query(tags => $tags),
media_src => $self->url_for_file(
$self->storage->get($_->{id})),
}, $similar->[0]->res->json->{media}->@*;
$self->stash(similar_media => [@similar_media]);
}
$self->stash(pager => $json->{pager});
return $self->render(
template => "media",