From 7d3c293f91722c05c12073308827d99f95a27250 Mon Sep 17 00:00:00 2001 From: ragu Date: Thu, 23 Jun 2022 14:22:35 +0200 Subject: [PATCH] sig smartlock and reservation_end --- copri4/main/src/Mod/APIfunc.pm | 2 +- copri4/main/src/Mod/APIshareeio.pm | 32 ++++++++++++------ copri4/main/src/Mod/APIsigclient.pm | 50 ++++++++++++++++++++++++----- 3 files changed, 66 insertions(+), 18 deletions(-) diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index 992e5ed..24e64c3 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -2446,7 +2446,7 @@ sub auth_verify(){ if($auth_primary->{c_id} && $auth_primary->{c_id} > 0){ $bw->log("auth_verified on primary anchor 2 by dbname $varenv{dbname}",$auth_primary->{c_id},""); - print FILE "auth_verified on primary anchor 2 by dbname $varenv{dbname} | pri $auth_primary->{c_id}\n if($debug)"; + print FILE "auth_verified on primary anchor 2 by dbname $varenv{dbname} | pri $auth_primary->{c_id}\n" if($debug); #On booking_request, user must be authenticated and addr must exist #At first insert/update Operator dbname array on primary diff --git a/copri4/main/src/Mod/APIshareeio.pm b/copri4/main/src/Mod/APIshareeio.pm index 3161a27..a0543b3 100644 --- a/copri4/main/src/Mod/APIshareeio.pm +++ b/copri4/main/src/Mod/APIshareeio.pm @@ -138,18 +138,22 @@ sub sig_booking_update { my $bikeId = $q->escapeHTML($response_in->{data}->{bikeId}) || "";#on push, bikeId is bike_id my $rentalId = $q->escapeHTML($response_in->{data}->{rentalId}) || ""; + my $rows = 0; my $booking_values = {}; print FILE "event: $response_in->{event}\n" if($debug); + if($response_in->{event} eq "BIKE_STATUS" || $response_in->{event} eq "BATTERY_CAPACITY"){ + $response->{response_state} = "OK: $response_in->{event} methode not implemented, because we will get it just-in-time on requesting sig GET bikes"; + } if($response_in->{event} eq "RENTAL_START"){ - $response->{response_state} = "OK: methode not implemented, because rental will started by App"; + $response->{response_state} = "OK: methode not implemented, because rental will be started by App and success returned by sig-connector"; } - elsif($response_in->{event} eq "RESERVATION_END"){ - $response->{response_state} = "OK: this request is still on development"; + elsif($response_in->{event} eq "SMARTLOCK"){ + $response->{response_state} = "OK: methode not implemented, because unlocking will be started by App and success returned by sig-connector"; } - elsif($response_in->{event} eq "RENTAL_END"){ + elsif($response_in->{event} eq "RENTAL_END" || $response_in->{event} eq "RESERVATION_END"){ if($rentalId){ my $ctpos = {}; @@ -160,6 +164,10 @@ sub sig_booking_update { int10 => "IN::('2','3')", #ca_id => "$authraw->{c_id}",#sig doesn't know uid }; + + #only reserved alias requested rentals can be canceled + $booking_pos->{int10} = 2 if($response_in->{event} eq "RESERVATION_END"); + $ctpos = $dbt->fetch_tablerecord($dbh,$booking_pos); my $distance = 0; @@ -170,15 +178,21 @@ sub sig_booking_update { bikeId => $ctpos->{txt22}, rentalId => $ctpos->{txt11}, reservationId => "", - station_lock_state => "3",#addition state in context to get state=returned for miniquery distance => $distance, }; + #addition state in context to get state=returned for miniquery + $sig_book->{station_lock_state} = "3" if($response_in->{event} eq "RENTAL_END"); + my $authraw = { c_id => "" }; $authraw->{c_id} = $ctpos->{ca_id} if($ctpos->{ca_id}); $q->param(-name=>'bike',-value=>"$ctpos->{ct_name}") if($ctpos->{ct_name}); - $q->param(-name=>'state',-value=>"available"); - $q->param(-name=>'lock_state',-value=>"locked"); + $q->param(-name=>'state',-value=>"canceled") if($response_in->{event} eq "RESERVATION_END"); + if($response_in->{event} eq "RENTAL_END"){ + $q->param(-name=>'state',-value=>"available"); + $q->param(-name=>'lock_state',-value=>"locked"); + } + ($rows, $booking_values) = $apif->booking_update($q,$varenv,$authraw,$aowner,$sig_book) if($authraw->{c_id}); #response is for sig json after rental-end @@ -188,10 +202,10 @@ sub sig_booking_update { delete $booking_values->{co2saving}; delete $booking_values->{bike}; delete $booking_values->{response_text}; - $response->{response_state} = "OK: event matched, but something seems going wrong on booking_update" if(!$booking_values->{response_state}); + $response->{response_state} = "OK: event matched, but something seems to goes wrong on booking_update" if(!$booking_values->{response_state}); $response = {%$response, %$booking_values}; }else{ - $response->{response_state} = "Failure: there is no rental with rentalID=$rentalId"; + $response->{response_state} = "Failure: $response_in->{event} : there is no reservation OR rental with rentalID=$rentalId"; } }else{ diff --git a/copri4/main/src/Mod/APIsigclient.pm b/copri4/main/src/Mod/APIsigclient.pm index 7d1dbb4..2213f2d 100755 --- a/copri4/main/src/Mod/APIsigclient.pm +++ b/copri4/main/src/Mod/APIsigclient.pm @@ -280,34 +280,68 @@ sub sig_unlock { my $ctpos = shift || {}; my $sig_bikeId = $ctpos->{txt22} || $ct_bike->{txt22}; - my $response_in = {}; my $dbh = ""; my $owner = 169; + my $sig_book = {}; + my $rows = 0; open(FILE,">>$varenv->{logdir}/APIsigclient.log"); print FILE "\n3. *** $now_dt 'sig_unlock' \n"; - my $endpoint = "$dbt->{operator}->{$varenv->{dbname}}->{endpoint}/bikes/unlock"; + my $endpoint = "$dbt->{operator}->{$varenv->{dbname}}->{endpoint}/bikes/unlock/$sig_bikeId"; my $response_out = {}; my $return2copri = {}; - my $rest_json = $sig_bikeId; - (my $ret_json, my $ret_status) = $self->get_sig("$endpoint",$rest_json); + my $rest_json = ""; + my $ret_json = "failure: ret_json"; + my $ret_status = "failure: ret_status"; + ($ret_json, $ret_status) = $self->get_sig("$endpoint",$rest_json); eval { - $response_in = decode_json($ret_json); + $sig_book = decode_json($ret_json); $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; - print FILE "<--- $now_dt sig_unlock response_in with status_line: $ret_status:\n"; + print FILE "<--- $now_dt sig_unlock sig_book json with status_line: $ret_status:\n" . Dumper($sig_book) . "\n"; }; if ($@){ - print FILE "<--- failure sig_unlock raw response_in with status_line: $ret_status\n" . Dumper($ret_json) . "\n"; + print FILE "<--- $now_dt failure sig_unlock raw ret_json with status_line: $ret_status\n" . Dumper($ret_json) . "\n"; #warn $@; print FILE "warn:" . $@ . "\n"; } + #save always API return state for documentation + $sig_book->{return_state} = "$now_dt $todo: $ret_status"; + + if($ctpos->{c_id}){ + my $rows = 0; + my $update_pos = { + table => "contenttranspos", + mtime => "now()", + owner => "169", + txt25 => "$ctpos->{txt25}\n$sig_book->{return_state}", + }; + my $update_content = { + table => "content", + mtime => "now()", + owner => "169", + c_id => $ctpos->{cc_id}, + }; + + $update_pos->{int20} = 2 if($ret_json eq "Bike unlocked"); + $update_content->{int20} = 2 if($ret_json eq "Bike unlocked"); + + $rows = $dbt->update_record($dbh,$update_pos,$ctpos); + print FILE "<--- rows: $rows, update_pos: $ctpos->{c_id}, with:" . Dumper($update_pos) . "\n"; + + if($ctpos->{cc_id} && $ret_json eq "Bike unlocked"){ + $rows = $dbt->update_record($dbh,$update_content,$update_content); + print FILE "<--- rows: $rows, update_content: $ctpos->{cc_id}, with:" . Dumper($update_content) . "\n"; + } + + } + print FILE "sig_unlock ret_json from response_in\n" . Dumper($ret_json) . "\n"; close(FILE); - return; + return $sig_book; } #POST resverve, rental, ...