Unverified Commit 13277ad7 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

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.
parent be607983
Loading
Loading
Loading
Loading
+12 −35
Original line number Diff line number Diff line
@@ -594,13 +594,15 @@ sub startup {
			my $station      = $opt{station};
			my $dep_eva      = $opt{dep_eva};
			my $arr_eva      = $opt{arr_eva};
			my $with_related = $opt{with_related} // 0;
			my $force        = $opt{force};
			my $uid          = $opt{uid};
			my $db           = $opt{db} // $self->pg->db;
			my $status       = $self->iris->get_departures(
				station      => $station,
				lookbehind   => 120,
				lookahead  => 120
				lookahead    => 180,
				with_related => $with_related,
			);
			$uid //= $self->current_user->{id};
			my $user     = $self->get_user_status( $uid, $db );
@@ -645,31 +647,6 @@ sub startup {

			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
			# success.
			$self->in_transit->set_arrival_eva(
+13 −6
Original line number Diff line number Diff line
@@ -277,10 +277,14 @@ sub travel_v1 {
					);
				}
				if ($to_station) {

					# the user may not have provided the correct to_station, so
					# request related stations for checkout.
					my ( $train2, $error ) = $self->checkout(
						station      => $to_station,
						force        => 0,
						uid     => $uid
						uid          => $uid,
						with_related => 1,
					);
					if ($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(
			station      => $to_station,
			force        => $payload->{force} ? 1 : 0,
			uid     => $uid
			uid          => $uid,
			with_related => 1,
		);
		if ($error) {
			$self->render(