Receiving the rating for a doctor with feedback (Java)
In this use case, the user rates the doctor who provided the healthcare service. This rating is usually between 1 to 5. Sometimes the user may be asked to provide feedback along with the rating.
Code snippets
BPP receives protocol rating
/*
Example Request JSON:
{
"context": {
"domain": "nic2004:85121",
"country": "IND",
"city": "std:080",
"action": "rating",
"core_version": "0.9.2",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"transaction_id": "1239890342",
"message_id": "123793824",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"id": "dr_veena_slot_1",
"value": 5
}
}
*/
// 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:85121",
"country": "IND",
"city": "std:080",
"action": "on_rating",
"core_version": "0.9.2",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"transaction_id": "1239890342",
"message_id": "123793824",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"feedback": {
"id": "rating_1",
"descriptor": "https://feedback.bpp.com/provider/good-health-clinic/2839/veena",
"parent_id": "dr_veena"
}
}
}
*/
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);
}
}