public ResponseEntity receiveMessage()

in services/audit/src/main/java/com/example/audit/web/AuditEventController.java [70:126]


    public ResponseEntity<String> receiveMessage(
            @RequestBody Map<String, Object> body, @RequestHeader Map<String, String> headers) throws IOException, InterruptedException, ExecutionException {

        // Validate the number of available processors
        logger.info("EventController: Active processors: " + Runtime.getRuntime().availableProcessors());

        System.out.println("Header elements");
        for (String field : requiredFields) {
            if (headers.get(field) == null) {
                String msg = String.format("Missing expected header: %s.", field);
                System.out.println(msg);
                return new ResponseEntity<String>(msg, HttpStatus.BAD_REQUEST);
            } else {
                System.out.println(field + " : " + headers.get(field));
            }
        }

        System.out.println("Body elements");
        for (String bodyField : body.keySet()) {
            System.out.println(bodyField + " : " + body.get(bodyField));
        }

        if (headers.get("ce-subject") == null) {
            String msg = "Missing expected header: ce-subject.";
            System.out.println(msg);
            return new ResponseEntity<String>(msg, HttpStatus.BAD_REQUEST);
        }

        String msg = "OK";

        Map<String, String> message = (Map<String, String>) body.get("message");
        String quote = message.get("quote");
        String author = message.get("author");
        String book = message.get("book");
        String randomID = message.get("randomId");

        // Saving result to Firestore
        try {
            ApiFuture<WriteResult> writeResult = eventService.auditQuote(quote, author, book, randomID);
            msg = String.format("Book metadata saved in Firestore at %s",
                writeResult.get().getUpdateTime());
            logger.info(msg);
        } catch(IllegalArgumentException e) {
            System.out.println("Could not write quote data to Firestore" + e.getMessage());
            return new ResponseEntity<String>(msg, HttpStatus.FAILED_DEPENDENCY);
        } catch(PermissionDeniedException | StatusRuntimeException e){
            String.format("Can not access the Firestore service - permission denied: %s", e.getMessage());
            System.out.println(msg); 
            return new ResponseEntity<String>(msg, HttpStatus.UNAUTHORIZED);
        } catch(Exception e) {
            msg = String.format("Can not access the Firestore service: %s", e.getMessage());
            System.out.println(msg);
            return new ResponseEntity<String>(msg, HttpStatus.UNAUTHORIZED);
        }

        return new ResponseEntity<String>(msg, HttpStatus.OK);
    }