1 package de.juplo.boot.data.jdbc;
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;
11 import java.time.LocalDateTime;
15 @RequestMapping("/users")
16 public class UserController {
18 private static final Logger LOG = LoggerFactory.getLogger(UserController.class);
21 private final UserRepository repository;
24 public UserController(UserRepository repository) {
25 this.repository = repository;
30 public ResponseEntity<Void> createUser(
31 ServletUriComponentsBuilder builder,
32 @RequestBody String username) {
33 String sanitizedUsername = UserController.sanitize(username);
34 User user = new User(sanitizedUsername, LocalDateTime.now(), false);
36 // Ein Fehler wegen doppeltem username verhindert das Speichern
37 repository.save(user);
38 user = repository.findByUsername(sanitizedUsername);
43 .pathSegment("{username}")
44 .buildAndExpand(sanitizedUsername);
45 return ResponseEntity.created(uri.toUri()).build();
48 @GetMapping("{username}")
49 public ResponseEntity<User> getUser(@PathVariable String username) {
50 User user = repository.findByUsername(UserController.sanitize(username));
53 return ResponseEntity.notFound().build();
55 return ResponseEntity.ok(user);
58 @DeleteMapping("{username}")
59 public ResponseEntity<User> removeUser(@PathVariable String username) {
60 User user = repository.findByUsername(UserController.sanitize(username));
63 return ResponseEntity.notFound().build();
65 repository.delete(user);
67 return ResponseEntity.ok(user);
71 public ResponseEntity<Iterable<User>> getUsers() {
72 return ResponseEntity.ok(repository.findAll());
76 private static String sanitize(String string) {
80 return string.trim().toLowerCase();