cc3abedacf9c5b06924eb5ea91497191c861b537
[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.List;
9 import java.util.Map;
10 import java.util.Optional;
11 import java.util.stream.Collectors;
12
13
14 @RestController
15 @RequiredArgsConstructor
16 public class DriverController
17 {
18   private final ApplicationRecordHandler recordHandler;
19   private final AdderResults results;
20
21
22   @GetMapping("state")
23   public Map<Integer, Map<String, AdderResult>> state()
24   {
25     return
26         recordHandler
27             .getState()
28             .entrySet()
29             .stream()
30             .collect(Collectors.toMap(
31                 entry -> entry.getKey(),
32                 entry -> entry.getValue().getState()));
33   }
34
35   @GetMapping("state/{user}")
36   public ResponseEntity<Long> state(@PathVariable String user)
37   {
38     for (AdderBusinessLogic adder : recordHandler.getState().values())
39     {
40       Optional<Long> sum = adder.getSum(user);
41       if (sum.isPresent())
42         return ResponseEntity.ok(sum.get());
43     }
44
45     return ResponseEntity.notFound().build();
46   }
47
48   @GetMapping("results")
49   public Map<Integer, Map<String, List<AdderResult>>> results()
50   {
51     return results.getState();
52   }
53
54   @GetMapping("results/{user}")
55   public ResponseEntity<List<AdderResult>> results(@PathVariable String user)
56   {
57     for (Map<String, List<AdderResult>> resultsByUser : this.results.getState().values())
58     {
59       List<AdderResult> results = resultsByUser.get(user);
60       if (results != null)
61         return ResponseEntity.ok(results);
62     }
63
64     return ResponseEntity.notFound().build();
65   }
66
67
68   @ExceptionHandler
69   @ResponseStatus(HttpStatus.BAD_REQUEST)
70   public ErrorResponse illegalStateException(IllegalStateException e)
71   {
72     return new ErrorResponse(e.getMessage(), HttpStatus.BAD_REQUEST.value());
73   }
74 }