-package de.juplo.kafka;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.ExecutionException;
-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()
- {
- consumer.start();
- }
-
- @PostMapping("stop")
- public void stop() throws ExecutionException, InterruptedException
- {
- consumer.stop();
- }
-
-
- @GetMapping("state")
- public Map<Integer, Map<String, AdderResult>> state()
- {
- return
- recordHandler
- .getState()
- .entrySet()
- .stream()
- .collect(Collectors.toMap(
- entry -> entry.getKey(),
- entry -> entry.getValue().getState()));
- }
-
- @GetMapping("state/{user}")
- public ResponseEntity<Long> state(@PathVariable String user)
- {
- 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)
- {
- return new ErrorResponse(e.getMessage(), HttpStatus.BAD_REQUEST.value());
- }
-}