Addder beendet sich bei Fehler und Logik für Beenden vereinfacht
[demos/kafka/training] / src / main / java / de / juplo / kafka / DriverController.java
index a02fd2c..cc3abed 100644 (file)
@@ -2,33 +2,69 @@ package de.juplo.kafka;
 
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.ResponseStatus;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.concurrent.ExecutionException;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 
 @RestController
 @RequiredArgsConstructor
 public class DriverController
 {
-  private final EndlessConsumer consumer;
+  private final ApplicationRecordHandler recordHandler;
+  private final AdderResults results;
 
 
-  @PostMapping("start")
-  public void start()
+  @GetMapping("state")
+  public Map<Integer, Map<String, AdderResult>> state()
   {
-    consumer.start();
+    return
+        recordHandler
+            .getState()
+            .entrySet()
+            .stream()
+            .collect(Collectors.toMap(
+                entry -> entry.getKey(),
+                entry -> entry.getValue().getState()));
   }
 
-  @PostMapping("stop")
-  public void stop() throws ExecutionException, InterruptedException
+  @GetMapping("state/{user}")
+  public ResponseEntity<Long> state(@PathVariable String user)
   {
-    consumer.stop();
+    for (AdderBusinessLogic adder : recordHandler.getState().values())
+    {
+      Optional<Long> sum = adder.getSum(user);
+      if (sum.isPresent())
+        return ResponseEntity.ok(sum.get());
+    }
+
+    return ResponseEntity.notFound().build();
   }
 
+  @GetMapping("results")
+  public Map<Integer, Map<String, List<AdderResult>>> results()
+  {
+    return results.getState();
+  }
+
+  @GetMapping("results/{user}")
+  public ResponseEntity<List<AdderResult>> results(@PathVariable String user)
+  {
+    for (Map<String, List<AdderResult>> resultsByUser : this.results.getState().values())
+    {
+      List<AdderResult> results = resultsByUser.get(user);
+      if (results != null)
+        return ResponseEntity.ok(results);
+    }
+
+    return ResponseEntity.notFound().build();
+  }
+
+
   @ExceptionHandler
   @ResponseStatus(HttpStatus.BAD_REQUEST)
   public ErrorResponse illegalStateException(IllegalStateException e)