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("/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");
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue