api/v0: implement tag search
This commit is contained in:
parent
d1031a9162
commit
3ae6b02672
2 changed files with 35 additions and 0 deletions
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue