work: avoid race conditions with frontend when calling checkout

This commit is contained in:
Derf Null 2023-03-10 17:18:08 +01:00
parent f79e34fb62
commit abc1e4e3a8
No known key found for this signature in database
GPG key ID: 19E6E524EBB177BA
2 changed files with 14 additions and 0 deletions

View file

@ -553,6 +553,8 @@ sub startup {
my ( $self, %opt ) = @_;
my $station = $opt{station};
my $dep_eva = $opt{dep_eva};
my $arr_eva = $opt{arr_eva};
my $force = $opt{force};
my $uid = $opt{uid};
my $db = $opt{db} // $self->pg->db;
@ -576,6 +578,12 @@ sub startup {
if ( $status->{errstr} and not $force ) {
return ( 1, $status->{errstr} );
}
if ( $dep_eva and $dep_eva != $user->{dep_eva} ) {
return ( 0, 'race condition' );
}
if ( $arr_eva and $arr_eva != $user->{arr_eva} ) {
return ( 0, 'race condition' );
}
my $now = DateTime->now( time_zone => 'Europe/Berlin' );
my $journey = $self->in_transit->get(

View file

@ -91,6 +91,8 @@ sub run {
$self->app->checkout(
station => $arr,
force => 1,
dep_eva => $dep,
arr_eva => $arr,
uid => $uid
);
}
@ -156,6 +158,8 @@ sub run {
$self->app->checkout(
station => $arr,
force => 0,
dep_eva => $dep,
arr_eva => $arr,
uid => $uid
);
}
@ -167,6 +171,8 @@ sub run {
my ( undef, $error ) = $self->app->checkout(
station => $arr,
force => 1,
dep_eva => $dep,
arr_eva => $arr,
uid => $uid
);
if ($error) {