summaryrefslogtreecommitdiff
path: root/lib/VNWeb/Misc/ElmAnime.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNWeb/Misc/ElmAnime.pm')
-rw-r--r--lib/VNWeb/Misc/ElmAnime.pm25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/VNWeb/Misc/ElmAnime.pm b/lib/VNWeb/Misc/ElmAnime.pm
new file mode 100644
index 00000000..7910e18e
--- /dev/null
+++ b/lib/VNWeb/Misc/ElmAnime.pm
@@ -0,0 +1,25 @@
+package VNWeb::Misc::ElmAnime;
+
+use VNWeb::Prelude;
+
+elm_api Anime => undef, { search => {}, ref => { anybool => 1 } }, sub {
+ my($d) = @_;
+ my $q = $d->{search};
+ my $qs = sql_like $q;
+
+ elm_AnimeResult tuwf->dbPagei({ results => 15, page => 1 },
+ 'SELECT a.id, a.title_romaji AS title, coalesce(a.title_kanji, \'\') AS original
+ FROM (',
+ sql_join('UNION ALL',
+ $q =~ /^a([0-9]+)$/ ? sql('SELECT 1, id FROM anime WHERE id =', \"$1") : (),
+ sql('SELECT 1+substr_score(lower(title_romaji),', \$qs, '), id FROM anime WHERE title_romaji ILIKE', \"%$qs%"),
+ sql('SELECT 10+substr_score(lower(title_kanji),', \$qs, '), id FROM anime WHERE title_kanji ILIKE', \"%$qs%"),
+ ), ') x(prio, id)
+ JOIN anime a ON a.id = x.id',
+ $d->{ref} ? 'WHERE EXISTS(SELECT 1 FROM vn_anime va WHERE va.aid = a.id)' : (), '
+ GROUP BY a.id, a.title_romaji, a.title_kanji
+ ORDER BY MIN(x.prio), a.title_romaji
+ ');
+};
+
+1;