Skip to content

Commit

Permalink
Store journey backend; do not rely on '|' in ID to distinguish IRIS/H…
Browse files Browse the repository at this point in the history
…AFAS

This is in preparation for supporting multiple HAFAS backends, and possibly
EFA and RIS::Journeys.
  • Loading branch information
derf committed Jun 8, 2024
1 parent c969424 commit f71348a
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 1 deletion.
104 changes: 104 additions & 0 deletions lib/Travelynx/Command/database.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1946,6 +1946,110 @@ my @migrations = (
}
);
},

# v51 -> v52
# Explicitly encode backend type; preparation for multiple hAFAS backends
sub {
my ($db) = @_;
$db->query(
qq{
create table backends (
id smallserial not null primary key,
iris bool not null,
hafas bool not null,
efa bool not null,
ris bool not null,
name varchar(32) not null,
unique (iris, hafas, efa, ris, name)
);
insert into backends (id, iris, hafas, efa, ris, name) values (0, true, false, false, false, '');
insert into backends (id, iris, hafas, efa, ris, name) values (1, false, true, false, false, 'DB');
alter sequence backends_id_seq restart with 2;
alter table in_transit add column backend_id smallint references backends (id);
alter table journeys add column backend_id smallint references backends (id);
update in_transit set backend_id = 0 where train_id not like '%|%';
update journeys set backend_id = 0 where train_id not like '%|%';
update in_transit set backend_id = 1 where train_id like '%|%';
update journeys set backend_id = 1 where train_id like '%|%';
update journeys set backend_id = 1 where train_id = 'manual';
alter table in_transit alter column backend_id set not null;
alter table journeys alter column backend_id set not null;
drop view in_transit_str;
drop view journeys_str;
create view in_transit_str as select
user_id,
backend.iris as is_iris, backend.hafas as is_hafas,
backend.efa as is_efa, backend.ris as is_ris,
backend.name as backend_name,
train_type, train_line, train_no, train_id,
extract(epoch from checkin_time) as checkin_ts,
extract(epoch from sched_departure) as sched_dep_ts,
extract(epoch from real_departure) as real_dep_ts,
checkin_station_id as dep_eva,
dep_station.ds100 as dep_ds100,
dep_station.name as dep_name,
dep_station.lat as dep_lat,
dep_station.lon as dep_lon,
extract(epoch from checkout_time) as checkout_ts,
extract(epoch from sched_arrival) as sched_arr_ts,
extract(epoch from real_arrival) as real_arr_ts,
checkout_station_id as arr_eva,
arr_station.ds100 as arr_ds100,
arr_station.name as arr_name,
arr_station.lat as arr_lat,
arr_station.lon as arr_lon,
polyline_id,
polylines.polyline as polyline,
visibility,
coalesce(visibility, users.public_level & 127) as effective_visibility,
cancelled, route, messages, user_data,
dep_platform, arr_platform, data
from in_transit
left join polylines on polylines.id = polyline_id
left join users on users.id = user_id
left join stations as dep_station on checkin_station_id = dep_station.eva
left join stations as arr_station on checkout_station_id = arr_station.eva
left join backends as backend on backend_id = backend.id
;
create view journeys_str as select
journeys.id as journey_id, user_id,
backend.iris as is_iris, backend.hafas as is_hafas,
backend.efa as is_efa, backend.ris as is_ris,
backend.name as backend_name,
train_type, train_line, train_no, train_id,
extract(epoch from checkin_time) as checkin_ts,
extract(epoch from sched_departure) as sched_dep_ts,
extract(epoch from real_departure) as real_dep_ts,
checkin_station_id as dep_eva,
dep_station.ds100 as dep_ds100,
dep_station.name as dep_name,
dep_station.lat as dep_lat,
dep_station.lon as dep_lon,
extract(epoch from checkout_time) as checkout_ts,
extract(epoch from sched_arrival) as sched_arr_ts,
extract(epoch from real_arrival) as real_arr_ts,
checkout_station_id as arr_eva,
arr_station.ds100 as arr_ds100,
arr_station.name as arr_name,
arr_station.lat as arr_lat,
arr_station.lon as arr_lon,
polylines.polyline as polyline,
visibility,
coalesce(visibility, users.public_level & 127) as effective_visibility,
cancelled, edited, route, messages, user_data,
dep_platform, arr_platform
from journeys
left join polylines on polylines.id = polyline_id
left join users on users.id = user_id
left join stations as dep_station on checkin_station_id = dep_station.eva
left join stations as arr_station on checkout_station_id = arr_station.eva
left join backends as backend on backend_id = backend.id
;
update schema_version set version = 52;
}
);
}
);

sub sync_stations {
Expand Down
12 changes: 12 additions & 0 deletions lib/Travelynx/Model/InTransit.pm
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ sub add {
my $json = JSON->new;

if ($train) {
my $backend_id
= $db->select( 'backends', ['id'], { iris => 1 } )->hash->{id};
$db->insert(
'in_transit',
{
Expand All @@ -127,10 +129,19 @@ sub add {
: 0
}
),
backend_id => $backend_id,
}
);
}
elsif ( $journey and $stop ) {
my $backend_id = $db->select(
'backends',
['id'],
{
hafas => 1,
name => 'DB'
}
)->hash->{id};
my @route;
my $product = $journey->product_at( $stop->loc->eva )
// $journey->product;
Expand Down Expand Up @@ -173,6 +184,7 @@ sub add {
real_departure => $stop->{rt_dep} // $stop->{sched_dep},
route => $json->encode( \@route ),
data => JSON->new->encode( { rt => $stop->{rt_dep} ? 1 : 0 } ),
backend_id => $backend_id,
}
);
}
Expand Down
6 changes: 5 additions & 1 deletion lib/Travelynx/Model/Journeys.pm
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@ sub add {
edited => 0x3fff,
cancelled => $opt{cancelled} ? 1 : 0,
route => JSON->new->encode( \@route ),
backend_id => 1,
};

if ( $opt{comment} ) {
Expand Down Expand Up @@ -515,7 +516,7 @@ sub get {

my @select
= (
qw(journey_id train_type train_line train_no checkin_ts sched_dep_ts real_dep_ts dep_eva dep_ds100 dep_name dep_lat dep_lon checkout_ts sched_arr_ts real_arr_ts arr_eva arr_ds100 arr_name arr_lat arr_lon cancelled edited route messages user_data visibility effective_visibility)
qw(journey_id is_iris is_hafas backend_name train_type train_line train_no checkin_ts sched_dep_ts real_dep_ts dep_eva dep_ds100 dep_name dep_lat dep_lon checkout_ts sched_arr_ts real_arr_ts arr_eva arr_ds100 arr_name arr_lat arr_lon cancelled edited route messages user_data visibility effective_visibility)
);
my %where = (
user_id => $uid,
Expand Down Expand Up @@ -573,6 +574,9 @@ sub get {

my $ref = {
id => $entry->{journey_id},
is_iris => $entry->{is_iris},
is_hafas => $entry->{is_hafas},
backend_name => $entry->{backend_name},
type => $entry->{train_type},
line => $entry->{train_line},
no => $entry->{train_no},
Expand Down
7 changes: 7 additions & 0 deletions templates/journey.html.ep
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,13 @@
% if (stash('polyline_groups')) {
%= include '_map', station_coordinates => stash('station_coordinates'), polyline_groups => stash('polyline_groups')
% }
<div class="row">
<div class="col s12">
Backend:
<i class="material-icons tiny" aria-hidden="true"><%= $journey->{is_iris} ? 'train' : 'directions' %></i>
%= $journey->{backend_name} || 'IRIS'
</div>
</div>
% if (not stash('readonly')) {
% if (stash('with_share')) {
<div class="row">
Expand Down

0 comments on commit f71348a

Please sign in to comment.