checkout: remove with_related special case
travelynx now always calls checkout with the database-provided arr_eva, so the edge case in which it provided a station that is not actually on the route of a train can no longer appear.
This commit is contained in:
parent
be607983c1
commit
13277ad770
2 changed files with 25 additions and 41 deletions
|
@ -591,16 +591,18 @@ sub startup {
|
||||||
'checkout' => sub {
|
'checkout' => sub {
|
||||||
my ( $self, %opt ) = @_;
|
my ( $self, %opt ) = @_;
|
||||||
|
|
||||||
my $station = $opt{station};
|
my $station = $opt{station};
|
||||||
my $dep_eva = $opt{dep_eva};
|
my $dep_eva = $opt{dep_eva};
|
||||||
my $arr_eva = $opt{arr_eva};
|
my $arr_eva = $opt{arr_eva};
|
||||||
my $force = $opt{force};
|
my $with_related = $opt{with_related} // 0;
|
||||||
my $uid = $opt{uid};
|
my $force = $opt{force};
|
||||||
my $db = $opt{db} // $self->pg->db;
|
my $uid = $opt{uid};
|
||||||
my $status = $self->iris->get_departures(
|
my $db = $opt{db} // $self->pg->db;
|
||||||
station => $station,
|
my $status = $self->iris->get_departures(
|
||||||
lookbehind => 120,
|
station => $station,
|
||||||
lookahead => 120
|
lookbehind => 120,
|
||||||
|
lookahead => 180,
|
||||||
|
with_related => $with_related,
|
||||||
);
|
);
|
||||||
$uid //= $self->current_user->{id};
|
$uid //= $self->current_user->{id};
|
||||||
my $user = $self->get_user_status( $uid, $db );
|
my $user = $self->get_user_status( $uid, $db );
|
||||||
|
@ -645,31 +647,6 @@ sub startup {
|
||||||
|
|
||||||
my $new_checkout_station_id = $status->{station_eva};
|
my $new_checkout_station_id = $status->{station_eva};
|
||||||
|
|
||||||
# When a checkout is triggered by a checkin, there is an edge case
|
|
||||||
# with related stations.
|
|
||||||
# Assume a user travels from A to B1, then from B2 to C. B1 and B2 are
|
|
||||||
# relatd stations (e.g. "Frankfurt Hbf" and "Frankfurt Hbf(tief)").
|
|
||||||
# Now, if they check in for the journey from B2 to C, and have not yet
|
|
||||||
# checked out of the previous train, $train is undef as B2 is not B1.
|
|
||||||
# Redo the request with with_related => 1 to avoid this case.
|
|
||||||
# While at it, we increase the lookahead to handle long journeys as
|
|
||||||
# well.
|
|
||||||
if ( not $train ) {
|
|
||||||
$status = $self->iris->get_departures(
|
|
||||||
station => $station,
|
|
||||||
lookbehind => 120,
|
|
||||||
lookahead => 180,
|
|
||||||
with_related => 1
|
|
||||||
);
|
|
||||||
($train) = List::Util::first { $_->train_id eq $train_id }
|
|
||||||
@{ $status->{results} };
|
|
||||||
if ( $train
|
|
||||||
and $self->stations->get_by_eva( $train->station_uic ) )
|
|
||||||
{
|
|
||||||
$new_checkout_station_id = $train->station_uic;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Store the intended checkout station regardless of this operation's
|
# Store the intended checkout station regardless of this operation's
|
||||||
# success.
|
# success.
|
||||||
$self->in_transit->set_arrival_eva(
|
$self->in_transit->set_arrival_eva(
|
||||||
|
|
|
@ -277,10 +277,14 @@ sub travel_v1 {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ($to_station) {
|
if ($to_station) {
|
||||||
|
|
||||||
|
# the user may not have provided the correct to_station, so
|
||||||
|
# request related stations for checkout.
|
||||||
my ( $train2, $error ) = $self->checkout(
|
my ( $train2, $error ) = $self->checkout(
|
||||||
station => $to_station,
|
station => $to_station,
|
||||||
force => 0,
|
force => 0,
|
||||||
uid => $uid
|
uid => $uid,
|
||||||
|
with_related => 1,
|
||||||
);
|
);
|
||||||
if ($error) {
|
if ($error) {
|
||||||
return Mojo::Promise->reject($error);
|
return Mojo::Promise->reject($error);
|
||||||
|
@ -330,10 +334,13 @@ sub travel_v1 {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# the user may not have provided the correct to_station, so
|
||||||
|
# request related stations for checkout.
|
||||||
my ( $train, $error ) = $self->checkout(
|
my ( $train, $error ) = $self->checkout(
|
||||||
station => $to_station,
|
station => $to_station,
|
||||||
force => $payload->{force} ? 1 : 0,
|
force => $payload->{force} ? 1 : 0,
|
||||||
uid => $uid
|
uid => $uid,
|
||||||
|
with_related => 1,
|
||||||
);
|
);
|
||||||
if ($error) {
|
if ($error) {
|
||||||
$self->render(
|
$self->render(
|
||||||
|
|
Loading…
Reference in a new issue