api/v0: implement tag search

This commit is contained in:
Lucas Gabriel Vuotto 2025-04-27 15:19:28 +00:00
parent d1031a9162
commit 3ae6b02672
2 changed files with 35 additions and 0 deletions

View file

@ -72,6 +72,7 @@ sub startup ($self)
$r->get("/tag")->to("tags#show")->name("show_tag"); $r->get("/tag")->to("tags#show")->name("show_tag");
$r->get("/tags")->to("tags#list")->name("list_tags"); $r->get("/tags")->to("tags#list")->name("list_tags");
$r->get("/search")->to("tags#search")->name("search_tags");
$r->get("/random/media")->to("random#media")->name("random_media"); $r->get("/random/media")->to("random#media")->name("random_media");
$r->get("/random/tag")->to("random#tag")->name("random_tag"); $r->get("/random/tag")->to("random#tag")->name("random_tag");

View file

@ -66,4 +66,38 @@ sub show ($self)
return $self->render(json => {tags => [@tags]}); return $self->render(json => {tags => [@tags]});
} }
sub search ($self)
{
my $v = $self->validation;
my $q = $v->required("q")->param;
return $self->render(
json => {error => "Missing query."},
status => 400,
) if $v->has_error;
return $self->render(
json => {tags => []},
status => 200
) if $q eq "";
$q =~ s/[\%_\\]/\\$&/g;
$q .= '%';
my %attrs = (
$search_opts{TagCountView}->%*,
rows => 10,
);
my @tags = map +{
id => $_->id,
name => $_->name,
kind_id => $_->kind_id,
display => $_->display,
count => $_->count,
}, $self->schema->resultset("TagCountView")
->search({name => {-like => $q}}, \%attrs);
return $self->render(json => {tags => [@tags]});
}
1; 1;