Skip to content

Commit

Permalink
refactor polyline insertion into InTransit Model
Browse files Browse the repository at this point in the history
  • Loading branch information
derf committed Apr 21, 2024
1 parent 2ff5f92 commit a0bd839
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 95 deletions.
104 changes: 9 additions & 95 deletions lib/Travelynx.pm
Original file line number Diff line number Diff line change
Expand Up @@ -621,52 +621,11 @@ sub startup {
}

if ($polyline) {
my $coords = $polyline->{coords};
my $from_eva = $polyline->{from_eva};
my $to_eva = $polyline->{to_eva};

my $polyline_str = JSON->new->encode($coords);

my $pl_res = $db->select(
'polylines',
['id'],
{
origin_eva => $from_eva,
destination_eva => $to_eva,
polyline => $polyline_str
},
{ limit => 1 }
$self->in_transit->set_polyline(
uid => $uid,
db => $db,
polyline => $polyline,
);

my $polyline_id;
if ( my $h = $pl_res->hash ) {
$polyline_id = $h->{id};
}
else {
eval {
$polyline_id = $db->insert(
'polylines',
{
origin_eva => $from_eva,
destination_eva => $to_eva,
polyline => $polyline_str
},
{ returning => 'id' }
)->hash->{id};
};
if ($@) {
$self->log->warn(
"add_route_timestamps: insert polyline: $@"
);
}
}
if ($polyline_id) {
$self->in_transit->set_polyline_id(
uid => $uid,
db => $db,
polyline_id => $polyline_id
);
}
}

# mustn't be called during a transaction
Expand Down Expand Up @@ -1372,57 +1331,12 @@ sub startup {
);

if ($polyline) {
my $coords = $polyline->{coords};
my $from_eva = $polyline->{from_eva};
my $to_eva = $polyline->{to_eva};

my $polyline_str = JSON->new->encode($coords);

my $pl_res = $db->select(
'polylines',
['id'],
{
origin_eva => $from_eva,
destination_eva => $to_eva,
polyline => $polyline_str
},
{ limit => 1 }
$self->in_transit->set_polyline(
uid => $uid,
db => $db,
polyline => $polyline,
old_id => $in_transit->{polyline_id},
);

my $polyline_id;
if ( my $h = $pl_res->hash ) {
$polyline_id = $h->{id};
}
else {
eval {
$polyline_id = $db->insert(
'polylines',
{
origin_eva => $from_eva,
destination_eva => $to_eva,
polyline => $polyline_str
},
{ returning => 'id' }
)->hash->{id};
};
if ($@) {
$self->app->log->warn(
"add_route_timestamps: insert polyline: $@"
);
}
}
if (
$polyline_id
and ( not $in_transit->{polyline_id}
or $polyline_id != $in_transit->{polyline_id} )
)
{
$self->in_transit->set_polyline_id(
uid => $uid,
db => $db,
polyline_id => $polyline_id
);
}
}

return;
Expand Down
55 changes: 55 additions & 0 deletions lib/Travelynx/Model/InTransit.pm
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,61 @@ sub set_arrival_times {
);
}

sub set_polyline {
my ( $self, %opt ) = @_;

my $uid = $opt{uid};
my $db = $opt{db} // $self->{pg}->db;
my $polyline = $opt{polyline};
my $old_id = $opt{old_id};

my $coords = $polyline->{coords};
my $from_eva = $polyline->{from_eva};
my $to_eva = $polyline->{to_eva};

my $polyline_str = JSON->new->encode($coords);

my $pl_res = $db->select(
'polylines',
['id'],
{
origin_eva => $from_eva,
destination_eva => $to_eva,
polyline => $polyline_str,
},
{ limit => 1 }
);

my $polyline_id;
if ( my $h = $pl_res->hash ) {
$polyline_id = $h->{id};
}
else {
eval {
$polyline_id = $db->insert(
'polylines',
{
origin_eva => $from_eva,
destination_eva => $to_eva,
polyline => $polyline_str
},
{ returning => 'id' }
)->hash->{id};
};
if ($@) {
$self->{log}->warn("add_route_timestamps: insert polyline: $@");
}
}
if ( $polyline_id and ( not defined $old_id or $polyline_id != $old_id ) ) {
$self->set_polyline_id(
uid => $uid,
db => $db,
polyline_id => $polyline_id
);
}

}

sub set_polyline_id {
my ( $self, %opt ) = @_;

Expand Down

0 comments on commit a0bd839

Please sign in to comment.