diff options
author | Yorhel <git@yorhel.nl> | 2020-08-04 13:46:11 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2020-08-07 12:36:58 +0200 |
commit | 26279ce6283511ac67c00d1ce98eca56ce3e8e60 (patch) | |
tree | b828ac5859e92ff9dee6990ca2c6a96be9a1b759 /lib/VNWeb/Releases | |
parent | 53196ed7a121e41c2fbe72aaecf257ca42ea7349 (diff) |
cleanup: Add enrich_release_elm() and releases_by_vn() functions
To abstract some common copy-pasted code.
These functions do cause an extra query on some pages. Several, in the
case of Chars::Edit.
Diffstat (limited to 'lib/VNWeb/Releases')
-rw-r--r-- | lib/VNWeb/Releases/Elm.pm | 13 | ||||
-rw-r--r-- | lib/VNWeb/Releases/Lib.pm | 18 |
2 files changed, 19 insertions, 12 deletions
diff --git a/lib/VNWeb/Releases/Elm.pm b/lib/VNWeb/Releases/Elm.pm index f942488f..f4ab8975 100644 --- a/lib/VNWeb/Releases/Elm.pm +++ b/lib/VNWeb/Releases/Elm.pm @@ -1,22 +1,13 @@ package VNWeb::Releases::Elm; use VNWeb::Prelude; +use VNWeb::Releases::Lib; # Used by UList.Opt and CharEdit to fetch releases from a VN id. elm_api Release => undef, { vid => { id => 1 } }, sub { my($data) = @_; - my $l = tuwf->dbAlli( - 'SELECT r.id, r.title, r.original, r.type AS rtype, r.released, r.reso_x, r.reso_y - FROM releases r - JOIN releases_vn rv ON rv.id = r.id - WHERE NOT r.hidden - AND rv.vid =', \$data->{vid}, - 'ORDER BY r.released, r.title, r.id' - ); - enrich_flatten lang => id => id => sub { sql('SELECT id, lang FROM releases_lang WHERE id IN', $_, 'ORDER BY lang') }, $l; - enrich_flatten platforms => id => id => sub { sql('SELECT id, platform FROM releases_platforms WHERE id IN', $_, 'ORDER BY platform') }, $l; - elm_Releases $l; + elm_Releases releases_by_vn $data->{vid}; }; 1; diff --git a/lib/VNWeb/Releases/Lib.pm b/lib/VNWeb/Releases/Lib.pm index 234de176..87f9c401 100644 --- a/lib/VNWeb/Releases/Lib.pm +++ b/lib/VNWeb/Releases/Lib.pm @@ -3,7 +3,23 @@ package VNWeb::Releases::Lib; use VNWeb::Prelude; use Exporter 'import'; -our @EXPORT = qw/enrich_release release_row_/; +our @EXPORT = qw/enrich_release_elm releases_by_vn enrich_release release_row_/; + + +# Enrich a list of releases so that it's suitable as 'Releases' Elm response. +sub enrich_release_elm { + enrich_merge id => 'SELECT id, title, original, released, type as rtype, reso_x, reso_y FROM releases WHERE id IN', @_; + enrich_flatten lang => id => id => sub { sql('SELECT id, lang FROM releases_lang WHERE id IN', $_, 'ORDER BY lang') }, @_; + enrich_flatten platforms => id => id => sub { sql('SELECT id, platform FROM releases_platforms WHERE id IN', $_, 'ORDER BY platform') }, @_; +} + +# Return the list of releases associated with a VN in the format suitable as 'Releases' Elm response. +sub releases_by_vn { + my($id) = @_; + my $l = tuwf->dbAlli('SELECT r.id FROM releases r JOIN releases_vn rv ON rv.id = r.id WHERE NOT r.hidden AND rv.vid =', \$id, 'ORDER BY r.released, r.title, r.id'); + enrich_release_elm $l; + $l +} # Enrich a list of releases so that it's suitable for release_row_(). |