Simple web-app example for spring-boot-data-jdbc
[demos/spring/data-jdbc] / src / main / java / de / juplo / boot / data / jdbc / UserController.java
1 package de.juplo.boot.data.jdbc;
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> createUser(
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         UriComponents uri =
37             builder
38                 .fromCurrentRequest()
39                 .pathSegment("{username}")
40                 .buildAndExpand(sanitizedUsername);
41         return ResponseEntity.created(uri.toUri()).build();
42     }
43
44     @GetMapping("{username}")
45     public ResponseEntity<User> getUser(@PathVariable String username) {
46         User user = repository.findByUsername(UserController.sanitize(username));
47
48         if (user == null)
49             return ResponseEntity.notFound().build();
50
51         return ResponseEntity.ok(user);
52     }
53
54     @DeleteMapping("{username}")
55     public ResponseEntity<User> removeUser(@PathVariable String username) {
56         User user = repository.findByUsername(UserController.sanitize(username));
57
58         if (user == null)
59             return ResponseEntity.notFound().build();
60
61         repository.delete(user);
62
63         return ResponseEntity.ok(user);
64     }
65
66     @GetMapping()
67     public ResponseEntity<Iterable<User>> getUsers() {
68         return ResponseEntity.ok(repository.findAll());
69     }
70
71
72     private static String sanitize(String string) {
73         if (string == null)
74             return "";
75
76         return string.trim().toLowerCase();
77     }
78 }