refactor polyline insertion into InTransit Model
This commit is contained in:
parent
2ff5f92bcc
commit
a0bd839594
2 changed files with 64 additions and 95 deletions
|
@ -621,53 +621,12 @@ sub startup {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($polyline) {
|
if ($polyline) {
|
||||||
my $coords = $polyline->{coords};
|
$self->in_transit->set_polyline(
|
||||||
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) {
|
|
||||||
$self->in_transit->set_polyline_id(
|
|
||||||
uid => $uid,
|
uid => $uid,
|
||||||
db => $db,
|
db => $db,
|
||||||
polyline_id => $polyline_id
|
polyline => $polyline,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
# mustn't be called during a transaction
|
# mustn't be called during a transaction
|
||||||
if ( not $opt{in_transaction} ) {
|
if ( not $opt{in_transaction} ) {
|
||||||
|
@ -1372,58 +1331,13 @@ sub startup {
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($polyline) {
|
if ($polyline) {
|
||||||
my $coords = $polyline->{coords};
|
$self->in_transit->set_polyline(
|
||||||
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->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,
|
uid => $uid,
|
||||||
db => $db,
|
db => $db,
|
||||||
polyline_id => $polyline_id
|
polyline => $polyline,
|
||||||
|
old_id => $in_transit->{polyline_id},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
sub set_polyline_id {
|
||||||
my ( $self, %opt ) = @_;
|
my ( $self, %opt ) = @_;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue