WIP
[demos/spring/data-jdbc] / src / main / java / de / trion / kafka / outbox / OutboxController.java
1 package de.trion.kafka.outbox;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5 import org.springframework.http.ResponseEntity;
6 import org.springframework.transaction.annotation.Transactional;
7 import org.springframework.web.bind.annotation.*;
8 import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
9 import org.springframework.web.util.UriComponents;
10 import org.springframework.web.util.UriComponentsBuilder;
11
12 import java.time.LocalDateTime;
13
14 @RestController
15 @Transactional
16 @RequestMapping("/users")
17 public class OutboxController {
18
19     private static final Logger LOG = LoggerFactory.getLogger(OutboxController.class);
20
21
22     private final UserRepository repository;
23
24
25     public OutboxController(UserRepository repository) {
26         this.repository = repository;
27     }
28
29
30     @PostMapping
31     public ResponseEntity<Void> getVorgang(
32             ServletUriComponentsBuilder builder,
33             @RequestBody String username) {
34         String sanitizedUsername = OutboxController.sanitize(username);
35         User user = new User(sanitizedUsername, LocalDateTime.now(), false);
36         repository.save(user);
37         // TODO: Not-Unique Fehler auslösen
38         UriComponents uri =
39             builder
40                 .fromCurrentRequest()
41                 .path("{username}")
42                 .buildAndExpand(sanitizedUsername);
43         return ResponseEntity.created(uri.toUri()).build();
44     }
45
46     @GetMapping("{username}")
47     public ResponseEntity<User> getUser(@PathVariable String username) {
48         User user = repository.findByUsername(OutboxController.sanitize(username));
49
50         if (user == null)
51             return ResponseEntity.notFound().build();
52
53         return ResponseEntity.ok(user);
54     }
55
56     private static String sanitize(String string) {
57         if (string == null)
58             return "";
59
60         return string.trim().toLowerCase();
61     }
62 }