diff options
Diffstat (limited to 'lib/VNWeb/Producers/Elm.pm')
-rw-r--r-- | lib/VNWeb/Producers/Elm.pm | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/lib/VNWeb/Producers/Elm.pm b/lib/VNWeb/Producers/Elm.pm index ea541130..cde3bd39 100644 --- a/lib/VNWeb/Producers/Elm.pm +++ b/lib/VNWeb/Producers/Elm.pm @@ -2,24 +2,33 @@ package VNWeb::Producers::Elm; use VNWeb::Prelude; -elm_api Producers => undef, { search => {} }, sub { - my $q = shift->{search}; - my $qs = $q =~ s/[%_]//gr; +elm_api Producers => undef, { + search => { type => 'array', values => { searchquery => 1 } }, +}, sub { + my($data) = @_; + my @q = grep $_, $data->{search}->@*; - elm_ProducerResult tuwf->dbPagei({ results => 15, page => 1 }, - 'SELECT p.id, p.name, p.original - FROM (', - sql_join('UNION ALL', - $q =~ /^$RE{pid}$/ ? sql('SELECT 1, id FROM producers WHERE id =', \"$+{id}") : (), - sql('SELECT 1+substr_score(lower(name),' , \$qs, '), id FROM producers WHERE name ILIKE', \"%$qs%"), - sql('SELECT 10+substr_score(lower(original),', \$qs, '), id FROM producers WHERE original ILIKE', \"%$qs%"), - sql('SELECT 100, id FROM producers WHERE alias ILIKE', \"%$qs%"), - ), ') x(prio, id) - JOIN producers p ON p.id = x.id + elm_ProducerResult @q ? tuwf->dbPagei({ results => 15, page => 1 }, + 'SELECT p.id, p.title[1+1] AS name, p.title[1+1+1+1] AS altname + FROM', producerst, 'p', VNWeb::Validate::SearchQuery::sql_joina(\@q, 'p', 'p.id'), ' WHERE NOT p.hidden - GROUP BY p.id, p.name, p.original - ORDER BY MIN(x.prio), p.name - '); + ORDER BY sc.score DESC, p.sorttitle + ') : []; +}; + +js_api Producers => { + search => { type => 'array', values => { searchquery => 1 } }, +}, sub { + my($data) = @_; + my @q = grep $_, $data->{search}->@*; + + +{ results => @q ? tuwf->dbAlli( + 'SELECT p.id, p.title[1+1] AS name, p.title[1+1+1+1] AS altname + FROM', producerst, 'p', VNWeb::Validate::SearchQuery::sql_joina(\@q, 'p', 'p.id'), ' + WHERE NOT p.hidden + ORDER BY sc.score DESC, p.sorttitle + LIMIT', \30 + ) : [] }; }; 1; |