From 3ae6b02672287d2bca57a34b2ca947c6b49059d7 Mon Sep 17 00:00:00 2001 From: Lucas Gabriel Vuotto Date: Sun, 27 Apr 2025 15:19:28 +0000 Subject: [PATCH] api/v0: implement tag search --- lib/Pooru/API/V0.pm | 1 + lib/Pooru/API/V0/Controller/Tags.pm | 34 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/lib/Pooru/API/V0.pm b/lib/Pooru/API/V0.pm index a805860..ab0bcdf 100644 --- a/lib/Pooru/API/V0.pm +++ b/lib/Pooru/API/V0.pm @@ -72,6 +72,7 @@ sub startup ($self) $r->get("/tag")->to("tags#show")->name("show_tag"); $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/tag")->to("random#tag")->name("random_tag"); diff --git a/lib/Pooru/API/V0/Controller/Tags.pm b/lib/Pooru/API/V0/Controller/Tags.pm index f0252a6..cb423c4 100644 --- a/lib/Pooru/API/V0/Controller/Tags.pm +++ b/lib/Pooru/API/V0/Controller/Tags.pm @@ -66,4 +66,38 @@ sub show ($self) 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;