WIP
[demos/kafka/outbox] / src / main / java / de / trion / kafka / outbox / OutboxController.java
index 934ca1f..86ff44f 100644 (file)
@@ -2,26 +2,61 @@ package de.trion.kafka.outbox;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.async.DeferredResult;
+import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
+import org.springframework.web.util.UriComponents;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import java.time.LocalDateTime;
 
 @RestController
+@Transactional
+@RequestMapping("/users")
 public class OutboxController {
 
     private static final Logger LOG = LoggerFactory.getLogger(OutboxController.class);
 
 
-    private final OutboxService service;
+    private final UserRepository repository;
+
+
+    public OutboxController(UserRepository repository) {
+        this.repository = repository;
+    }
+
+
+    @PostMapping
+    public ResponseEntity<Void> getVorgang(
+            ServletUriComponentsBuilder builder,
+            @RequestBody String username) {
+        String sanitizedUsername = OutboxController.sanitize(username);
+        User user = new User(sanitizedUsername, LocalDateTime.now(), false);
+        repository.save(user);
+        // TODO: Not-Unique Fehler auslösen
+        UriComponents uri =
+            builder
+                .fromCurrentRequest()
+                .path("{username}")
+                .buildAndExpand(sanitizedUsername);
+        return ResponseEntity.created(uri.toUri()).build();
+    }
+
+    @GetMapping("{username}")
+    public ResponseEntity<User> getUser(@PathVariable String username) {
+        User user = repository.findByUsername(OutboxController.sanitize(username));
 
+        if (user == null)
+            return ResponseEntity.notFound().build();
 
-    public OutboxController(OutboxService service) {
-        this.service = service;
+        return ResponseEntity.ok(user);
     }
 
+    private static String sanitize(String string) {
+        if (string == null)
+            return "";
 
-    @PostMapping("/create")
-    public ResponseEntity<Void> getVorgang(@RequestBody String user) {
+        return string.trim().toLowerCase();
     }
 }