|
@@ -1,79 +1,68 @@
|
|
|
-package hello.controller;
|
|
|
+package hello.web;
|
|
|
|
|
|
-import static java.util.Comparator.comparing;
|
|
|
-
|
|
|
-import java.util.List;
|
|
|
import java.util.concurrent.ThreadLocalRandom;
|
|
|
import java.util.stream.IntStream;
|
|
|
|
|
|
-import hello.model.Message;
|
|
|
-import jakarta.servlet.http.HttpServletResponse;
|
|
|
-import org.springframework.http.MediaType;
|
|
|
-import org.springframework.web.bind.annotation.GetMapping;
|
|
|
-import org.springframework.web.bind.annotation.ModelAttribute;
|
|
|
-import org.springframework.web.bind.annotation.RequestParam;
|
|
|
-import org.springframework.web.bind.annotation.RestController;
|
|
|
-
|
|
|
import hello.UpdateWorldService;
|
|
|
import hello.model.Fortune;
|
|
|
import hello.model.World;
|
|
|
import hello.repository.DbRepository;
|
|
|
|
|
|
-@RestController
|
|
|
-public final class HelloController {
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.servlet.function.RenderingResponse;
|
|
|
+import org.springframework.web.servlet.function.ServerRequest;
|
|
|
+import org.springframework.web.servlet.function.ServerResponse;
|
|
|
+
|
|
|
+import static java.util.Comparator.comparing;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class DbHandler {
|
|
|
|
|
|
private DbRepository dbRepository;
|
|
|
private UpdateWorldService updateWorldService;
|
|
|
|
|
|
- public HelloController(
|
|
|
- DbRepository dbRepository,
|
|
|
- UpdateWorldService updateWorldService) {
|
|
|
+ public DbHandler(DbRepository dbRepository, UpdateWorldService updateWorldService) {
|
|
|
this.dbRepository = dbRepository;
|
|
|
this.updateWorldService = updateWorldService;
|
|
|
}
|
|
|
|
|
|
- @GetMapping("/plaintext")
|
|
|
- String plaintext(HttpServletResponse response) {
|
|
|
- response.setContentType(MediaType.TEXT_PLAIN_VALUE);
|
|
|
- return "Hello, World!";
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/json")
|
|
|
- Message json(HttpServletResponse response) {
|
|
|
- response.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
|
|
- return new Message("Hello, World!");
|
|
|
+ ServerResponse db(ServerRequest request) {
|
|
|
+ return ServerResponse.ok()
|
|
|
+ .contentType(MediaType.APPLICATION_JSON)
|
|
|
+ .body(dbRepository.getWorld(randomWorldNumber()));
|
|
|
}
|
|
|
|
|
|
- @GetMapping("/db")
|
|
|
- World db(HttpServletResponse response) {
|
|
|
- response.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
|
|
- return dbRepository.getWorld(randomWorldNumber());
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/queries")
|
|
|
- World[] queries(HttpServletResponse response, @RequestParam(required = false) String queries) {
|
|
|
- response.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
|
|
- return randomWorldNumbers().mapToObj(dbRepository::getWorld).limit(parseQueryCount(queries))
|
|
|
+ ServerResponse queries(ServerRequest request) {
|
|
|
+ String queries = request.params().getFirst("queries");
|
|
|
+ World[] worlds = randomWorldNumbers()
|
|
|
+ .mapToObj(dbRepository::getWorld).limit(parseQueryCount(queries))
|
|
|
.toArray(World[]::new);
|
|
|
+ return ServerResponse.ok()
|
|
|
+ .contentType(MediaType.APPLICATION_JSON)
|
|
|
+ .body(worlds);
|
|
|
}
|
|
|
|
|
|
- @GetMapping("/updates")
|
|
|
- World[] updates(HttpServletResponse response, @RequestParam(required = false) String queries) {
|
|
|
- response.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
|
|
- return randomWorldNumbers()
|
|
|
+ ServerResponse updates(ServerRequest request) {
|
|
|
+ String queries = request.params().getFirst("queries");
|
|
|
+ World[] worlds = randomWorldNumbers()
|
|
|
.mapToObj(id -> updateWorldService.updateWorld(id))
|
|
|
.limit(parseQueryCount(queries)).toArray(World[]::new);
|
|
|
+ return ServerResponse.ok()
|
|
|
+ .contentType(MediaType.APPLICATION_JSON)
|
|
|
+ .body(worlds);
|
|
|
}
|
|
|
|
|
|
- @GetMapping("/fortunes")
|
|
|
- @ModelAttribute("fortunes")
|
|
|
- List<Fortune> fortunes(HttpServletResponse response) {
|
|
|
- response.setContentType(MediaType.TEXT_HTML_VALUE);
|
|
|
+ ServerResponse fortunes(ServerRequest request) {
|
|
|
var fortunes = dbRepository.fortunes();
|
|
|
-
|
|
|
fortunes.add(new Fortune(0, "Additional fortune added at request time."));
|
|
|
fortunes.sort(comparing(fortune -> fortune.message));
|
|
|
- return fortunes;
|
|
|
+ return RenderingResponse
|
|
|
+ .create("fortunes")
|
|
|
+ .modelAttribute("fortunes", fortunes)
|
|
|
+ .header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_HTML_VALUE)
|
|
|
+ .build();
|
|
|
}
|
|
|
|
|
|
private static final int MIN_WORLD_NUMBER = 1;
|