sig smartlock and reservation_end

This commit is contained in:
ragu 2022-06-23 14:22:35 +02:00
parent 0d034bf73b
commit 7d3c293f91
3 changed files with 66 additions and 18 deletions

View file

@ -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

View file

@ -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{

View file

@ -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, ...