compute effective visibility in database view

This commit is contained in:
Derf Null 2023-06-26 20:53:08 +02:00
parent f0be693811
commit 8cb0de1b70
No known key found for this signature in database
GPG key ID: 19E6E524EBB177BA
3 changed files with 92 additions and 15 deletions

View file

@ -1468,6 +1468,9 @@ sub startup {
comment => $in_transit->{user_data}{comment},
visibility => $in_transit->{visibility},
visibility_str => $in_transit->{visibility_str},
effective_visibility => $in_transit->{effective_visibility},
effective_visibility_str =>
$in_transit->{effective_visibility_str},
};
my $traewelling = $self->traewelling->get(
@ -1702,6 +1705,9 @@ sub startup {
comment => $latest->{user_data}{comment},
visibility => $latest->{visibility},
visibility_str => $latest->{visibility_str},
effective_visibility => $latest->{effective_visibility},
effective_visibility_str =>
$latest->{effective_visibility_str},
};
}
@ -1765,13 +1771,8 @@ sub startup {
},
intermediateStops => [],
visibility => {
level => $status->{visibility}
// $privacy->{default_visibility},
desc => (
$status->{visibility_str} eq 'default'
? $privacy->{default_visibility_str}
: $status->{visibility_str}
),
level => $status->{effective_visibility},
desc => $status->{effective_visibility_str},
}
};

View file

@ -1643,6 +1643,80 @@ my @migrations = (
}
$db->update( 'schema_version', { version => 40 } );
},
# v40 -> v41
# Compute effective visibility in in_transit_str and journeys_str.
sub {
my ($db) = @_;
$db->query(
qq{
drop view in_transit_str;
drop view journeys_str;
create view in_transit_str as select
user_id,
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
;
create view journeys_str as select
journeys.id as journey_id, user_id,
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
;
update schema_version set version = 41;
}
);
},
);
# TODO add 'hafas' column to in_transit (and maybe journeys? undo/redo needs something to work with...)

View file

@ -147,6 +147,8 @@ sub get {
= $ret->{visibility}
? $visibility_itoa{ $ret->{visibility} }
: 'default';
$ret->{effective_visibility_str}
= $visibility_itoa{ $ret->{effective_visibility} };
}
return $ret;