Receiving the rating of the the driver of a trip (Java)
In this use case, the user rates the driver of a trip. The rating is usually between 1 to 5. The mobility service sometimes asks for a reason why the user has provided a particular rating.
Code snippets
BPP receives protocol rating
/*
Example Request JSON:
{
"context": {
"domain": "nic2004:60221",
"country": "IND",
"city": "std:080",
"action": "rating",
"core_version": "0.9.1",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"bpp_id": "https://mock_bpp.com/",
"bpp_uri": "https://mock_bpp.com/beckn/",
"transaction_id": "1209849124",
"message_id": "12341242345",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"id": "trip_1",
"value": "4"
}
}
*/
// BPP Rating Endpoint
@PostMapping("/bpp/rating")
public ResponseEntity rating(
@RequestHeader HttpHeaders headers,
@RequestBody RatingRequest request) {
var response = bppApplicationService.rating(request, headers);
return ResponseEntity.ok(response);
}
BPP processes the rating
public Response rating(RatingRequest request, HttpHeaders headers) {
var onRatingRequest = new OnRatingRequest();
// Validate the headers
var isHeadersValid = validateHeaders(headers);
// Construct and return error
if (!isHeadersValid) return null;
// Rate the given order
var rateOrder = request.getMessage().getId();
// Execute business logic here
// Generate the response
onRatingRequest = rateDelivery(rateOrder);
//invoke on_rate api
return invokeOnRating(onRatingRequest, headers);
}
}
BPP generates response
/*
Example Response JSON:
{
"context": {
"domain": "nic2004:60221",
"country": "IND",
"city": "std:080",
"action": "on_rating",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"bpp_id": "https://mock_bpp.com/",
"bpp_uri": "https://mock_bpp.com/beckn/",
"transaction_id": "1209849124",
"message_id": "12341242343",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"feedback": {
"id": "trip_1",
"descriptor": "https://feedback.mock_bpp.com/pooja-stores?id=trip_1",
"parent_id": "yellow-cabs"
}
}
}
*/
public OnRatingRequest rateDelivery(OrderRating orderRating) {
var ratingResult = RatingResponseBuilder.builder.result(orderRating).build();
// Convert response into protocol object similar to example above
return ratingResult;
}
BPP calls protocol on_rating
public Response invokeOnRating(OnRatingRequest ratingResponse, HttpHeaders headers) {
if(ratingResponse.getError() == null) {
// Call BAP on_rating api with the order response
// Call to look up function which returns the the public key and BAP Endpoint to be called
var url = lookUp(headers);
// Call BAP on_rating api with the rating order object
var response = apiClient.post(url[0] + Context.ActionEnum.on_rating,
constructResponseHeaders(),
ratingResponse,
OnRatingRequest.class);
return Response.of("ACK", null);
} else {
return Response.of("NACK", null);
}
}