163e2543e242b0c29ec61a0fd8fc7690cb6538aa
[demos/kafka/outbox] / src / main / java / de / trion / kafka / outbox / UserController.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
11 import java.time.LocalDateTime;
12
13 @RestController
14 @Transactional
15 @RequestMapping("/users")
16 public class UserController {
17
18     private static final Logger LOG = LoggerFactory.getLogger(UserController.class);
19
20
21     private final UserRepository repository;
22
23
24     public UserController(UserRepository repository) {
25         this.repository = repository;
26     }
27
28
29     @PostMapping
30     public ResponseEntity<Void> getVorgang(
31             ServletUriComponentsBuilder builder,
32             @RequestBody String username) {
33         String sanitizedUsername = UserController.sanitize(username);
34         User user = new User(sanitizedUsername, LocalDateTime.now(), false);
35         repository.save(user);
36         // TODO: Not-Unique Fehler auslösen
37         UriComponents uri =
38             builder
39                 .fromCurrentRequest()
40                 .path("{username}")
41                 .buildAndExpand(sanitizedUsername);
42         return ResponseEntity.created(uri.toUri()).build();
43     }
44
45     @GetMapping("{username}")
46     public ResponseEntity<User> getUser(@PathVariable String username) {
47         User user = repository.findByUsername(UserController.sanitize(username));
48
49         if (user == null)
50             return ResponseEntity.notFound().build();
51
52         return ResponseEntity.ok(user);
53     }
54
55     @GetMapping()
56     public ResponseEntity<Iterable<User>> getUsers() {
57         return ResponseEntity.ok(repository.findAll());
58     }
59
60
61     private static String sanitize(String string) {
62         if (string == null)
63             return "";
64
65         return string.trim().toLowerCase();
66     }
67 }