Wordcount-Implementierung mit Kafka-Boardmitteln und MongoDB als Storage
[demos/kafka/training] / src / main / java / de / juplo / kafka / DriverController.java
1 package de.juplo.kafka;
2
3 import lombok.RequiredArgsConstructor;
4 import org.springframework.http.HttpStatus;
5 import org.springframework.http.ResponseEntity;
6 import org.springframework.web.bind.annotation.*;
7
8 import java.util.Map;
9 import java.util.concurrent.ExecutionException;
10
11
12 @RestController
13 @RequiredArgsConstructor
14 public class DriverController
15 {
16   private final EndlessConsumer consumer;
17
18
19   @PostMapping("start")
20   public void start()
21   {
22     consumer.start();
23   }
24
25   @PostMapping("stop")
26   public void stop() throws ExecutionException, InterruptedException
27   {
28     consumer.stop();
29   }
30
31
32   @GetMapping("seen")
33   public Map<Integer, Map<String, Map<String, Long>>> seen()
34   {
35     return consumer.getSeen();
36   }
37
38   @GetMapping("seen/{user}")
39   public ResponseEntity<Map<String, Long>> seen(@PathVariable String user)
40   {
41     for (Map<String, Map<String, Long>> users : consumer.getSeen().values())
42     {
43       Map<String, Long> words = users.get(user);
44       if (words != null)
45         return ResponseEntity.ok(words);
46     }
47
48     return ResponseEntity.notFound().build();
49   }
50
51
52   @ExceptionHandler
53   @ResponseStatus(HttpStatus.BAD_REQUEST)
54   public ErrorResponse illegalStateException(IllegalStateException e)
55   {
56     return new ErrorResponse(e.getMessage(), HttpStatus.BAD_REQUEST.value());
57   }
58 }