diff options
author | Daniel Friesel <derf@finalrewind.org> | 2022-07-29 10:10:34 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2022-07-29 10:10:34 +0200 |
commit | 17126940115455296706b99655a052ffb60bd763 (patch) | |
tree | 0f77fc8c538b5f1918a76a493df31dd87cc95ffa /lib | |
parent | adf2df3a3bd2df4b5653845cea1d98f7297bbe4b (diff) |
mov get_connection_targets helper to Journeys Model
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/Travelynx.pm | 75 | ||||
-rwxr-xr-x | lib/Travelynx/Model/Journeys.pm | 67 |
2 files changed, 69 insertions, 73 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 7dc24dc..f6634cd 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -370,6 +370,7 @@ sub startup { state $journeys = Travelynx::Model::Journeys->new( log => $self->app->log, pg => $self->pg, + in_transit => $self->in_transit, stats_cache => $self->journey_stats_cache, renamed_station => $self->app->renamed_station, station_by_eva => $self->app->station_by_eva, @@ -1355,30 +1356,6 @@ sub startup { ); $self->helper( - 'get_latest_dest_id' => sub { - my ( $self, %opt ) = @_; - - my $uid = $opt{uid} // $self->current_user->{id}; - my $db = $opt{db} // $self->pg->db; - - if ( - my $id = $self->in_transit->get_checkout_station_id( - uid => $uid, - db => $db - ) - ) - { - return $id; - } - - return $self->journeys->get_latest_checkout_station_id( - uid => $uid, - db => $db - ); - } - ); - - $self->helper( 'resolve_sb_template' => sub { my ( $self, $template, %opt ) = @_; my $ret = $template; @@ -1392,54 +1369,6 @@ sub startup { ); $self->helper( - 'get_connection_targets' => sub { - my ( $self, %opt ) = @_; - - my $uid = $opt{uid} //= $self->current_user->{id}; - my $threshold = $opt{threshold} - // DateTime->now( time_zone => 'Europe/Berlin' ) - ->subtract( months => 4 ); - my $db = $opt{db} //= $self->pg->db; - my $min_count = $opt{min_count} // 3; - - if ( $opt{destination_name} ) { - return ( $opt{destination_name} ); - } - - my $dest_id = $opt{eva} // $self->get_latest_dest_id(%opt); - - if ( not $dest_id ) { - return; - } - - my $res = $db->query( - qq{ - select - count(checkout_station_id) as count, - checkout_station_id as dest - from journeys - where user_id = ? - and checkin_station_id = ? - and real_departure > ? - group by checkout_station_id - order by count desc; - }, - $uid, - $dest_id, - $threshold - ); - my @destinations - = $res->hashes->grep( sub { shift->{count} >= $min_count } ) - ->map( sub { shift->{dest} } )->each; - @destinations - = grep { $self->app->station_by_eva->{$_} } @destinations; - @destinations - = map { $self->app->station_by_eva->{$_}->[1] } @destinations; - return @destinations; - } - ); - - $self->helper( 'get_connecting_trains' => sub { my ( $self, %opt ) = @_; @@ -1479,7 +1408,7 @@ sub startup { return; } - my @destinations = $self->get_connection_targets(%opt); + my @destinations = $self->journeys->get_connection_targets(%opt); if ($exclude_via) { @destinations = grep { $_ ne $exclude_via } @destinations; diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index 8567d27..e747198 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -1194,4 +1194,71 @@ sub get_stats { return $stats; } +sub get_latest_dest_id { + my ( $self, %opt ) = @_; + + my $uid = $opt{uid}; + my $db = $opt{db} // $self->{pg}->db; + + if ( + my $id = $self->{in_transit}->get_checkout_station_id( + uid => $uid, + db => $db + ) + ) + { + return $id; + } + + return $self->get_latest_checkout_station_id( + uid => $uid, + db => $db + ); +} + +sub get_connection_targets { + my ( $self, %opt ) = @_; + + my $uid = $opt{uid}; + my $threshold = $opt{threshold} + // DateTime->now( time_zone => 'Europe/Berlin' )->subtract( months => 4 ); + my $db = $opt{db} //= $self->{pg}->db; + my $min_count = $opt{min_count} // 3; + + if ( $opt{destination_name} ) { + return ( $opt{destination_name} ); + } + + my $dest_id = $opt{eva} // $self->get_latest_dest_id(%opt); + + if ( not $dest_id ) { + return; + } + + my $res = $db->query( + qq{ + select + count(checkout_station_id) as count, + checkout_station_id as dest + from journeys + where user_id = ? + and checkin_station_id = ? + and real_departure > ? + group by checkout_station_id + order by count desc; + }, + $uid, + $dest_id, + $threshold + ); + my @destinations + = $res->hashes->grep( sub { shift->{count} >= $min_count } ) + ->map( sub { shift->{dest} } )->each; + @destinations + = grep { $self->{station_by_eva}{$_} } @destinations; + @destinations + = map { $self->{station_by_eva}{$_}->[1] } @destinations; + return @destinations; +} + 1; |