summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2023-08-19 12:43:43 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2023-08-19 12:43:43 +0200
commitb85e8a1e04b2021843f7fb11337bc5a298635b7b (patch)
tree67db7a85306b8a0d2f124a949f503459d0da6677
parent85022709d75940a3f84cdbe462f9b261b38fc69e (diff)
API: Support HAFAS checkin (via journeyID)
-rwxr-xr-xlib/Travelynx.pm3
-rwxr-xr-xlib/Travelynx/Controller/Api.pm19
-rw-r--r--templates/api_documentation.html.ep15
3 files changed, 30 insertions, 7 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index e5978d4..8437686 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -527,7 +527,8 @@ sub startup {
my ($journey) = @_;
my $found;
for my $stop ( $journey->route ) {
- if ( $stop->eva == $station ) {
+ if ( $stop->name eq $station or $stop->eva == $station )
+ {
$found = $stop;
last;
}
diff --git a/lib/Travelynx/Controller/Api.pm b/lib/Travelynx/Controller/Api.pm
index 8ff98de..7f72a53 100755
--- a/lib/Travelynx/Controller/Api.pm
+++ b/lib/Travelynx/Controller/Api.pm
@@ -176,12 +176,14 @@ sub travel_v1 {
my $from_station = sanitize( q{}, $payload->{fromStation} );
my $to_station = sanitize( q{}, $payload->{toStation} );
my $train_id;
+ my $hafas = exists $payload->{train}{journeyID} ? 1 : 0;
if (
not(
$from_station
- and ( ( $payload->{train}{type} and $payload->{train}{no} )
- or $payload->{train}{id} )
+ and ( ( $payload->{train}{type} and $payload->{train}{no} )
+ or $payload->{train}{id}
+ or $payload->{train}{journeyID} )
)
)
{
@@ -196,7 +198,7 @@ sub travel_v1 {
return;
}
- if ( not $self->stations->search($from_station) ) {
+ if ( not $hafas and not $self->stations->search($from_station) ) {
$self->render(
json => {
success => \0,
@@ -208,7 +210,10 @@ sub travel_v1 {
return;
}
- if ( $to_station and not $self->stations->search($to_station) ) {
+ if ( $to_station
+ and not $hafas
+ and not $self->stations->search($to_station) )
+ {
$self->render(
json => {
success => \0,
@@ -222,7 +227,11 @@ sub travel_v1 {
my $train_p;
- if ( exists $payload->{train}{id} ) {
+ if ( exists $payload->{train}{journeyID} ) {
+ $train_p = Mojo::Promise->resolve(
+ sanitize( q{}, $payload->{train}{journeyID} ) );
+ }
+ elsif ( exists $payload->{train}{id} ) {
$train_p
= Mojo::Promise->resolve( sanitize( 0, $payload->{train}{id} ) );
}
diff --git a/templates/api_documentation.html.ep b/templates/api_documentation.html.ep
index ab90dec..0847139 100644
--- a/templates/api_documentation.html.ep
+++ b/templates/api_documentation.html.ep
@@ -102,7 +102,7 @@
<p style="font-family: Monospace;">
curl -X POST -H "Content-Type: application/json" -d '{"token":"<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>"}' <%= $api_root %>/travel
</p>
- <p>Payload zum Einchecken, optional mit Zielwahl:</p>
+ <p>Payload zum Einchecken per IRIS-Backend (Schienenverkehr DE/DB), optional mit Zielwahl:</p>
<p style="font-family: Monospace;">
{<br/>
"token" : "<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>",<br/>
@@ -116,6 +116,19 @@
"comment" : "Beliebiger Text" (optional, überschreibt vorherigen Kommentar)<br/>
}
</p>
+ <p>Payload zum Einchecken per HAFAS-Backend (Nahverkehr und außerhalb DE/DB), optional mit Zielwahl. fromStation und toStation müssen mit den Unterwegshalten übereinstimmen, z.B. "Hauptbahnhof (U Gleis 2+4), Essen (Ruhr)" statt "Essen Hbf".</p>
+ <p style="font-family: Monospace;">
+ {<br/>
+ "token" : "<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>",<br/>
+ "action" : "checkin",<br/>
+ "train" : {<br/>
+ "journeyID" : "1|1426396|4|80|19082023",<br/>
+ }<br/>
+ "fromStation" : 651806, (Name oder EVA-Nummer)<br/>
+ "toStation" : 654645, (optional, Name oder EVA-Nummer)<br/>
+ "comment" : "Beliebiger Text" (optional, überschreibt vorherigen Kommentar)<br/>
+ }
+ </p>
<p>Payload zur Wahl eines neuen Ziels, wenn bereits eingecheckt:</p>
<p style="font-family: Monospace;">
{<br/>